{"version":3,"file":"2521-224707241ff86beb6954.js","mappings":"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","sources":["webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/actions/delivery/DeliveryQualityAction.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/actions/delivery/DeliveryColorSpaceFromICCAction.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/actions/delivery/DeliveryColorSpaceAction.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/actions/delivery/DeliveryDPRAction.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/actions/delivery.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/actions/delivery/DeliveryAction.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/progressive.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/actions/delivery/DeliveryFormatAction.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/region/NamedRegion.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/region/RectangleRegion.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/actions/effect/blur/Blur.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/actions/effect/leveled/Accelerate.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/actions/effect/EffectActions/SimpleEffectAction.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/actions/effect/Cartoonify.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/actions/effect/Outline.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/actions/effect/Vectorize.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/actions/effect/SimulateColorBlind.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/actions/effect/AssistColorBlind.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/actions/effect/GradientFade.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/actions/effect/leveled/FadeOut.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/actions/effect/Shadow.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/actions/effect/StyleTransfer.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/actions/effect/pixelate/Pixelate.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/actions/effect/leveled/FadeIn.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/actions/effect/RemoveBackgroundAction.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/actions/effect/Theme.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/actions/effect/BackgroundRemoval.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/actions/effect/DropShadow.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/actions/effect/GenerativeRemove.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/actions/effect/GenerativeReplace.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/actions/effect/GenerativeRecolor.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/actions/effect.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/aspectRatio/AspectRatioQualifierValue.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/actions/resize/ResizeSimpleAction.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/internal/models/createGravityModel.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/autoFocus.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/gravity/qualifiers/compass/CompassQualifier.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/internal/models/createGravityFromModel.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/actions/resize/ResizeAdvancedAction.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/background/shared/base/BackgroundQualifier.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/actions/resize/ThumbnailAction.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/actions/resize/ResizeCropAction.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/actions/resize/ResizeFillAction.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/actions/resize/ResizeLimitFillAction.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/actions/resize.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/internal/models/actionToJson.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/internal/models/ActionModel.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/internal/Action.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/internal/utils/dataStructureUtils.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/internal/utils/objectFlip.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/internal/internalConstants.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/internal/models/qualifierToJson.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/internal/models/QualifierModel.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/internal/qualifier/Qualifier.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/internal/qualifier/QualifierValue.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/internal/utils/prepareColor.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/internal/utils/toFloatAsString.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/internal/utils/unsupportedError.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/flag.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/flag/FlagQualifier.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/focusOn.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/format.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/format/FormatQualifier.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/gravity/xyCenterGravity/XYCenterGravity.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/gravity.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/gravity/GravityQualifier.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/gravity/autoGravity/AutoGravity.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/gravity/compassGravity/CompassGravity.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/gravity/focusOnGravity/FocusOnGravity.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/gravity/qualifiers/focusOn/FocusOnValue.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/quality.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/actions/background/actions/BackgroundColor.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/internal/RawAction.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/transformation/Transformation.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/internal/models/IErrorObject.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/transformation/ImageTransformation.js","webpack://freeths/./node_modules/@cloudinary/url-gen/config/BaseConfig.js","webpack://freeths/./node_modules/@cloudinary/url-gen/internal/internalConstants.js","webpack://freeths/./node_modules/@cloudinary/url-gen/config/URLConfig.js","webpack://freeths/./node_modules/@cloudinary/url-gen/sdkAnalytics/stringPad.js","webpack://freeths/./node_modules/@cloudinary/url-gen/sdkAnalytics/base64Map.js","webpack://freeths/./node_modules/@cloudinary/url-gen/sdkAnalytics/encodeVersion.js","webpack://freeths/./node_modules/@cloudinary/url-gen/sdkAnalytics/reverseVersion.js","webpack://freeths/./node_modules/@cloudinary/url-gen/sdkAnalytics/getSDKAnalyticsSignature.js","webpack://freeths/./node_modules/@cloudinary/url-gen/assets/CloudinaryFile.js","webpack://freeths/./node_modules/@cloudinary/url-gen/internal/url/cloudinaryURL.js","webpack://freeths/./node_modules/@cloudinary/url-gen/internal/url/urlUtils/publicIDContainsVersion.js","webpack://freeths/./node_modules/@cloudinary/url-gen/internal/url/urlUtils/isUrl.js","webpack://freeths/./node_modules/@cloudinary/url-gen/internal/url/urlUtils/isFileName.js","webpack://freeths/./node_modules/@cloudinary/url-gen/sdkAnalytics/getAnalyticsOptions.js","webpack://freeths/./node_modules/@cloudinary/url-gen/internal/utils/packageVersion.js","webpack://freeths/./node_modules/@cloudinary/url-gen/assets/CloudinaryTransformable.js","webpack://freeths/./node_modules/@cloudinary/url-gen/assets/CloudinaryImage.js","webpack://freeths/./node_modules/@cloudinary/transformation-builder-sdk/transformation/VideoTransformation.js","webpack://freeths/./node_modules/@cloudinary/url-gen/assets/CloudinaryVideo.js","webpack://freeths/./node_modules/@cloudinary/url-gen/instance/Cloudinary.js"],"sourcesContent":["import { QualifierValue } from \"../../internal/qualifier/QualifierValue.js\";\nimport { Qualifier } from \"../../internal/qualifier/Qualifier.js\";\nimport { DeliveryAction } from \"./DeliveryAction.js\";\nimport { CHROMA_VALUE_TO_CHROMA_MODEL_ENUM, CHROMA_MODEL_ENUM_TO_CHROMA_VALUE, ACTION_TYPE_TO_QUALITY_MODE_MAP } from \"../../internal/internalConstants.js\";\n/**\n * @description Controls the quality of the delivered image or video.\n * @memberOf Actions.Delivery\n * @extends {Actions.Delivery.DeliveryAction}\n * @see Visit {@link Actions.Delivery|Delivery} for an example\n */\nclass DeliveryQualityAction extends DeliveryAction {\n /**\n * @param {Qualifiers.Quality} qualityValue a Quality value\n */\n constructor(qualityValue) {\n super('q', qualityValue.toString(), 'level');\n }\n /**\n * Selet the Chroma sub sampling
\n * Learn more: {@link https://cloudinary.com/documentation/image_optimization#toggle_chroma_subsampling|Toggling chroma subsampling}\n * @param {420 | 444 | number} type The chroma sub sampling type\n */\n chromaSubSampling(type) {\n this._actionModel.chromaSubSampling = CHROMA_VALUE_TO_CHROMA_MODEL_ENUM[type];\n const qualityWithSubSampling = new QualifierValue([this._actionModel.level, type]);\n qualityWithSubSampling.setDelimiter(':');\n // We either have chroma or quantization, but not both\n return this.addQualifier(new Qualifier('q', qualityWithSubSampling));\n }\n /**\n * Controls the final quality by setting a maximum quantization percentage\n * @param {number} val\n */\n quantization(val) {\n this._actionModel.quantization = val;\n const qualityWithQuantization = new QualifierValue([this._actionModel.level, `qmax_${val}`]).setDelimiter(':');\n // We either have chroma or quantization, but not both\n return this.addQualifier(new Qualifier('q', qualityWithQuantization));\n }\n static fromJson(actionModel) {\n const { level, chromaSubSampling, quantization } = actionModel;\n const levelType = ACTION_TYPE_TO_QUALITY_MODE_MAP[level] || level;\n const result = new this(levelType);\n if (chromaSubSampling) {\n //Turn strings like 'CHROMA_420' to 420\n const chromaValue = CHROMA_MODEL_ENUM_TO_CHROMA_VALUE[chromaSubSampling.toUpperCase()];\n chromaValue && result.chromaSubSampling(+chromaValue);\n }\n quantization && result.quantization(quantization);\n return result;\n }\n}\nexport { DeliveryQualityAction };\n","import { Action } from \"../../internal/Action.js\";\nimport { QualifierValue } from \"../../internal/qualifier/QualifierValue.js\";\nimport { Qualifier } from \"../../internal/qualifier/Qualifier.js\";\n/**\n * @description Specifies the ICC profile to use for the color space.\n * @memberOf Actions.Delivery\n * @extends SDK.Action\n * @see Visit {@link Actions.Delivery|Delivery} for an example\n */\nclass DeliveryColorSpaceFromICCAction extends Action {\n /**\n * @param {string} publicId\n */\n constructor(publicId) {\n super();\n this._actionModel = {};\n this._actionModel.actionType = 'colorSpaceFromICC';\n this._actionModel.publicId = publicId;\n const qualifierValue = new QualifierValue(['icc', publicId]).setDelimiter(':');\n this.addQualifier(new Qualifier('cs', qualifierValue));\n }\n static fromJson(actionModel) {\n const { publicId } = actionModel;\n return new this(publicId);\n }\n}\nexport { DeliveryColorSpaceFromICCAction };\n","import { Action } from \"../../internal/Action.js\";\nimport { Qualifier } from \"../../internal/qualifier/Qualifier.js\";\nimport { ColorSpace } from \"../../qualifiers/colorSpace.js\";\nimport { COLOR_SPACE_MODE_TO_COLOR_SPACE_MODEL_MODE_MAP, COLOR_SPACE_MODEL_MODE_TO_COLOR_SPACE_MODE_MAP } from \"../../internal/internalConstants.js\";\n/**\n * @description Specifies the color space to use.\n * @memberOf Actions.Delivery\n * @extends SDK.Action\n * @see Visit {@link Actions.Delivery|Delivery} for an example\n */\nclass DeliveryColorSpaceAction extends Action {\n /**\n * Create a new DeliveryColorSpaceAction\n * @param mode\n */\n constructor(mode) {\n super();\n this._actionModel = {};\n this._actionModel = {\n actionType: 'colorSpace',\n mode: (COLOR_SPACE_MODE_TO_COLOR_SPACE_MODEL_MODE_MAP[mode] || mode)\n };\n this.addQualifier(new Qualifier('cs', ColorSpace[mode] ? ColorSpace[mode]() : mode));\n }\n static fromJson(actionModel) {\n const { mode } = actionModel;\n const colorSpaceMode = COLOR_SPACE_MODEL_MODE_TO_COLOR_SPACE_MODE_MAP[mode] || mode;\n // We are using this() to allow inheriting classes to use super.fromJson.apply(this, [actionModel])\n // This allows the inheriting classes to determine the class to be created\n return new this(colorSpaceMode);\n }\n}\nexport { DeliveryColorSpaceAction };\n","import { Action } from \"../../internal/Action.js\";\nimport { Qualifier } from \"../../internal/qualifier/Qualifier.js\";\nimport { toFloatAsString } from \"../../internal/utils/toFloatAsString.js\";\n/**\n * @description Specifies the dpr.\n * @memberOf Actions.Delivery\n * @extends SDK.Action\n * @see Visit {@link Actions.Delivery|Delivery} for an example\n */\nclass DeliveryDPRAction extends Action {\n /**\n * Create a new DeliveryDPRAction\n * @param dprValue\n */\n constructor(dprValue) {\n super();\n this._actionModel = { actionType: 'dpr' };\n // toFloatAsString is used to ensure 1 turns into 1.0\n const dprAsFloat = toFloatAsString(dprValue);\n this._actionModel.dpr = dprAsFloat;\n this.addQualifier(new Qualifier('dpr', dprAsFloat));\n }\n static fromJson(actionModel) {\n const { dpr } = actionModel;\n // We are using this() to allow inheriting classes to use super.fromJson.apply(this, [actionModel])\n // This allows the inheriting classes to determine the class to be created\n return new this(dpr);\n }\n}\nexport { DeliveryDPRAction };\n","/**\n * @description Defines transformations for delivering your assets without changing the visual or audio experience for the end user.\n * @memberOf Actions\n * @namespace Delivery\n * @example\n * See the examples under every method\n */\nimport { DeliveryFormatAction } from \"./delivery/DeliveryFormatAction.js\";\nimport { DeliveryQualityAction } from \"./delivery/DeliveryQualityAction.js\";\nimport { DeliveryColorSpaceFromICCAction } from \"./delivery/DeliveryColorSpaceFromICCAction.js\";\nimport { DeliveryAction } from \"./delivery/DeliveryAction.js\";\nimport { DeliveryColorSpaceAction } from \"./delivery/DeliveryColorSpaceAction.js\";\nimport { DeliveryDPRAction } from \"./delivery/DeliveryDPRAction.js\";\n/**\n * @summary action\n * @description Defines the format of the delivered asset.\n *\n * Learn more:\n * {@link https://cloudinary.com/documentation/image_transformations#image_format_support|Image formats}\n * {@link https://cloudinary.com/documentation/video_manipulation_and_delivery#transcoding_video_to_other_formats|Video formats}\n *\n * @memberOf Actions.Delivery\n * @param {string} format The file format. For a list of supported format types see {@link Qualifiers.Format| format types} for\n * possible values\n * @return {Actions.Delivery.DeliveryFormat}\n * @example\n * import {Cloudinary} from \"@cloudinary/url-gen\";\n * import {format} from \"@cloudinary/url-gen/actions/delivery\";\n *\n * const yourCldInstance = new Cloudinary({cloud:{cloudName:'demo'}});\n * const image = yourCldInstance.image('woman');\n * image.delivery(\n * format('jpg'),\n * );\n *\n */\nfunction format(format) {\n return new DeliveryFormatAction('f', format);\n}\n/**\n * @summary action\n * @description Deliver the image in the specified device pixel ratio.\n * @memberOf Actions.Delivery\n * @param {string} dpr The DPR (Device Pixel Ratio). Any positive float value.\n * @return {Actions.Delivery.DeliveryAction}\n * @example\n * import {Cloudinary} from \"@cloudinary/url-gen\";\n * import {dpr} from \"@cloudinary/url-gen/actions/delivery\";\n *\n * const yourCldInstance = new Cloudinary({cloud:{cloudName:'demo'}});\n * const image = yourCldInstance.image('woman');\n * image.delivery(\n * dpr('2.0'),\n * );\n */\nfunction dpr(dpr) {\n return new DeliveryDPRAction(dpr);\n}\n/**\n * @summary action\n * @description Controls the quality of the delivered image or video.\n *\n * Learn more: {@link https://cloudinary.com/documentation/image_optimization#how_to_optimize_image_quality|Image quality}\n * {@link https://cloudinary.com/documentation/video_optimization#how_to_optimize_video_quality|Video quality}\n * @memberOf Actions.Delivery\n * @param {QualityTypes | string | number | Qualifiers.Quality} qualityType For a list of supported quality types see\n * {@link Qualifiers.Quality| quality types} for\n * possible values.\n * @return {Actions.Delivery.DeliveryQualityAction}\n * @example\n * import {Cloudinary} from \"@cloudinary/url-gen\";\n * import {quality} from \"@cloudinary/url-gen/actions/delivery\";\n * import {quality} from \"@cloudinary/url-gen/qualifiers/quantity\";\n *\n * const yourCldInstance = new Cloudinary({cloud:{cloudName:'demo'}});\n * const image = yourCldInstance.image('woman');\n * image.delivery(\n * quality('auto'),\n * );\n */\nfunction quality(qualityType) {\n return new DeliveryQualityAction(qualityType);\n}\n/**\n * @summary action\n * @description Controls the density to use when delivering an image or when converting a vector file such as a PDF or EPS\n * document to a web image delivery format.\n * @memberOf Actions.Delivery\n * @param {number | string} value The density in dpi.\n * @return {Actions.Delivery.DeliveryAction}\n * @example\n * import {Cloudinary} from \"@cloudinary/url-gen\";\n * import {density} from \"@cloudinary/url-gen/actions/delivery\";\n *\n * const yourCldInstance = new Cloudinary({cloud:{cloudName:'demo'}});\n * const image = yourCldInstance.image('woman');\n * image.delivery(\n * density(150),\n * );\n */\nfunction density(value) {\n return new DeliveryAction('dn', value, 'density');\n}\n/**\n * @summary action\n * @description Default images can be used in the case that a requested image does not exist.\n * @memberOf Actions.Delivery\n * @param {string} publicIdWithExtension Default image public ID\n * @return {Actions.Delivery.DeliveryAction}\n * @example\n * import {Cloudinary} from \"@cloudinary/url-gen\";\n * import {defaultImage} from \"@cloudinary/url-gen/actions/delivery\";\n *\n * const yourCldInstance = new Cloudinary({cloud:{cloudName:'demo'}});\n * const image = yourCldInstance.image('woman');\n * image.delivery(\n * defaultImage('sample'),\n * );\n */\nfunction defaultImage(publicIdWithExtension) {\n return new DeliveryAction('d', publicIdWithExtension, 'defaultImage');\n}\n/**\n * @summary action\n * @description Controls the color space used for the delivered image.\n * @memberOf Actions.Delivery\n * @param {string | Qualifiers.ColorSpace} mode The color space.\n * @return {Actions.Delivery.DeliveryAction}\n * @example\n * import {Cloudinary} from \"@cloudinary/url-gen\";\n * import {colorSpace} from \"@cloudinary/url-gen/actions/delivery\";\n * import {trueColor} from \"@cloudinary/url-gen/qualifiers/colorSpace\";\n *\n * const yourCldInstance = new Cloudinary({cloud:{cloudName:'demo'}});\n * const image = yourCldInstance.image('woman');\n * image.delivery(\n * colorSpace(trueColor()),\n * );\n */\nfunction colorSpace(mode) {\n return new DeliveryColorSpaceAction(mode);\n}\n/**\n * @summary action\n * @description Specifies the ICC profile to use for the color space.\n * The ICC file must be uploaded to your account as a raw, authenticated file.\n * @memberOf Actions.Delivery\n * @param {string} publicId The public ID (including the file extension) of the ICC profile that defines the\n * color space.\n * @return {Actions.Delivery.DeliveryColorSpaceFromICC}\n * @example\n * import {Cloudinary} from \"@cloudinary/url-gen\";\n * import {colorSpaceFromICC} from \"@cloudinary/url-gen/actions/delivery\";\n * import {trueColor} from \"@cloudinary/url-gen/qualifiers/colorSpace\";\n *\n * const yourCldInstance = new Cloudinary({cloud:{cloudName:'demo'}});\n * const image = yourCldInstance.image('woman');\n * image.delivery(\n * colorSpaceFromICC('sample.icc'),\n * );\n */\nfunction colorSpaceFromICC(publicId) {\n return new DeliveryColorSpaceFromICCAction(publicId);\n}\nconst Delivery = {\n format,\n dpr,\n density,\n defaultImage,\n colorSpace,\n colorSpaceFromICC,\n quality\n};\nexport { Delivery, format, dpr, quality, density, defaultImage, colorSpace, colorSpaceFromICC };\n","import { Action } from \"../../internal/Action.js\";\nimport { FormatQualifier } from \"../../qualifiers/format/FormatQualifier.js\";\nimport { Qualifier } from \"../../internal/qualifier/Qualifier.js\";\nimport { DELIVERY_MODE_TO_ACTION_TYPE_MAP } from \"../../internal/internalConstants.js\";\n/**\n * @description Qualifies the delivery of an asset.\n * @memberOf Actions.Delivery\n * @extends SDK.Action\n */\nclass DeliveryAction extends Action {\n /**\n * @param {string} deliveryKey A generic Delivery Action Key (such as q, f, dn, etc.)\n * @param {string} deliveryType A Format Qualifiers for the action, such as Quality.auto()\n * @param {string} modelProperty internal model property of the action, for example quality uses `level` while dpr uses `density`\n * @see Visit {@link Actions.Delivery|Delivery} for an example\n */\n constructor(deliveryKey, deliveryType, modelProperty) {\n super();\n this._actionModel = {};\n let deliveryTypeValue;\n if (deliveryType instanceof FormatQualifier) {\n deliveryTypeValue = deliveryType.getValue();\n }\n else {\n deliveryTypeValue = deliveryType;\n }\n this._actionModel.actionType = DELIVERY_MODE_TO_ACTION_TYPE_MAP[deliveryKey];\n this._actionModel[modelProperty] = deliveryTypeValue;\n this.addQualifier(new Qualifier(deliveryKey, deliveryType));\n }\n}\nexport { DeliveryAction };\n","/**\n * @description Contains functions to select the mode when using a progressive format.\n * Learn more: {@link https://cloudinary.com/documentation/transformation_reference#fl_progressive|Progressive modes}\n * @memberOf Qualifiers\n * @namespace Progressive\n * @example\n * import {Cloudinary} from \"@cloudinary/url-gen\";\n * import {format} from \"@cloudinary/url-gen/actions/delivery\";\n * import {jpg} from \"@cloudinary/url-gen/qualifiers/format\";\n * import {steep} from \"@cloudinary/url-gen/qualifiers/progressive\";\n *\n * const yourCldInstance = new Cloudinary({cloud: {cloudName: 'demo'}});\n * const image = yourCldInstance.image('woman');\n * image.delivery(format(jpg()).progressive(steep()))\n */\nimport { FlagQualifier } from \"./flag/FlagQualifier.js\";\nclass ProgressiveQualifier extends FlagQualifier {\n constructor(mode) {\n super('progressive', mode);\n }\n}\n/**\n * @memberOf Qualifiers.Progressive\n */\nfunction none() {\n return new ProgressiveQualifier('none');\n}\n/**\n * @memberOf Qualifiers.Progressive\n */\nfunction semi() {\n return new ProgressiveQualifier('semi');\n}\n/**\n * @memberOf Qualifiers.Progressive\n */\nfunction steep() {\n return new ProgressiveQualifier('steep');\n}\n/**\n * @memberOf Qualifiers.Progressive\n */\nfunction progressive() {\n return new ProgressiveQualifier();\n}\nconst Progressive = {\n semi,\n none,\n steep,\n progressive,\n ProgressiveQualifier\n};\nexport { Progressive, semi, none, steep, progressive, ProgressiveQualifier };\n","import { lossy, preserveTransparency, progressive } from \"../../qualifiers/flag.js\";\nimport { DeliveryAction } from \"./DeliveryAction.js\";\nimport { ProgressiveQualifier } from \"../../qualifiers/progressive.js\";\n/**\n * @memberOf Actions.Delivery\n * @extends {Actions.Delivery.DeliveryAction}\n * @see Visit {@link Actions.Delivery|Delivery} for an example\n */\nclass DeliveryFormatAction extends DeliveryAction {\n constructor(deliveryKey, deliveryType) {\n super(deliveryKey, deliveryType, 'formatType');\n }\n /**\n * @description Uses lossy compression when delivering animated GIF files.\n * @return {this}\n */\n lossy() {\n this._actionModel.lossy = true;\n this.addFlag(lossy());\n return this;\n }\n /**\n * @description Uses progressive compression when delivering JPG file format.\n * @return {this}\n */\n progressive(mode) {\n if (mode instanceof ProgressiveQualifier) {\n this._actionModel.progressive = { mode: mode.getFlagValue() };\n this.addFlag(mode);\n }\n else {\n this._actionModel.progressive = { mode: mode };\n this.addFlag(progressive(mode));\n }\n return this;\n }\n /**\n * @description Ensures that images with a transparency channel are delivered in PNG format.\n */\n preserveTransparency() {\n this._actionModel.preserveTransparency = true;\n this.addFlag(preserveTransparency());\n return this;\n }\n static fromJson(actionModel) {\n const { formatType, lossy, progressive, preserveTransparency } = actionModel;\n let result;\n if (formatType) {\n result = new this('f', formatType);\n }\n else {\n result = new this('f');\n }\n if (progressive) {\n if (progressive.mode) {\n result.progressive(progressive.mode);\n }\n else {\n result.progressive();\n }\n }\n lossy && result.lossy();\n preserveTransparency && result.preserveTransparency();\n return result;\n }\n}\nexport { DeliveryFormatAction };\n","import { Action } from \"../../internal/Action.js\";\n/**\n * @memberOf Qualifiers.Region\n */\nclass NamedRegion extends Action {\n constructor(type) {\n super();\n this.regionType = type;\n }\n}\nexport { NamedRegion };\n","import { Qualifier } from \"../../internal/qualifier/Qualifier.js\";\nimport { Action } from \"../../internal/Action.js\";\n/**\n * @memberOf Qualifiers.Region\n */\nclass RectangleRegion extends Action {\n /**\n * Rectangle defines a region where action will be applied\n *\n * @param {number} x The x position in pixels\n * @param {number} y The y position in pixels\n * @param {number} width The width in pixels\n * @param {number} height The height in pixels\n */\n constructor(x, y, width, height) {\n super();\n this.addQualifier(new Qualifier(\"x\", x));\n this.addQualifier(new Qualifier(\"y\", y));\n this.addQualifier(new Qualifier(\"w\", width));\n this.addQualifier(new Qualifier(\"h\", height));\n this._actionModel = {\n x,\n y,\n width,\n height,\n };\n }\n toString() {\n const { x, y, width, height } = this._actionModel;\n return `(x_${x};y_${y};w_${width};h_${height})`;\n }\n}\nexport { RectangleRegion };\n","import { Qualifier } from \"../../../internal/qualifier/Qualifier.js\";\nimport { Action } from \"../../../internal/Action.js\";\nimport { custom, faces } from \"../../../qualifiers/region.js\";\n/**\n * @description The Action class of the blur Builder.\n * @extends SDK.Action\n * @memberOf Actions.Effect\n * @see Visit {@link Actions.Effect|Effect} for an example\n */\nclass BlurAction extends Action {\n constructor(strength) {\n super();\n this._actionModel = {};\n this._strength = strength;\n this._actionModel.actionType = 'blur';\n this._actionModel.strength = strength;\n }\n /**\n * @description Specifies the region to blur.\n * @param {NamedRegion} blurRegion\n */\n region(blurRegion) {\n this._actionModel.region = { RegionType: blurRegion.regionType };\n this._region = blurRegion;\n return this;\n }\n /**\n * @description Sets the strength of the blur effect.\n * @param {number | string} strength\n */\n strength(strength) {\n this._strength = strength;\n this._actionModel.strength = strength;\n return this;\n }\n prepareQualifiers() {\n /*\n * Blur with region is a unique object in this codebase.\n * On top of Blur being an Action with Qualifiers,\n * it also accepts a Qualifier called Region.\n *\n * This Qualifier is in itself composite of qualifiers (such as height, or width).\n * The existence of Region changes the output of Blur in non traditional ways\n * which forced this relatively ad-hoc implementation.\n *\n * Aside from all of that, all of the Qualifiers in the component should be alphabetized\n * This happens naturally in the Action class,\n * however since we're dealing with two levels of qualifiers (Blur and Region),\n * these need to be merged.\n *\n * This function will merge the Region qualifiers with Blur\n * and add all needed implicit qualifiers (like g_ocr_text).\n * We're not using the full Gravity Qualifier here to prevent the code import for such a simplistic case\n */\n const str = this._strength ? `:${this._strength}` : '';\n if ('_region' in this) {\n const qualifiers = this._region.qualifiers;\n // Copy qualifiers from the region \"action\" to the blur action\n qualifiers.forEach((q) => this.addQualifier(q));\n if (this._region.regionType === 'named') {\n this.addQualifier(new Qualifier('e', `blur_region${str}`));\n }\n if (this._region.regionType === 'ocr_text') {\n this.addQualifier(new Qualifier('e', `blur_region${str}`));\n this.addQualifier(new Qualifier('g', `ocr_text`));\n }\n if (this._region.regionType === 'faces') {\n this.addQualifier(new Qualifier('e', `blur_faces${str}`));\n }\n }\n else {\n this.addQualifier(new Qualifier('e', `blur${str}`));\n }\n }\n static fromJson(actionModel) {\n const { actionType, strength, region } = actionModel;\n // We are using this() to allow inheriting classes to use super.fromJson.apply(this, [actionModel])\n // This allows the inheriting classes to determine the class to be created\n const result = new this(strength);\n strength && result.strength(strength);\n if (region && region.RegionType === 'faces') {\n result.region(faces());\n }\n if (region && region.RegionType === 'custom') {\n result.region(custom());\n }\n return result;\n }\n}\nexport { BlurAction };\n","import { Action } from \"../../../internal/Action.js\";\nimport { Qualifier } from \"../../../internal/qualifier/Qualifier.js\";\nimport { QualifierValue } from \"../../../internal/qualifier/QualifierValue.js\";\n/**\n * @description Changes the speed of the video playback using the rate() method\n * @memberOf Actions.Effect\n * @see Visit {@link Actions.Effect|Effect} for an example\n */\nclass AccelerationEffectAction extends Action {\n constructor(rate) {\n super();\n this._actionModel = { actionType: 'accelerate' };\n rate && this.rate(rate);\n }\n rate(rate) {\n this._actionModel.rate = rate;\n this._rate = rate;\n return this;\n }\n prepareQualifiers() {\n const qualifierValue = new QualifierValue(['accelerate', this._rate]).setDelimiter(':');\n this.addQualifier(new Qualifier('e', qualifierValue));\n return this;\n }\n static fromJson(actionModel) {\n const { rate } = actionModel;\n // We are using this() to allow inheriting classes to use super.fromJson.apply(this, [actionModel])\n // This allows the inheriting classes to determine the class to be created\n // @ts-ignore\n const result = new this();\n rate && result.rate(rate);\n return result;\n }\n}\nexport { AccelerationEffectAction };\n","import { Action } from \"../../../internal/Action.js\";\nimport { QualifierValue } from \"../../../internal/qualifier/QualifierValue.js\";\nimport { Qualifier } from \"../../../internal/qualifier/Qualifier.js\";\nimport { ACTION_TYPE_TO_EFFECT_MODE_MAP, EFFECT_MODE_TO_ACTION_TYPE_MAP } from \"../../../internal/internalConstants.js\";\n/**\n * @description A class that defines a simple effect of the type e_{effectName}\n * @extends SDK.Action\n * @memberOf Actions.Effect\n * @see Visit {@link Actions.Effect|Effect} for an example\n */\nclass SimpleEffectAction extends Action {\n constructor(effectType, level) {\n super();\n this._actionModel = {};\n this._actionModel.actionType = EFFECT_MODE_TO_ACTION_TYPE_MAP[effectType] || effectType;\n const qualifierEffect = this.createEffectQualifier(effectType, level);\n this.addQualifier(qualifierEffect);\n }\n createEffectQualifier(effectType, level) {\n let qualifierValue;\n if (level) {\n qualifierValue = new QualifierValue([effectType, `${level}`]).setDelimiter(':');\n }\n else {\n qualifierValue = new QualifierValue(effectType);\n }\n return new Qualifier('e', qualifierValue);\n }\n static fromJson(actionModel) {\n const { actionType, level, strength } = actionModel;\n const effectType = ACTION_TYPE_TO_EFFECT_MODE_MAP[actionType] || actionType;\n // We are using this() to allow inheriting classes to use super.fromJson.apply(this, [actionModel])\n // This allows the inheriting classes to determine the class to be created\n // @ts-ignore\n const result = new this(effectType, level ? level : strength);\n return result;\n }\n}\nexport { SimpleEffectAction };\n","import { Qualifier } from \"../../internal/qualifier/Qualifier.js\";\nimport { QualifierValue } from \"../../internal/qualifier/QualifierValue.js\";\nimport { Action } from \"../../internal/Action.js\";\n/**\n * @description Applies a cartoon effect to an image.\n * @extends SDK.Action\n * @memberOf Actions.Effect\n * @see Visit {@link Actions.Effect|Effect} for an example\n */\nclass CartoonifyEffect extends Action {\n constructor(effectName, strength) {\n // We don't pass level in the constructor, we'll build it in the prepareParam\n super();\n this._actionModel = {};\n this.cartoonifyStrength = strength;\n this.effectName = effectName;\n this._actionModel.actionType = effectName;\n }\n /**\n * @description Sets the thickness of the lines.\n * @param {number} lineStrength The thickness of the lines. (Range: 0 to 100, Server default: 50)\n * @return {this}\n */\n lineStrength(lineStrength) {\n this.cartoonifyStrength = lineStrength;\n this._actionModel.lineStrength = lineStrength;\n return this;\n }\n /**\n * @description Achieves a black and white cartoon effect.\n * @return {this}\n */\n blackwhite() {\n this._actionModel.blackAndWhite = true;\n this.colorReduction = 'bw';\n return this;\n }\n /**\n * @description\n * Sets the decrease in the number of colors and corresponding saturation boost of the remaining colors.
\n * Higher reduction values result in a less realistic look.\n * @param {number } level The decrease in the number of colors and corresponding saturation boost of the remaining colors. (Range: 0 to 100, Server default: automatically adjusts according to the line_strength value). Set to 'bw' for a black and white cartoon effect.\n * @return {this}\n */\n colorReductionLevel(level) {\n this._actionModel.colorReductionLevel = level;\n this.colorReduction = level;\n return this;\n }\n prepareQualifiers() {\n this.addQualifier(new Qualifier('e', new QualifierValue([this.effectName, this.cartoonifyStrength, this.colorReduction])));\n return;\n }\n static fromJson(actionModel) {\n const { actionType, lineStrength, blackAndWhite, colorReductionLevel } = actionModel;\n // We are using this() to allow inheriting classes to use super.fromJson.apply(this, [actionModel])\n // This allows the inheriting classes to determine the class to be created\n const result = new this(actionType, lineStrength);\n blackAndWhite && result.blackwhite();\n colorReductionLevel && result.colorReductionLevel(colorReductionLevel);\n lineStrength && result.lineStrength(lineStrength);\n return result;\n }\n}\nexport { CartoonifyEffect };\n","import { Action } from \"../../internal/Action.js\";\nimport { QualifierValue } from \"../../internal/qualifier/QualifierValue.js\";\nimport { Qualifier } from \"../../internal/qualifier/Qualifier.js\";\nimport { prepareColor } from \"../../internal/utils/prepareColor.js\";\n/**\n * @description Adds an outline to a transparent image. For examples, see the Image Transformations guide.\n * @extends SDK.Action\n * @memberOf Actions.Effect\n * @see Visit {@link Actions.Effect|Effect} for an example\n */\nclass EffectOutline extends Action {\n constructor() {\n super();\n this._actionModel = {};\n this._actionModel.actionType = 'outline';\n }\n /**\n * @description\n * How to apply the outline effect which can be one of the following values:\n * inner, inner_fill, outer, fill.\n * @param {OutlineModeType|string} mode The type of outline effect. Use the constants defined in Outline.\n * @return {this}\n */\n mode(mode) {\n this._actionModel.mode = mode;\n this._mode = mode;\n return this;\n }\n /**\n * The thickness of the outline in pixels. (Range: 1 to 100, Server default: 5)\n * @param {number} width\n * @return {this}\n */\n width(width) {\n this._actionModel.width = width;\n this._width = width;\n return this;\n }\n /**\n * @description\n * The level of blur of the outline.\n * Range: 0 to 2000, Server default: 0\n * @param {number | string} lvl\n * @return {this}\n */\n blurLevel(lvl) {\n this._actionModel.blurLevel = lvl;\n this._blurLevel = lvl;\n return this;\n }\n /**\n * @param {string | Qualifiers.Color} color One of the SDK Color values, string, or rgba: '#fff'\n * @return {this}\n */\n color(color) {\n this._actionModel.color = color;\n return this.addQualifier(new Qualifier('co', prepareColor(color)));\n }\n prepareQualifiers() {\n this.addQualifier(new Qualifier('e', new QualifierValue(['outline', this._mode, this._width, this._blurLevel]).setDelimiter(':')));\n }\n static fromJson(actionModel) {\n const { actionType, mode, color, blurLevel, width } = actionModel;\n // We are using this() to allow inheriting classes to use super.fromJson.apply(this, [actionModel])\n // This allows the inheriting classes to determine the class to be created\n const result = new this();\n mode && result.mode(mode);\n color && result.color(color);\n blurLevel && result.blurLevel(blurLevel);\n width && result.width(width);\n return result;\n }\n}\nexport { EffectOutline };\n","import { Action } from \"../../internal/Action.js\";\nimport { Qualifier } from \"../../internal/qualifier/Qualifier.js\";\nimport { QualifierValue } from \"../../internal/qualifier/QualifierValue.js\";\n/**\n * @description Vectorizes the image.\n * @extends SDK.Action\n * @memberOf Actions.Effect\n * @see Visit {@link Actions.Effect|Effect} for an example\n */\nclass VectorizeEffectAction extends Action {\n constructor() {\n super();\n this._actionModel = {};\n this._actionModel.actionType = 'vectorize';\n }\n /**\n * @description The number of colors. (Range: 2 to 30, Server default: 10)\n * @param {number | string} num\n * @return {this}\n */\n numOfColors(num) {\n this._actionModel.numOfColors = num;\n this._numOfColors = num;\n return this;\n }\n /**\n * @description The level of detail. Specify either a percentage of the original image (Range: 0.0 to 1.0) or an absolute number of pixels (Range: 0 to 1000). (Server default: 300)\n * @param {number | string} num\n * @return {this}\n */\n detailsLevel(num) {\n this._actionModel.detailLevel = num;\n this._detailsLevel = num;\n return this;\n }\n /**\n * @description The size of speckles to suppress. Specify either a percentage of the original image (Range: 0.0 to 1.0) or an absolute number of pixels (Range: 0 to 100, Server default: 2)\n * @param {number | string} num\n * @return {this}\n */\n despeckleLevel(num) {\n this._actionModel.despeckleLevel = num;\n this._despeckleLevel = num;\n return this;\n }\n /**\n * @description The corner threshold. Specify 100 for no smoothing (polygon corners), 0 for completely smooth corners. (Range: 0 to 100, Default: 25)\n * @param {number | string} num\n * @return {this}\n */\n cornersLevel(num) {\n this._actionModel.cornersLevel = num;\n this._cornersLevel = num;\n return this;\n }\n /**\n * @description The optimization value. Specify 100 for least optimization and the largest file. (Range: 0 to 100, Server default: 100).\n * @param {number} num\n * @return {this}\n */\n paths(num) {\n this._actionModel.paths = num;\n this._paths = num;\n return this;\n }\n prepareQualifiers() {\n let str = 'vectorize';\n if (this._numOfColors) {\n str += `:${new QualifierValue(`colors:${this._numOfColors}`).toString()}`;\n }\n if (this._detailsLevel) {\n str += `:${new QualifierValue(`detail:${this._detailsLevel}`).toString()}`;\n }\n if (this._despeckleLevel) {\n str += `:${new QualifierValue(`despeckle:${this._despeckleLevel}`).toString()}`;\n }\n if (this._paths) {\n str += `:${new QualifierValue(`paths:${this._paths}`).toString()}`;\n }\n if (this._cornersLevel) {\n str += `:${new QualifierValue(`corners:${this._cornersLevel}`).toString()}`;\n }\n this.addQualifier(new Qualifier('e', str));\n }\n static fromJson(actionModel) {\n const { actionType, paths, cornersLevel, despeckleLevel, detailLevel, numOfColors } = actionModel;\n // We are using this() to allow inheriting classes to use super.fromJson.apply(this, [actionModel])\n // This allows the inheriting classes to determine the class to be created\n const result = new this();\n paths && result.paths(paths);\n cornersLevel && result.cornersLevel(cornersLevel);\n despeckleLevel && result.despeckleLevel(despeckleLevel);\n detailLevel && result.detailsLevel(detailLevel);\n numOfColors && result.numOfColors(numOfColors);\n return result;\n }\n}\nexport { VectorizeEffectAction };\n","import { Action } from \"../../internal/Action.js\";\nimport { Qualifier } from \"../../internal/qualifier/Qualifier.js\";\n/**\n * @description Simulates the way an image would appear to someone with the specified color blind condition\n * @extends SDK.Action\n * @memberOf Actions.Effect\n * @see Visit {@link Actions.Effect|Effect} for an example\n */\nclass SimulateColorBlindEffectAction extends Action {\n constructor() {\n super();\n this._actionModel = {};\n this._actionModel.actionType = 'simulateColorblind';\n this.addQualifier(new Qualifier('e', `simulate_colorblind`));\n }\n setQualifier(val) {\n const strToAppend = `:${val}`;\n if (val) {\n this.addQualifier(new Qualifier('e', `simulate_colorblind${strToAppend}`));\n }\n return this;\n }\n /**\n * @description Sets the color blind condition to simulate.\n * @param {Qualifiers.simulateColorBlindValues | SimulateColorBlindType | string} cond\n * @return {this}\n */\n condition(cond) {\n this._actionModel.condition = cond;\n return this.setQualifier(cond);\n }\n static fromJson(actionModel) {\n const { actionType, condition } = actionModel;\n // We are using this() to allow inheriting classes to use super.fromJson.apply(this, [actionModel])\n // This allows the inheriting classes to determine the class to be created\n const result = new this();\n condition && result.condition(condition);\n return result;\n }\n}\nexport { SimulateColorBlindEffectAction };\n","import { Action } from \"../../internal/Action.js\";\nimport { QualifierValue } from \"../../internal/qualifier/QualifierValue.js\";\nimport { Qualifier } from \"../../internal/qualifier/Qualifier.js\";\n/**\n * @description Applies stripes to the image to help people with common color-blind conditions to differentiate between colors that are similar for them.\n * You can replace colors using the xray() method.\n * @extends SDK.Action\n * @memberOf Actions.Effect\n * @see Visit {@link Actions.Effect|Effect} for an example\n */\nclass AssistColorBlindEffectAction extends Action {\n constructor() {\n super();\n this._actionModel = {};\n this._actionModel.actionType = 'assistColorblind';\n this.addQualifier(new Qualifier('e', new QualifierValue('assist_colorblind')));\n }\n /**\n * @description Replaces problematic colors with colors that are easier to differentiate.\n * @return {this}\n */\n xray() {\n this._actionModel.type = 'xray';\n return this.addQualifier(new Qualifier('e', new QualifierValue(['assist_colorblind', 'xray']).setDelimiter(':')));\n }\n /**\n * @description Applies stripes of the specified intensity to help people with common color blind conditions to differentiate between colors that are similar for them.\n * @param {number | string} strength The intensity of the stripes. (Range: 1 to 100, Server default: 10)\n * @return {this}\n */\n stripesStrength(strength) {\n this._actionModel.type = 'stripes';\n this._actionModel.stripesStrength = strength;\n return this.addQualifier(new Qualifier('e', new QualifierValue(['assist_colorblind', strength]).setDelimiter(':')));\n }\n static fromJson(actionModel) {\n const { actionType, type, stripesStrength } = actionModel;\n // We are using this() to allow inheriting classes to use super.fromJson.apply(this, [actionModel])\n // This allows the inheriting classes to determine the class to be created\n const result = new this();\n if (type === 'xray') {\n result.xray();\n }\n if (type === 'stripes') {\n stripesStrength && result.stripesStrength(stripesStrength);\n }\n return result;\n }\n}\nexport { AssistColorBlindEffectAction };\n","import { Action } from \"../../internal/Action.js\";\nimport { Qualifier } from \"../../internal/qualifier/Qualifier.js\";\n/**\n * @description Applies a gradient fade effect from one edge of the image.\n * @extends SDK.Action\n * @memberOf Actions.Effect\n * @see Visit {@link Actions.Effect|Effect} for an example\n */\nclass GradientFadeEffectAction extends Action {\n constructor() {\n super(...arguments);\n this._actionModel = { actionType: 'gradientFade' };\n }\n /**\n * @description Sets the strength of the fade effect.\n * @param {number} strength The strength of the fade effect. (Range: 0 to 100, Server default: 20)\n */\n strength(strength) {\n this._actionModel.strength = strength;\n this._strength = strength;\n return this;\n }\n /**\n * @description Sets the mode of gradient fade.\n * @param {string | Qualifiers.GradientFade} type The mode of gradient fade.\n */\n type(type) {\n this._actionModel.type = type;\n this._type = type;\n return this;\n }\n /**\n * @description Sets the x dimension of the start point.\n * @param {number | string} x The x dimension of the start point.\n */\n horizontalStartPoint(x) {\n this._actionModel.horizontalStartPoint = x;\n return this.addQualifier(new Qualifier('x', x));\n }\n /**\n * @description Sets the y dimension of the start point.\n * @param {number | string} y The y dimension of the start point.\n */\n verticalStartPoint(y) {\n this._actionModel.verticalStartPoint = y;\n return this.addQualifier(new Qualifier('y', y));\n }\n prepareQualifiers() {\n let str = 'gradient_fade';\n if (this._type) {\n str += `:${this._type}`;\n }\n if (this._strength) {\n str += `:${this._strength}`;\n }\n this.addQualifier(new Qualifier('e', str));\n }\n static fromJson(actionModel) {\n const { actionType, verticalStartPoint, horizontalStartPoint, type, strength } = actionModel;\n // We are using this() to allow inheriting classes to use super.fromJson.apply(this, [actionModel])\n // This allows the inheriting classes to determine the class to be created\n const result = new this();\n verticalStartPoint && result.verticalStartPoint(verticalStartPoint);\n horizontalStartPoint && result.horizontalStartPoint(horizontalStartPoint);\n type && result.type(type);\n strength && result.strength(strength);\n return result;\n }\n}\nexport { GradientFadeEffectAction };\n","import { Action } from \"../../../internal/Action.js\";\nimport { Qualifier } from \"../../../internal/qualifier/Qualifier.js\";\nimport { QualifierValue } from \"../../../internal/qualifier/QualifierValue.js\";\n/**\n * @description Fade out at the end of the video, use the length() method to set the time in ms for the fade to occur. (Server default: 2000)\n * @extends LeveledEffectAction\n * @memberOf Actions.Effect\n * @see Visit {@link Actions.Effect|Effect} for an example\n */\nclass FadeOutEffectAction extends Action {\n constructor(duration) {\n super();\n this._actionModel = { actionType: 'fadeOut' };\n this.addQualifier(new Qualifier('e', new QualifierValue(['fade', `-${duration}`]).setDelimiter(':')));\n duration && (this._actionModel.length = duration);\n }\n /**\n *\n * @description Sets the duration level for the action\n * @param {string | number} duration - The duration of the effect\n */\n duration(duration) {\n this._actionModel.length = duration;\n return this.addQualifier(new Qualifier('e', new QualifierValue(['fade', `-${duration}`]).setDelimiter(':')));\n }\n static fromJson(actionModel) {\n const { length } = actionModel;\n if (length === undefined) {\n return new this(1000);\n }\n // We are using this() to allow inheriting classes to use super.fromJson.apply(this, [actionModel])\n // This allows the inheriting classes to determine the class to be created\n const result = new this(length);\n return result;\n }\n}\nexport { FadeOutEffectAction };\n","import { Action } from \"../../internal/Action.js\";\nimport { QualifierValue } from \"../../internal/qualifier/QualifierValue.js\";\nimport { Qualifier } from \"../../internal/qualifier/Qualifier.js\";\nimport { prepareColor } from \"../../internal/utils/prepareColor.js\";\n/**\n * @description Applies a shadow filter to the asset.\n * @memberOf Actions.Effect\n * @extends SDK.Action\n * @see Visit {@link Actions.Effect|Effect} for an example\n */\nclass ShadowEffectAction extends Action {\n constructor(effectType, strength) {\n super();\n this._actionModel = {};\n this._actionModel.actionType = effectType;\n this.effectType = effectType;\n this.addQualifier(new Qualifier('e', new QualifierValue(['shadow', strength])));\n }\n /**\n * @description The strength of the shadow. (Range: 0 to 100, Server default: 40)\n * @param {number} strength\n * @return {this}\n */\n strength(strength) {\n this._actionModel.strength = strength;\n return this.addQualifier(new Qualifier('e', new QualifierValue(['shadow', strength])));\n }\n /**\n * @description The X offset the shadow\n * @param {number | SDK.ExpressionQualifier} x\n * @return {this}\n */\n offsetX(x) {\n this._actionModel.offsetX = x;\n return this.addQualifier(new Qualifier('x', new QualifierValue(x)));\n }\n /**\n * @description The Y offset the shadow\n * @param {number | SDK.ExpressionQualifier} y\n * @return {this}\n */\n offsetY(y) {\n this._actionModel.offsetY = y;\n return this.addQualifier(new Qualifier('y', new QualifierValue(y)));\n }\n /**\n * @description The color of the shadow (Server default: gray)\n * @param color\n * @return {this}\n */\n color(color) {\n this._actionModel.color = color;\n return this.addQualifier(new Qualifier('co', new QualifierValue(prepareColor(color))));\n }\n static fromJson(actionModel) {\n const { actionType, strength, offsetX, offsetY, color } = actionModel;\n // We are using this() to allow inheriting classes to use super.fromJson.apply(this, [actionModel])\n // This allows the inheriting classes to determine the class to be created\n const result = new this(actionType, strength);\n offsetX && result.offsetX(offsetX);\n offsetY && result.offsetY(offsetY);\n color && result.color(color);\n return result;\n }\n}\nexport { ShadowEffectAction };\n","import { QualifierValue } from \"../../internal/qualifier/QualifierValue.js\";\nimport { Action } from \"../../internal/Action.js\";\nimport { Qualifier } from \"../../internal/qualifier/Qualifier.js\";\n/**\n * @description - This Action, while belonging to Effect, acts as a modified overlay.\n * The class implements the Builder pattern, where strength() and preserveColor()\n * are applied to the instance, and toString() is responsible to combining them into the right result.\n * @extends SDK.Action\n * @memberOf Actions.Effect\n * @see Visit {@link Actions.Effect|Effect} for an example\n */\nclass StyleTransfer extends Action {\n /**\n * The Image Source used to create the style transfer,\n * Use the Image Source builder to quickly create a source:\n *
Import: {@link Qualifiers.Source|import Sources from '@cloudinary/url-gen/qualifiers/sources';}\n *
Create: `Source.image('dog')`\n * @param {ImageSource} imageSource\n */\n constructor(imageSource) {\n super();\n this.imageSource = imageSource;\n }\n /**\n * Determines the strength in which the styleTransfer is applied.\n * @param {number} [effectStrength] - The strength level, 1-100, default: 100\n * @return {this}\n */\n strength(effectStrength = null) {\n this.effectStrength = effectStrength;\n return this;\n }\n /**\n * More aggressively preserves the colors of the the target photo,\n * Can be used with `strength()` to enhance this behaviour\n * @param {boolean} bool\n * @return {this}\n */\n preserveColor(bool = true) {\n this.preserve = bool;\n return this;\n }\n /**\n * The `build` phase of the Action, used internally to concat all the options received into a single string.\n * The result of this method is the toString() of the imageLayer provided in the constructor.\n * @return {string}\n */\n toString() {\n const NAME = 'style_transfer';\n const PRES = this.preserve ? 'preserve_color' : null;\n const STRENGTH = this.effectStrength;\n // Create the style effect\n const styleEffect = new Qualifier('e', new QualifierValue([NAME, PRES, STRENGTH]));\n // Handle the source for publicID,\n const sourceOpenString = this.imageSource.getOpenSourceString('l');\n // Handle source transformation\n const imgTx = this.imageSource.getTransformation();\n const sourceTransformation = imgTx ? imgTx.toString() : '';\n return [\n sourceOpenString,\n sourceTransformation,\n `${styleEffect},fl_layer_apply`\n ].filter((a) => a).join('/');\n }\n}\nexport { StyleTransfer };\n","import { Qualifier } from \"../../../internal/qualifier/Qualifier.js\";\nimport { Action } from \"../../../internal/Action.js\";\nimport { custom, faces } from \"../../../qualifiers/region.js\";\n/**\n * @description The Action class of the pixelate Builder\n * @extends SDK.Action\n * @memberOf Actions.Effect\n * @see Visit {@link Actions.Effect|Effect} for an example\n */\nclass Pixelate extends Action {\n constructor(squareSize) {\n super();\n this._actionModel = {};\n this._squareSize = squareSize;\n this._actionModel.actionType = 'pixelate';\n this._actionModel.squareSize = squareSize;\n }\n /**\n * @description Specifies the region to piexlate.\n * @param {NamedRegion} pixelateRegion\n */\n region(pixelateRegion) {\n this._region = pixelateRegion;\n this._actionModel.region = { RegionType: this._region.regionType };\n return this;\n }\n /**\n * @description Sets the squareSize of the pixelate effect.\n * @param {number | string} squareSize\n */\n squareSize(squareSize) {\n this._squareSize = squareSize;\n this._actionModel.squareSize = squareSize;\n return this;\n }\n prepareQualifiers() {\n /*\n * pixelate with region is a unique object in this codebase.\n * On top of pixelate being an Action with Qualifiers,\n * it also accepts a Qualifier called Region.\n *\n * This Qualifier is in itself composite of qualifiers (such as height, or width).\n * The existence of Region changes the output of pixelate in non traditional ways\n * which forced this relatively ad-hoc implementation.\n *\n * Aside from all of that, all of the Qualifiers in the component should be alphabetized\n * This happens naturally in the Action class,\n * however since we're dealing with two levels of qualifiers (pixelate and Region),\n * these need to be merged.\n *\n * This function will merge the Region qualifiers with pixelate\n * and add all needed implicit qualifiers (like g_ocr_text).\n * We're not using the full Gravity Qualifier here to prevent the code import for such a simplistic case\n */\n const str = this._squareSize ? `:${this._squareSize}` : '';\n if ('_region' in this) {\n const qualifiers = this._region.qualifiers;\n // Copy qualifiers from the region \"action\" to the pixelate action\n qualifiers.forEach((q) => this.addQualifier(q));\n if (this._region.regionType === 'named') {\n this.addQualifier(new Qualifier('e', `pixelate_region${str}`));\n }\n if (this._region.regionType === 'ocr_text') {\n this.addQualifier(new Qualifier('e', `pixelate_region${str}`));\n this.addQualifier(new Qualifier('g', `ocr_text`));\n }\n if (this._region.regionType === 'faces') {\n this.addQualifier(new Qualifier('e', `pixelate_faces${str}`));\n }\n }\n else {\n this.addQualifier(new Qualifier('e', `pixelate${str}`));\n }\n }\n static fromJson(actionModel) {\n const { actionType, region, squareSize } = actionModel;\n // We are using this() to allow inheriting classes to use super.fromJson.apply(this, [actionModel])\n // This allows the inheriting classes to determine the class to be created\n const result = new this(squareSize);\n squareSize && result.squareSize(squareSize);\n if (region && region.RegionType === 'faces') {\n result.region(faces());\n }\n if (region && region.RegionType === 'custom') {\n result.region(custom());\n }\n return result;\n }\n}\nexport { Pixelate };\n","import { Action } from \"../../../internal/Action.js\";\nimport { Qualifier } from \"../../../internal/qualifier/Qualifier.js\";\nimport { QualifierValue } from \"../../../internal/qualifier/QualifierValue.js\";\n/**\n * @description Fade out at the end of the video, use the length() method to set the time in ms for the fade to occur. (Server default: 2000)\n * @extends Action\n * @memberOf Actions.Effect\n * @see Visit {@link Actions.Effect|Effect} for an example\n */\nclass FadeInEffectAction extends Action {\n constructor(duration) {\n super();\n this._actionModel = { actionType: 'fadeIn' };\n this.addQualifier(new Qualifier('e', new QualifierValue(['fade', `${duration}`]).setDelimiter(':')));\n duration && (this._actionModel.length = duration);\n }\n /**\n *\n * @description Sets the duration level for the action\n * @param {string | number} duration - The duration of the effect\n */\n duration(duration) {\n this._actionModel.length = duration;\n return this.addQualifier(new Qualifier('e', new QualifierValue(['fade', `${duration}`]).setDelimiter(':')));\n }\n static fromJson(actionModel) {\n const { length } = actionModel;\n if (length === undefined) {\n return new this(1000);\n }\n // We are using this() to allow inheriting classes to use super.fromJson.apply(this, [actionModel])\n // This allows the inheriting classes to determine the class to be created\n const result = new this(length);\n return result;\n }\n}\nexport { FadeInEffectAction };\n","import { Action } from \"../../internal/Action.js\";\nimport { QualifierValue } from \"../../internal/qualifier/QualifierValue.js\";\nimport { Qualifier } from \"../../internal/qualifier/Qualifier.js\";\n/**\n * @description A class that defines how to remove the background of an asset\n * @extends SDK.Action\n * @memberOf Actions.Effect\n * @see Visit {@link Actions.Effect|Effect} for an example\n */\nclass RemoveBackgroundAction extends Action {\n constructor() {\n super();\n this.overwriteQualifier();\n }\n /**\n * @description Everytime this method is called, it will overwrite the e_bgremoval qualifier with new values\n * @private\n */\n overwriteQualifier() {\n const value = ['bgremoval', this._screen ? 'screen' : '', (this._colorToRemove || '').replace('#', '')];\n return this.addQualifier(new Qualifier('e', new QualifierValue(value)));\n }\n /**\n * @description The strength of the shadow. (Range: 0 to 100, Server default: 40)\n * @param {number} useScreen Boolean, defaults to true\n * @return {this}\n */\n screen(useScreen = true) {\n this._screen = useScreen;\n return this.overwriteQualifier();\n }\n /**\n * @description The color to remove from the background\n * @param {SystemColors} color\n * @return {this}\n */\n colorToRemove(color) {\n this._colorToRemove = color;\n return this.overwriteQualifier();\n }\n}\nexport { RemoveBackgroundAction };\n","import { Qualifier } from \"../../internal/qualifier/Qualifier.js\";\nimport { QualifierValue } from \"../../internal/qualifier/QualifierValue.js\";\nimport { Action } from \"../../internal/Action.js\";\n/**\n * @description Changes the main background color to the one specified, as if a 'theme change' was applied (e.g. dark mode vs light mode).\n * @extends SDK.Action\n * @memberOf {Actions.Effect}\n * @see Visit {@link Actions.Effect|Effect} for an example\n */\nclass ThemeEffect extends Action {\n constructor(color) {\n super();\n this.effectName = 'theme';\n this.color = color;\n }\n /**\n * @description The sensitivity to photographic elements of an image.\n * A value of 0 treats the whole image as non-photographic.\n * A value of 200 treats the whole image as photographic, so no theme change is applied.\n * @param {number} photosensitivity\n * @return {this}\n */\n photosensitivity(photosensitivity) {\n this._photosensitivity = photosensitivity;\n return this;\n }\n prepareQualifiers() {\n const sensitivity = this._photosensitivity ? `:photosensitivity_${this._photosensitivity}` : '';\n // Replace # in hex colors (#fff -> fff)\n const val = `${this.effectName}:color_${this.color.replace('#', '')}${sensitivity}`;\n this.addQualifier(new Qualifier('e', new QualifierValue(val)));\n return;\n }\n}\nexport { ThemeEffect };\n","import { Action } from \"../../internal/Action.js\";\nimport { QualifierValue } from \"../../internal/qualifier/QualifierValue.js\";\nimport { Qualifier } from \"../../internal/qualifier/Qualifier.js\";\n/**\n * @description A class that defines how to remove the background of an asset\n * @extends SDK.Action\n * @memberOf Actions.Effect\n * @see Visit {@link Actions.Effect|Effect} for an example\n */\nclass BackgroundRemoval extends Action {\n constructor() {\n super();\n this._actionModel.actionType = \"backgroundRemoval\";\n }\n fineEdges(value = true) {\n this._fineEdges = value;\n this._actionModel.fineEdges = this._fineEdges;\n return this;\n }\n hints(...values) {\n if (values.length === 1 && Array.isArray(values[0])) {\n // Handle the case of a single array argument\n this._hints = values[0];\n }\n else if (values.length) {\n this._hints = values;\n }\n if (this._hints) {\n this._actionModel.hints = this._hints;\n }\n return this;\n }\n prepareQualifiers() {\n var _a;\n let str = \"background_removal\";\n const params = [];\n if (this._fineEdges !== undefined) {\n params.push(new QualifierValue(`fineedges_${this._fineEdges ? \"y\" : \"n\"}`).toString());\n }\n if ((_a = this._hints) === null || _a === void 0 ? void 0 : _a.length) {\n params.push(new QualifierValue(`hints_(${this._hints.join(\";\")})`).toString());\n }\n if (params.length > 0) {\n str += `:${params.join(\";\")}`;\n }\n this.addQualifier(new Qualifier(\"e\", str));\n }\n static fromJson(actionModel) {\n const { fineEdges, hints } = actionModel;\n const result = new this();\n if (fineEdges !== undefined) {\n result.fineEdges(fineEdges);\n }\n if (hints === null || hints === void 0 ? void 0 : hints.length) {\n result.hints(hints);\n }\n return result;\n }\n}\nexport { BackgroundRemoval };\n","import { Action } from \"../../internal/Action.js\";\nimport { QualifierValue } from \"../../internal/qualifier/QualifierValue.js\";\nimport { Qualifier } from \"../../internal/qualifier/Qualifier.js\";\n/**\n * @description Adds a shadow to the object in an image.\n * @extends SDK.Action\n * @memberOf Actions.Effect\n * @see Visit {@link Actions.Effect|Effect} for an example\n */\nclass DropShadow extends Action {\n constructor() {\n super();\n this._actionModel = {};\n this._actionModel.actionType = 'dropshadow';\n }\n /**\n * @description\n * The direction the light is coming from to cause the shadow effect. (Range: 0 to 360, Server default: 215)\n * @param {number} azimuth\n * @return {this}\n */\n azimuth(azimuth) {\n this._actionModel.azimuth = azimuth;\n this._azimuth = azimuth;\n return this;\n }\n /**\n * @description\n * The height of the light source above the 'ground' to cause the shadow effect. (Range: 0 to 90, Server default: 45)\n * @param {number} elevation\n * @return {this}\n */\n elevation(elevation) {\n this._actionModel.elevation = elevation;\n this._elevation = elevation;\n return this;\n }\n /**\n * @description\n * The spread of the light source. A small number means 'point' light. A larger number means 'area' light. (Range: 0 to 100, Server default: 50)\n * @param {number} spread\n * @return {this}\n */\n spread(spread) {\n this._actionModel.spread = spread;\n this._spread = spread;\n return this;\n }\n prepareQualifiers() {\n const paramNames = ['azimuth', 'elevation', 'spread'];\n const paramValues = [this._azimuth, this._elevation, this._spread];\n const paramString = paramValues.map((value, index) => value !== undefined ? `${paramNames[index]}_${value}` : '').filter(Boolean).join(';');\n this.addQualifier(new Qualifier('e', new QualifierValue(['dropshadow', paramString]).setDelimiter(':')));\n }\n static fromJson(actionModel) {\n const { azimuth, elevation, spread } = actionModel;\n // We are using this() to allow inheriting classes to use super.fromJson.apply(this, [actionModel])\n // This allows the inheriting classes to determine the class to be created\n const result = new this();\n azimuth && result.azimuth(azimuth);\n elevation && result.elevation(elevation);\n spread && result.spread(spread);\n return result;\n }\n}\nexport { DropShadow };\n","import { Action } from \"../../internal/Action.js\";\nimport { QualifierValue } from \"../../internal/qualifier/QualifierValue.js\";\nimport { Qualifier } from \"../../internal/qualifier/Qualifier.js\";\nimport { RectangleRegion } from \"../../qualifiers/region/RectangleRegion.js\";\n/**\n * @description A class that defines how to remove objects from an asset using Generative AI\n * @extends SDK.Action\n * @memberOf Actions.Effect\n * @see Visit {@link Actions.Effect|Effect} for an example\n */\nclass GenerativeRemove extends Action {\n constructor() {\n super();\n this._prompts = [];\n this._regions = [];\n this._detectMultiple = false;\n this._removeShadow = false;\n this._actionModel.actionType = \"generativeRemove\";\n }\n prompt(...value) {\n this._prompts = value;\n if (this._prompts.length > 0) {\n this._actionModel.prompts = this._prompts;\n }\n return this;\n }\n region(...value) {\n this._regions = value;\n if (this._regions.length > 0) {\n this._actionModel.regions = this._regions.map((region) => region.toJson());\n }\n return this;\n }\n detectMultiple(value = true) {\n this._detectMultiple = value;\n if (this._detectMultiple) {\n this._actionModel.detectMultiple = this._detectMultiple;\n }\n return this;\n }\n removeShadow(value = true) {\n this._removeShadow = value;\n if (this._removeShadow) {\n this._actionModel.removeShadow = this._removeShadow;\n }\n return this;\n }\n prepareQualifiers() {\n const qualifierValue = new QualifierValue().setDelimiter(\";\");\n switch (true) {\n case this._prompts.length > 0: {\n qualifierValue.addValue(this.preparePromptValue());\n break;\n }\n case this._regions.length > 0: {\n qualifierValue.addValue(this.prepareRegionValue());\n break;\n }\n }\n if (this._detectMultiple) {\n qualifierValue.addValue(\"multiple_true\");\n }\n if (this._removeShadow) {\n qualifierValue.addValue(\"remove-shadow_true\");\n }\n this.addQualifier(new Qualifier(\"e\", `gen_remove:${qualifierValue.toString()}`));\n }\n preparePromptValue() {\n const prompts = this._prompts;\n const qualifierValue = new QualifierValue().setDelimiter(\";\");\n if (prompts.length === 1) {\n qualifierValue.addValue(`prompt_${prompts[0]}`);\n }\n else {\n qualifierValue.addValue(`prompt_(${prompts.join(\";\")})`);\n }\n return qualifierValue;\n }\n prepareRegionValue() {\n const regions = this._regions;\n const qualifierValue = new QualifierValue();\n if (regions.length === 1) {\n const singleRegion = regions[0].toString();\n qualifierValue.addValue(`region_${singleRegion}`);\n }\n else {\n const regionList = regions.map((region) => region.toString());\n qualifierValue.addValue(`region_(${regionList.join(\";\")})`);\n }\n return qualifierValue;\n }\n static fromJson(actionModel) {\n const { prompts, regions, detectMultiple, removeShadow } = actionModel;\n const result = new this();\n if (regions) {\n result.region(...regions.map(({ x, y, width, height }) => new RectangleRegion(x, y, width, height)));\n }\n if (prompts) {\n result.prompt(...prompts);\n }\n if (detectMultiple) {\n result.detectMultiple(detectMultiple);\n }\n if (removeShadow) {\n result.removeShadow(removeShadow);\n }\n return result;\n }\n}\nexport { GenerativeRemove };\n","import { Action } from \"../../internal/Action.js\";\nimport { Qualifier } from \"../../internal/qualifier/Qualifier.js\";\n/**\n * @description Uses generative AI to replace parts of your image with something else.\n * @extends SDK.Action\n * @memberOf Actions.Effect\n * @see Visit {@link Actions.Effect|Effect} for an example\n */\nclass GenerativeReplace extends Action {\n constructor() {\n super();\n this._preserveGeometry = false;\n this._detectMultiple = false;\n this._actionModel.actionType = \"generativeReplace\";\n }\n from(value) {\n this._from = value;\n this._actionModel.from = value;\n return this;\n }\n to(value) {\n this._to = value;\n this._actionModel.to = value;\n return this;\n }\n preserveGeometry(value = true) {\n this._preserveGeometry = value;\n if (value) {\n this._actionModel.preserveGeometry = true;\n }\n return this;\n }\n detectMultiple(value = true) {\n this._detectMultiple = value;\n if (this._detectMultiple) {\n this._actionModel.detectMultiple = this._detectMultiple;\n }\n return this;\n }\n prepareQualifiers() {\n let str = `gen_replace:from_${this._from};to_${this._to}`;\n if (this._preserveGeometry) {\n str += `;preserve-geometry_true`;\n }\n if (this._detectMultiple) {\n str += `;multiple_true`;\n }\n this.addQualifier(new Qualifier(\"e\", str));\n }\n static fromJson(actionModel) {\n const { from, to, preserveGeometry, detectMultiple } = actionModel;\n const result = new this();\n result.from(from);\n result.to(to);\n if (preserveGeometry) {\n result.preserveGeometry();\n }\n if (detectMultiple) {\n result.detectMultiple();\n }\n return result;\n }\n}\nexport { GenerativeReplace };\n","import { Action } from \"../../internal/Action.js\";\nimport { QualifierValue } from \"../../internal/qualifier/QualifierValue.js\";\nimport { Qualifier } from \"../../internal/qualifier/Qualifier.js\";\n/**\n * @description A class that defines how to recolor objects in an asset using Generative AI\n * @extends SDK.Action\n * @memberOf Actions.Effect\n * @see Visit {@link Actions.Effect|Effect} for an example\n */\nclass GenerativeRecolor extends Action {\n constructor(prompts, color) {\n super();\n this._prompts = [];\n this._detectMultiple = false;\n // Alias method to be backwards compatible\n this.multiple = this.detectMultiple.bind(this);\n this._prompts = Array.isArray(prompts) ? prompts : [prompts];\n this._toColor = color;\n this._actionModel.actionType = \"generativeRecolor\";\n this._actionModel.prompts = this._prompts;\n this._actionModel.toColor = this._toColor;\n }\n detectMultiple(value = true) {\n this._detectMultiple = value;\n if (this._detectMultiple) {\n this._actionModel.detectMultiple = this._detectMultiple;\n }\n return this;\n }\n prepareQualifiers() {\n const qualifierValue = new QualifierValue().setDelimiter(\";\");\n if (this._prompts.length) {\n qualifierValue.addValue(this.preparePromptValue());\n }\n if (this._toColor) {\n const formattedColor = this._toColor.match(/^#/)\n ? this._toColor.substr(1)\n : this._toColor;\n qualifierValue.addValue(`to-color_${formattedColor}`);\n }\n if (this._detectMultiple) {\n qualifierValue.addValue(\"multiple_true\");\n }\n this.addQualifier(new Qualifier(\"e\", `gen_recolor:${qualifierValue.toString()}`));\n }\n preparePromptValue() {\n const prompts = this._prompts;\n const qualifierValue = new QualifierValue().setDelimiter(\";\");\n if (prompts.length === 1) {\n qualifierValue.addValue(`prompt_${prompts[0]}`);\n }\n else {\n qualifierValue.addValue(`prompt_(${prompts.join(\";\")})`);\n }\n return qualifierValue;\n }\n static fromJson(actionModel) {\n const { prompts, detectMultiple, toColor } = actionModel;\n const result = new this(prompts, toColor);\n if (detectMultiple) {\n result.detectMultiple(detectMultiple);\n }\n return result;\n }\n}\nexport { GenerativeRecolor };\n","import { BlurAction } from \"./effect/blur/Blur.js\";\nimport { AccelerationEffectAction } from \"./effect/leveled/Accelerate.js\";\nimport { LoopEffectAction } from \"./effect/leveled/Loop.js\";\nimport { CartoonifyEffect } from \"./effect/Cartoonify.js\";\nimport { EffectOutline } from \"./effect/Outline.js\";\nimport { SimpleEffectAction } from \"./effect/EffectActions/SimpleEffectAction.js\";\nimport { MakeTransparentEffectAction } from \"./effect/leveled/MakeTransparent.js\";\nimport { VectorizeEffectAction } from \"./effect/Vectorize.js\";\nimport { SimulateColorBlindEffectAction } from \"./effect/SimulateColorBlind.js\";\nimport { EffectActionWithLevel } from \"./effect/EffectActions/EffectActionWithLevel.js\";\nimport { AssistColorBlindEffectAction } from \"./effect/AssistColorBlind.js\";\nimport { GradientFadeEffectAction } from \"./effect/GradientFade.js\";\nimport { FadeOutEffectAction } from \"./effect/leveled/FadeOut.js\";\nimport { ColorizeEffectAction } from \"./effect/Colorize.js\";\nimport { ShadowEffectAction } from \"./effect/Shadow.js\";\nimport { StyleTransfer } from \"./effect/StyleTransfer.js\";\nimport { DitherEffectAction } from \"./effect/Dither.js\";\nimport { DeshakeEffectAction } from \"./effect/leveled/Deshake.js\";\nimport { Pixelate } from \"./effect/pixelate/Pixelate.js\";\nimport { EffectActionWithStrength } from \"./effect/EffectActions/EffectActionWithStrength.js\";\nimport { BlackwhiteEffectAction } from \"./effect/leveled/Blackwhite.js\";\nimport { FadeInEffectAction } from \"./effect/leveled/FadeIn.js\";\nimport { RemoveBackgroundAction } from \"./effect/RemoveBackgroundAction.js\";\nimport { ThemeEffect } from \"./effect/Theme.js\";\nimport { BackgroundRemoval } from \"./effect/BackgroundRemoval.js\";\nimport { DropShadow } from \"./effect/DropShadow.js\";\nimport { GenerativeRemove } from \"./effect/GenerativeRemove.js\";\nimport { GenerativeReplace } from \"./effect/GenerativeReplace.js\";\nimport { GenerativeRecolor } from \"./effect/GenerativeRecolor.js\";\n/**\n * @summary action\n * @description Applies a blurring filter to the asset.\n * @memberOf Actions.Effect\n * @param {number} blurLevel The strength of the blur. (Range: 1 to 2000, Server default: 100)\n * @return {Actions.Effect.BlurAction}\n */\nfunction blur(blurLevel) {\n return new BlurAction(blurLevel);\n}\n/**\n * @summary action\n * @description Converts the image to gray-scale (multiple shades of gray).\n * @memberOf Actions.Effect\n * @return {Actions.Effect.SimpleEffectAction}\n */\nfunction grayscale() {\n return new SimpleEffectAction(\"grayscale\");\n}\n/**\n * @summary action\n * @description Changes the color scheme of the image to sepia.\n * @memberOf Actions.Effect\n * @param {number} level The level of sepia to apply. (Range: 1 to 100, Server default: 80)\n * @return {Actions.Effect.EffectActionWithLevel}\n */\nfunction sepia(level) {\n return new EffectActionWithLevel(\"sepia\", level);\n}\n/**\n * @summary action\n * @description Applies a shadow filter to the asset.\n * @memberOf Actions.Effect\n * @param shadowLevel\n * @return {Actions.Effect.ShadowEffectAction}\n */\nfunction shadow(shadowLevel) {\n return new ShadowEffectAction(\"shadow\", shadowLevel);\n}\n/**\n * @summary action\n * @description Applies a colorizing filter to the asset.\n * @memberOf Actions.Effect\n * @param {number} colorizeLevel The strength of the color. (Range: 0 to 100, Server default: 100)\n * @return {Actions.Effect.ColorizeEffectAction}\n */\nfunction colorize(colorizeLevel) {\n return new ColorizeEffectAction(\"colorize\", colorizeLevel);\n}\n/**\n * @summary action\n * @description Applies an oilPaint filter to the asset.\n * @memberOf Actions.Effect\n * @param {number} oilPaintLevel The strength of the effect. (Range: 0 to 100, Server default: 30)\n * @return {Actions.Effect.EffectActionWithStrength}\n */\nfunction oilPaint(oilPaintLevel) {\n return new EffectActionWithStrength(\"oil_paint\", oilPaintLevel);\n}\n/**\n * @summary action\n * @description Applies an artistic filter to the asset.\n * @memberOf Actions.Effect\n * @param {ArtisticFilterType | string} artisticFilterType\n * @return {Actions.Effect.SimpleEffectAction}\n */\nfunction artisticFilter(artisticFilterType) {\n return new SimpleEffectAction(\"art\", artisticFilterType);\n}\n/**\n * @summary action\n * @description Applies a cartoonify effect to the asset.\n * @memberOf Actions.Effect\n * @param cartoonifyLevel The thickness of the lines. (Range: 0 to 100, Server default: 50)\n * @return {Actions.Effect.CartoonifyEffect}\n */\nfunction cartoonify(cartoonifyLevel) {\n return new CartoonifyEffect(\"cartoonify\", cartoonifyLevel);\n}\n/**\n * @summary action\n * @description Adds an outline to a transparent image. For examples, see the Image Transformations guide.\n * @memberOf Actions.Effect\n * @return {Actions.Effect.EffectOutline}\n */\nfunction outline() {\n return new EffectOutline();\n}\n/**\n * @summary action\n * @description Applies a complex deep learning neural network algorithm that extracts artistic styles from a source image and applies them to the content of a target photograph.
\n * Learn more: {@link https://cloudinary.com/documentation/neural_artwork_style_transfer_addon|Neural Artwork Style Transfer}\n * @memberOf Actions.Effect\n * @param {ImageSource} imageSource `import {image} from '@cloudinary/url-gen/qualifiers/sources`\n * @return {Actions.Effect.StyleTransfer}\n */\nfunction styleTransfer(imageSource) {\n return new StyleTransfer(imageSource);\n}\n/**\n * @summary action\n * @description\n * Causes a video clip to play forwards and then backwards.\n * Use in conjunction with trimming parameters ('duration', 'start_offset', or 'end_offset') and the 'loop' effect to deliver a classic (short, repeating) boomerang clip.
\n * For details and examples, see 'Create a boomerang video clip' in the Video Transformations guide.\n * @memberOf Actions.Effect\n * @return {Actions.Effect.SimpleEffectAction}\n */\nfunction boomerang() {\n return new SimpleEffectAction(\"boomerang\");\n}\n/**\n * @summary action\n * @description\n * Removes red eyes with the Advanced Facial Attribute Detection add-on.\n * For details, see the Advanced Facial Attribute Detection add-on documentation.\n * @memberOf Actions.Effect\n * @return {Actions.Effect.SimpleEffectAction}\n */\nfunction advancedRedEye() {\n return new SimpleEffectAction(\"adv_redeye\");\n}\n/**\n * @summary action\n * @description Converts the image to black and white.\n * @memberOf Actions.Effect\n * @param {number | string} level The balance between black (100) and white (0). (Range: 0 to 100, Server default: 50)\n * @return {Actions.Effect.BlackwhiteEffectAction}\n */\nfunction blackwhite(level) {\n return new BlackwhiteEffectAction(\"blackwhite\", level);\n}\n/**\n * @summary action\n * @description Negates the image colors (negative).\n * @memberOf Actions.Effect\n * @return {Actions.Effect.SimpleEffectAction}\n */\nfunction negate() {\n return new SimpleEffectAction(\"negate\");\n}\n/**\n * @summary action\n * @description Removes red eyes in the image.\n * @memberOf Actions.Effect\n * @return {Actions.Effect.SimpleEffectAction}\n */\nfunction redEye() {\n return new SimpleEffectAction(\"redeye\");\n}\n/**\n * @summary action\n * @description Plays the video or audio file in reverse.\n * @memberOf Actions.Effect\n * @return {Actions.Effect.SimpleEffectAction}\n */\nfunction reverse() {\n return new SimpleEffectAction(\"reverse\");\n}\n/**\n * @summary action\n * @description Changes the speed of the video playback.\n * @memberOf Actions.Effect\n * @param {number} speedIncreasePercent The percentage change of speed. Positive numbers speed up the playback, negative numbers slow down the playback (Range: -50 to 100, Server default: 0)\n * @return {Actions.Effect.AccelerationEffectAction}\n */\nfunction accelerate(speedIncreasePercent) {\n return new AccelerationEffectAction(speedIncreasePercent);\n}\n/**\n * @summary action\n * @description\n * Fade in at the beginning of the video.\n * For details and examples, see 'Fade in and out' in the Video Transformations guide.\n * @memberOf Actions.Effect\n * @param {number} fadeLength The time in ms for the fade to occur. (Server default: 2000)\n * @return {Actions.Effect.FadeInEffectAction}\n */\nfunction fadeIn(fadeLength) {\n return new FadeInEffectAction(fadeLength);\n}\n/**\n * @summary action\n * @description\n * Fade out at the end of the video.\n * For details and examples, see 'Fade in and out' in the Video Transformations guide.\n * @memberOf Actions.Effect\n * @param {number} fadeLength The time in ms for the fade to occur. (Server default: 2000)\n * @return {Actions.Effect.FadeoutEffectAction}\n */\nfunction fadeOut(fadeLength) {\n return new FadeOutEffectAction(fadeLength);\n}\n/**\n * @summary action\n * @description\n * Delivers a video or animated GIF that contains additional loops of the video/GIF.\n * The total number of iterations is the number of additional loops plus one.
\n * For animated GIFs only, you can also specify the loop effect without a numeric value to instruct it to loop the GIF infinitely.\n * @memberOf Actions.Effect\n * @param {number} additionalLoops The additional number of times to play the video or animated GIF.\n * @return {Actions.Effect.LoopEffectAction}\n */\nfunction loop(additionalLoops) {\n return new LoopEffectAction(\"loop\", additionalLoops);\n}\n/**\n * @summary action\n * @description\n * Makes the background of the image transparent (or solid white for formats that do not support transparency).\n * The background is determined as all pixels that resemble the pixels on the edges of the image.\n *\n * @memberOf Actions.Effect\n * @param {number} tolerance The tolerance used to accommodate variance in the background color. (Range: 0 to 100, Server default: 10)\n * @return {Actions.Effect.MakeTransparentEffectAction}\n */\nfunction makeTransparent(tolerance) {\n return new MakeTransparentEffectAction(\"make_transparent\", tolerance);\n}\n/**\n * @summary action\n * @description Adds visual noise to the video, visible as a random flicker of \"dots\" or \"snow\".\n * @memberOf Actions.Effect\n * @param {number} percentage The percent of noise to apply. (Range: 0 to 100 Server default: 0)\n * @return {Actions.Effect.EffectActionWithLevel}\n */\nfunction noise(percentage) {\n return new EffectActionWithLevel(\"noise\", percentage);\n}\n/**\n * @summary action\n * @description Applies a vignette effect.\n * @memberOf Actions.Effect\n * @param {number} strength The strength of the vignette. (Range: 0 to 100, Server default: 20)\n * @return {Actions.Effect.EffectActionWithStrength}\n */\nfunction vignette(strength) {\n return new EffectActionWithStrength(\"vignette\", strength);\n}\n/**\n * @summary action\n * @description\n * Applies an ordered dither filter to the image.\n * Use the constants defined in {@link Qualifiers.Dither|@cloudinary/url-gen/qualifiers/dither} for ditherType.\n * @memberOf Actions.Effect\n * @param {Qualifiers.Dither} ditherType - The dither type applied to the image\n * @return {Actions.Effect.DitherEffectAction}\n */\nfunction dither(ditherType) {\n return new DitherEffectAction(\"ordered_dither\", ditherType);\n}\n/**\n * @summary action\n * @description\n * Vectorizes the image.\n * Notes:\n * To deliver the image as a vector image, make sure to change the format (or URL extension) to a vector format, such as SVG.
\n * However, you can also deliver in a raster format if you just want to get the 'vectorized' graphic effect.
\n * Large images are scaled down to 1000 pixels in the largest dimension before vectorization.\n *\n * @memberOf Actions.Effect\n * @return {Actions.Effect.VectorizeEffectAction}\n */\nfunction vectorize() {\n return new VectorizeEffectAction();\n}\n/**\n * @summary action\n * @description\n * Applies a gradient fade effect from one edge of the image.\n * Use .x() or .y() to indicate from which edge to fade and how much of the image should be faded.\n * Values of x and y can be specified as a percentage (Range: 0.0 to 1.0), or in pixels (integer values).
\n * Positive values fade from the top (y) or left (x). Negative values fade from the bottom (y) or right (x).
\n * By default, the gradient is applied to the top 50% of the image (y = 0.5).
\n * Only one direction can be specified but the fade can be applied symmetrically using the mode parameter.
\n * To apply different amounts of fade to multiple edges, use chained fade effects.\n *\n * @memberOf Actions.Effect\n * @return {Actions.Effect.GradientFadeEffectAction}\n */\nfunction gradientFade() {\n return new GradientFadeEffectAction();\n}\n/**\n * @summary action\n * @description\n * Applies stripes to the image to help people with common color-blind conditions to differentiate between colors that are similar for them.
\n * You can replace colors using the xRay() method of the \\Cloudinary\\Transformation\\AssistColorBlind class.\n * @memberOf Actions.Effect\n * @return {Actions.Effect.AssistColorBlindEffectAction}\n */\nfunction assistColorBlind() {\n return new AssistColorBlindEffectAction();\n}\n/**\n * @summary action\n * @description\n * Simulates the way an image would appear to someone with the specified color blind condition.
\n * For a list of supported color blind conditions see {@link Qualifiers.SimulateColorBlindValues| types of color blindness} for possible values\n * @memberOf Actions.Effect\n * @return {Actions.Effect.SimulateColorBlindEffectAction}\n */\nfunction simulateColorBlind() {\n return new SimulateColorBlindEffectAction();\n}\n/**\n * @summary action\n * @description Removes small motion shifts from the video. with a maximum extent of movement in the horizontal and vertical direction of 32 pixels\n * @memberOf Actions.Effect\n * @return {Actions.Effect.DeshakeEffectAction}\n */\nfunction deshake(pixels) {\n return new DeshakeEffectAction(\"deshake\", pixels);\n}\n/**\n * @summary action\n * @description Supports the concatenation of videos with a custom transition by including a transition video as an\n * additional layer and specifying the transition effect\n * @memberOf Actions.Effect\n * @return {Actions.Effect.SimpleEffectAction}\n */\nfunction transition() {\n return new SimpleEffectAction(\"transition\");\n}\n/**\n * @summary action\n * @description Applies a pixelatering filter to the asset.\n * @memberOf Actions.Effect\n * @param {number} squareSize The squareSize in the pixelation. (Range: 1 to 2000, Server default: 100)\n * @return {Actions.Effect.Pixelate}\n */\nfunction pixelate(squareSize) {\n return new Pixelate(squareSize);\n}\n/**\n * @summary action\n * @description Makes the background of an image transparent (or solid white for JPGs).
\n * Use when the background is a uniform color.\n * {@link https://cloudinary.com/documentation/transformation_reference#e_bgremoval|Background Removal}\n *\n * @memberOf Actions.Effect\n * @return {Actions.Effect.RemoveBackgroundAction}\n */\nfunction removeBackground() {\n return new RemoveBackgroundAction();\n}\n/**\n * @summary action\n * @description Uses the Cloudinary AI Background Removal add-on to make the background of an image transparent.
\n * When combined with other transformations, this effect must be specified in the first component.\n * {@link https://cloudinary.com/documentation/transformation_reference#e_background_removal|Background Removal}\n *\n * @memberOf Actions.Effect\n * @return {Actions.Effect.BackgroundRemoval}\n */\nfunction backgroundRemoval() {\n return new BackgroundRemoval();\n}\n/**\n * @summary action\n * @description Adds a shadow to the object in an image.\n * {@link https://cloudinary.com/documentation/transformation_reference#e_dropshadow|Drop Shadow}\n *\n * @memberOf Actions.Effect\n * @return {Actions.Effect.DropShadow}\n */\nfunction dropShadow() {\n return new DropShadow();\n}\n/**\n * @summary action\n * @description Remove objects from an asset using Generative AI\n * {@link https://cloudinary.com/documentation/transformation_reference#e_gen_remove|Generative Remove}\n *\n * @memberOf Actions.Effect\n * @return {Actions.Effect.GenerativeRemove}\n */\nfunction generativeRemove() {\n return new GenerativeRemove();\n}\n/**\n * @summary action\n * @description Uses generative AI to replace parts of your image with something else.\n * {@link https://cloudinary.com/documentation/transformation_reference#e_gen_replace|Generative Replace}\n *\n * @memberOf Actions.Effect\n * @return {Actions.Effect.GenerativeReplace}\n */\nfunction generativeReplace() {\n return new GenerativeReplace();\n}\n/**\n * @summary action\n * @description Uses generative AI to recolor objects from your image.\n * {@link https://cloudinary.com/documentation/transformation_reference#e_gen_recolor|Generative Recolor}\n * @param {string | string[]} prompts\n * @param {SystemColors} color\n * @memberOf Actions.Effect\n * @return {Actions.Effect.GenerativeRecolor}\n */\nfunction generativeRecolor(prompts, color) {\n return new GenerativeRecolor(prompts, color);\n}\n/**\n * @summary action\n * @description\n * Uses generative AI to restore details in poor quality images\n * or images that may have become degraded through repeated processing and compression.\n * @memberOf Actions.Effect\n * @return {Actions.Effect.SimpleEffectAction}\n */\nfunction generativeRestore() {\n return new SimpleEffectAction(\"gen_restore\");\n}\n/**\n *\n * @description Changes the main background color to the one specified, as if a 'theme change' was applied (e.g. dark mode vs light mode).\n * @param {SystemColors} color\n * @return {Actions.Effect.ThemeEffect}\n */\nfunction theme(color) {\n return new ThemeEffect(color);\n}\n/**\n * @description Defines effects that you can apply to transform your assets.\n * @memberOf Actions\n * @namespace Effect\n * @example\n * An extreme example of using many effects on the same asset\n * import {Cloudinary} from \"@cloudinary/url-gen\";\n * // Import everything, or just the action you need for tree-shaking purposes\n * import {Effect, sepia} from \"@cloudinary/url-gen/actions/effect\";\n * import {ArtisticFilter, alDente} from \"@cloudinary/url-gen/qualifiers/artisticFilter\";\n * import {ShakeStrength, pixels16} from \"@cloudinary/url-gen/qualifiers/shakeStrength\";\n * import {cat, dog} from \"@cloudinary/url-gen/qualifiers/ForegroundObject\";\n *\n * const yourCldInstance = new Cloudinary({cloud:{cloudName:'demo'}});\n * const image = yourCldInstance.image('woman');\n *\n * image.effect(Effect.advancedRedEye())\n * .effect(Effect.accelerate())\n * .effect(Effect.accelerate(100))\n * .effect(Effect.accelerate().rate(5))\n * .effect(Effect.boomerang())\n * .effect(Effect.blackwhite())\n * .effect(Effect.blackwhite(10))\n * .effect(Effect.blackwhite().threshold(20))\n * .effect(Effect.fadeIn(100))\n * .effect(Effect.fadeIn().duration(5))\n * .effect(Effect.fadeOut(100))\n * .effect(Effect.fadeOut().duration(5))\n * .effect(Effect.grayscale())\n * .effect(Effect.loop())\n * .effect(Effect.loop(100))\n * .effect(Effect.loop().additionalIterations(5))\n * .effect(Effect.makeTransparent())\n * .effect(Effect.makeTransparent(100))\n * .effect(Effect.makeTransparent().tolerance(5))\n * .effect(Effect.makeTransparent().tolerance(5).colorToReplace('red'))\n * .effect(Effect.noise())\n * .effect(Effect.noise(100))\n * .effect(Effect.noise().level(5))\n * .effect(Effect.negate())\n * .effect(Effect.reverse())\n * .effect(Effect.redEye())\n * .effect(Effect.sepia())\n * .effect(Effect.sepia(100))\n * .effect(Effect.sepia().level(5))\n * .effect(Effect.vignette())\n * .effect(Effect.vignette(100))\n * .effect(Effect.vignette().strength(5))\n * .effect(Effect.deshake())\n * .effect(Effect.deshake(10))\n * .effect(Effect.artisticFilter(alDente())\n * .effect(Effect.deshake().shakeStrength(pixels16()))\n * .effect(Effect.backgroundRemoval().fineEdges(true).hints(cat(), dog())\n * .effect(Effect.generativeRemove().prompt(\"red car\").detectMultiple())\n * .effect(Effect.generativeRemove().region({x: 20, y: 200, width: 100, height: 100}))\n * .effect(Effect.generativeReplace().from(\"ceiling\").to(\"sunny sky\").preserveGeometry(true))\n */\nconst Effect = {\n pixelate: pixelate,\n deshake: deshake,\n boomerang: boomerang,\n advancedRedEye: advancedRedEye,\n blackwhite,\n negate: negate,\n redEye: redEye,\n reverse: reverse,\n accelerate: accelerate,\n fadeIn: fadeIn,\n fadeOut: fadeOut,\n loop: loop,\n makeTransparent: makeTransparent,\n noise: noise,\n vignette: vignette,\n blur: blur,\n grayscale: grayscale,\n sepia: sepia,\n shadow: shadow,\n colorize: colorize,\n oilPaint: oilPaint,\n artisticFilter: artisticFilter,\n cartoonify: cartoonify,\n outline: outline,\n styleTransfer: styleTransfer,\n gradientFade: gradientFade,\n vectorize: vectorize,\n assistColorBlind: assistColorBlind,\n simulateColorBlind: simulateColorBlind,\n transition: transition,\n dither: dither,\n removeBackground,\n backgroundRemoval,\n dropShadow,\n generativeRemove,\n generativeReplace,\n generativeRecolor,\n generativeRestore,\n theme,\n};\nexport { Effect, pixelate, deshake, boomerang, advancedRedEye, blackwhite, negate, redEye, reverse, accelerate, fadeIn, fadeOut, loop, makeTransparent, noise, vignette, blur, grayscale, sepia, shadow, colorize, oilPaint, artisticFilter, cartoonify, outline, styleTransfer, gradientFade, vectorize, assistColorBlind, simulateColorBlind, transition, dither, removeBackground, backgroundRemoval, dropShadow, generativeRemove, generativeReplace, generativeRecolor, generativeRestore, theme, };\n","import { QualifierValue } from \"../../internal/qualifier/QualifierValue.js\";\n/**\n * @memberOf Qualifiers.AspectRatio\n * @extends {SDK.QualifierValue}\n */\nexport class AspectRatioQualifierValue extends QualifierValue {\n}\n","import { Qualifier } from \"../../internal/qualifier/Qualifier.js\";\nimport { Action } from \"../../internal/Action.js\";\nimport { toFloatAsString } from \"../../internal/utils/toFloatAsString.js\";\nimport { AspectRatioQualifierValue } from \"../../qualifiers/aspectRatio/AspectRatioQualifierValue.js\";\nimport { ignoreInitialAspectRatio, regionRelative, relative } from \"../../qualifiers/flag.js\";\nimport { FlagQualifier } from \"../../qualifiers/flag/FlagQualifier.js\";\nimport { ACTION_TYPE_TO_CROP_MODE_MAP, CROP_MODE_TO_ACTION_TYPE_MAP } from \"../../internal/internalConstants.js\";\n/**\n * @description Defines a resize using width and height.\n * @extends SDK.Action\n * @memberOf Actions.Resize\n * @see Visit {@link Actions.Resize| Resize} for examples\n */\nclass ResizeSimpleAction extends Action {\n /**\n * @param {string} cropType\n * @param {number | string} cropWidth The required width of a transformed asset.\n * @param {number | string} cropHeight The required height of a transformed asset.\n */\n constructor(cropType, cropWidth, cropHeight) {\n super();\n this._actionModel = { dimensions: {} };\n this._actionModel.actionType = CROP_MODE_TO_ACTION_TYPE_MAP[cropType] || cropType;\n this.addQualifier(new Qualifier('c', cropType));\n cropWidth && this.width(cropWidth);\n cropHeight && this.height(cropHeight);\n }\n /**\n * @description Sets the height of the resize\n * @param {string | number} x The height in pixels (if an integer is specified) or as a percentage (if a float is specified).\n */\n height(x) {\n this._actionModel.dimensions.height = x;\n return this.addQualifier(new Qualifier('h', x));\n }\n /**\n * @description Sets the width of the resize\n * @param {string | number} x The width in pixels (if an integer is specified) or as a percentage (if a float is specified).\n */\n width(x) {\n this._actionModel.dimensions.width = x;\n return this.addQualifier(new Qualifier('w', x));\n }\n /**\n * @description Sets the aspect ratio of the asset.\n * For a list of supported types see {@link Qualifiers.AspectRatio|\n * AspectRatio values}\n * @param {AspectRatioType|number|string} ratio The new aspect ratio, specified as a percentage or ratio.\n * @return {this}\n */\n aspectRatio(ratio) {\n // toFloatAsString is used to ensure 1 turns into 1.0\n if (ratio instanceof AspectRatioQualifierValue) {\n this._actionModel.dimensions.aspectRatio = `${ratio}`;\n return this.addQualifier(new Qualifier('ar', ratio));\n }\n if (typeof ratio === 'number' || typeof ratio === 'string') {\n this._actionModel.dimensions.aspectRatio = toFloatAsString(ratio);\n return this.addQualifier(new Qualifier('ar', toFloatAsString(ratio)));\n }\n if (ratio instanceof FlagQualifier) {\n this._actionModel.dimensions.aspectRatio = `${ratio.qualifierValue}`;\n return this.addFlag(ratio);\n }\n }\n /**\n * @description Modifies percentage-based width & height parameters of overlays and underlays (e.g., 1.0) to be relative to the containing image instead of the added layer.\n * @return {this}\n */\n relative() {\n this._actionModel.relative = true;\n return this.addFlag(relative());\n }\n /**\n * @description Modifies percentage-based width & height parameters of overlays and underlays (e.g., 1.0) to be relative to the overlaid region\n * @return {this}\n */\n regionRelative() {\n this._actionModel.regionRelative = true;\n return this.addFlag(regionRelative());\n }\n static fromJson(actionModel) {\n const { actionType, dimensions, relative, regionRelative } = actionModel;\n const { aspectRatio, width, height } = dimensions;\n const cropMode = ACTION_TYPE_TO_CROP_MODE_MAP[actionType] || actionType;\n // We are using this() to allow inheriting classes to use super.fromJson.apply(this, [actionModel])\n // This allows the inheriting classes to determine the class to be created\n const result = new this(cropMode, width, height);\n aspectRatio && result.aspectRatio(aspectRatio === 'ignore_aspect_ratio' ? ignoreInitialAspectRatio() : aspectRatio);\n relative && result.relative();\n regionRelative && result.regionRelative();\n return result;\n }\n}\nexport { ResizeSimpleAction };\n","import { AutoGravity } from \"../../qualifiers/gravity/autoGravity/AutoGravity.js\";\nimport { FocusOnGravity } from \"../../qualifiers/gravity/focusOnGravity/FocusOnGravity.js\";\nimport { autoGravity } from \"../../qualifiers/gravity.js\";\nimport { FocusOnValue } from \"../../qualifiers/focusOn.js\";\n/**\n * true if gravity starts with 'auto' or 'auto:'\n * @param gravity\n */\nfunction isIAutoGravityString(gravity) {\n return gravity && `${gravity}`.split(':')[0] === 'auto';\n}\n/**\n * Validate that given val is an ICompassGravity\n * @param gravity\n */\nfunction isCompassGravity(gravity) {\n //const gravityString = `${(typeof gravity === \"string\" ? gravity : gravity.qualifierValue)}`;\n const gravityValue = getGravityValue(gravity);\n return ['north', 'center', 'east', 'west', 'south', 'north_west', 'south_east', 'south_west', 'north_east'].includes(gravityValue);\n}\n/**\n * Get the value of given gravity\n * @param gravity\n */\nfunction getGravityValue(gravity) {\n return `${gravity}`.replace('g_', '');\n}\n/**\n * Creates a compassGravity model\n * @param gravity\n */\nfunction createCompassGravityModel(gravity) {\n return {\n compass: getGravityValue(gravity),\n gravityType: 'direction'\n };\n}\n/**\n * Validate that given gravity is an instance of ocr gravity\n * @param gravity\n */\nfunction isOcrGravity(gravity) {\n return getGravityValue(gravity) === 'ocr_text';\n}\n/**\n * Creates an ocr gravity model\n */\nfunction createOcrGravityModel() {\n return {\n gravityType: 'ocr'\n };\n}\n/**\n * Validate that given gravity is an instance of AutoGravity\n * @param gravity\n */\nfunction isAutoGravity(gravity) {\n return `${gravity.qualifierValue}`.split(':')[0] === 'auto';\n}\n/**\n * Create an instance of IAutoGravityObjectModel\n * @param gravity\n */\nfunction createIAutoFocusObject(gravity) {\n const gravityString = gravity.toString();\n const values = gravityString.split('_');\n const result = {\n object: values[0]\n };\n if (values.length > 1) {\n if (values[1] === 'avoid') {\n result.avoid = true;\n }\n else {\n result.weight = +values[1];\n }\n }\n return result;\n}\n/**\n * Creates an auto gravity model from given AutoGravity\n * @param gravity\n */\nfunction createAutoGravityModel(gravity) {\n let values;\n const gravityQualifier = gravity === 'auto' ? new AutoGravity() : gravity;\n if (`${gravity}`.startsWith('auto:')) {\n values = `${gravity}`.split(':').filter((v) => v !== 'auto');\n }\n else {\n values = gravityQualifier.qualifierValue.values.filter((v) => v !== 'auto');\n }\n const autoFocus = values.map(createIAutoFocusObject);\n return {\n gravityType: 'auto',\n autoFocus\n };\n}\n/**\n * Create IFocusOnGravityModel from FocusOnGravity\n * @param gravity\n */\nfunction createFocusOnGravityModel(gravity) {\n const hasAutoGravity = `${gravity}`.split(':').includes('auto');\n const values = gravity.qualifierValue.values;\n const focusOnValues = hasAutoGravity ? values.slice(0, values.length - 1) : values;\n const result = {\n gravityType: 'object',\n focusOnObjects: focusOnValues.map((v) => `${v}`)\n };\n if (hasAutoGravity) {\n // Remove the first 'auto' value by slicing it, because it's added by autoGravity()\n const autoFocusObjects = values[values.length - 1].values.slice(1);\n const autoGravityInstance = autoGravity().autoFocus(...autoFocusObjects);\n result.fallbackGravity = createAutoGravityModel(autoGravityInstance);\n }\n return result;\n}\n/**\n * Creates a FocusOnGravity from given string\n * @param gravity\n */\nfunction createFocusOnGravity(gravity) {\n const values = gravity.split(':');\n const focusOnValues = values.map((g) => new FocusOnValue(g));\n return new FocusOnGravity(focusOnValues);\n}\n/**\n * Create a model of given gravity\n * @param gravity\n */\nexport function createGravityModel(gravity) {\n if (isCompassGravity(gravity)) {\n return createCompassGravityModel(gravity);\n }\n if (isOcrGravity(gravity)) {\n return createOcrGravityModel();\n }\n if (isIAutoGravityString(gravity) || isAutoGravity(gravity)) {\n return createAutoGravityModel(gravity);\n }\n return createFocusOnGravityModel(typeof gravity === 'string' ? createFocusOnGravity(gravity) : gravity);\n}\n","import { QualifierValue } from \"../internal/qualifier/QualifierValue.js\";\n/**\n * @summary qualifier\n * @namespace AutoFocus\n * @memberOf Qualifiers\n * @see Visit {@link Qualifiers.Gravity|Gravity} for an example\n */\n/**\n * @memberOf Qualifiers.AutoFocus\n * @extends {SDK.QualifierValue}\n * @see Visit {@link Qualifiers.Gravity|Gravity} for an example\n */\nclass AutoFocus extends QualifierValue {\n constructor(focusOn, weight) {\n super();\n this._weight = weight;\n this.focusOn = focusOn;\n this.shouldAvoid = false;\n }\n /**\n * @summary qualifier\n * @description Specifies the object to focus on automatically\n * Accepts an AutoFocusObject (which is just a wrapper for a FocusOn object, but with extra method: avoid, weight)\n * @param {Qualifiers.FocusOn} obj The object to focus on.\n * @param {number} weight\n */\n static focusOn(obj, weight) {\n return new AutoFocus(obj, weight);\n }\n shouldAddWeight() {\n return typeof this._weight === 'number' || typeof this._weight === 'string' || this.shouldAvoid;\n }\n /**\n * @summary qualifier\n * @desc Get the name of the of the object\n */\n getName() {\n return this.focusOn.name;\n }\n /**\n * @summary qualifier\n * @desc Get the weight for the object\n */\n getWeight() {\n if (this.shouldAvoid) {\n return 'avoid';\n }\n else {\n return this._weight;\n }\n }\n /**\n * @summary qualifier\n * @desc Return the string representation of this QualifierValue\n */\n toString() {\n // Future proofing, in case we'd like to support some custom string in the future, or if data is coming from a DB\n if (this.shouldAddWeight()) {\n return `${this.getName()}_${this.getWeight()}`;\n }\n else {\n return `${this.getName()}`;\n }\n }\n /**\n * @summary qualifier\n * @description Sets the importance level of the object within the automatic gravity algorithm\n * @param {numebr} w The focus weight for the object\n * @return {this}\n */\n weight(w) {\n this._weight = w;\n return this;\n }\n /**\n * @summary qualifier\n * @description Attempts to avoid the detected object in the image\n * @return {this}\n */\n avoid() {\n this.shouldAvoid = true;\n return this;\n }\n}\nconst focusOn = AutoFocus.focusOn;\nexport { AutoFocus, focusOn };\n","import { QualifierValue } from \"../../../../internal/qualifier/QualifierValue.js\";\n/**\n * @memberOf Qualifiers.Compass\n * @extends {SDK.QualifierValue}\n */\nclass CompassQualifier extends QualifierValue {\n constructor(val) {\n super();\n this.val = val;\n }\n toString() {\n return this.val;\n }\n}\nexport { CompassQualifier };\n","import { autoGravity, focusOn } from \"../../qualifiers/gravity.js\";\nimport { FocusOnValue, ocr } from \"../../qualifiers/focusOn.js\";\nimport { AutoFocus } from \"../../qualifiers/autoFocus.js\";\nimport { CompassGravity } from \"../../qualifiers/gravity/compassGravity/CompassGravity.js\";\nimport { CompassQualifier } from \"../../qualifiers/gravity/qualifiers/compass/CompassQualifier.js\";\n/**\n * Validates that gravityModel is an ICompassGravityModel\n * @param gravityModel\n */\nfunction isCompassGravityModel(gravityModel) {\n return gravityModel.gravityType === 'direction';\n}\n/**\n * Validates that gravityModel is an IOcrGravityModel\n * @param gravityModel\n */\nfunction isOcrGravityModel(gravityModel) {\n return gravityModel.gravityType === 'ocr';\n}\n/**\n * Validates that gravityModel is an IAutoGravityModel\n * @param gravityModel\n */\nfunction isAutoGravityModel(gravityModel) {\n return gravityModel.gravityType === 'auto';\n}\n/**\n * Create AutoFocus from IAutoGravityObjectModel\n * @param autoGravityObjectModel\n */\nfunction createAutoFocusFromModel(autoGravityObjectModel) {\n const { object, weight, avoid } = autoGravityObjectModel;\n const autoFocus = new AutoFocus(new FocusOnValue(object));\n (weight || weight === 0) && autoFocus.weight(weight);\n avoid && autoFocus.avoid();\n return autoFocus;\n}\n/**\n * Create AutoGravity from IAutoGravityModel\n * @param gravityModel\n */\nfunction createAutoGravityFromModel(gravityModel) {\n const autoFocusModel = gravityModel.autoFocus || [];\n const autoFocus = autoFocusModel.map(createAutoFocusFromModel);\n return autoGravity().autoFocus(...autoFocus);\n}\n/**\n * Create FocusOnGravity from given IFocusOnGravityModel\n * @param gravityModel\n */\nfunction createFocusOnGravityFromModel(gravityModel) {\n const focusOnObjects = (gravityModel.focusOnObjects || []).map((str) => new FocusOnValue(str));\n const result = focusOn(...focusOnObjects);\n if (gravityModel.fallbackGravity) {\n const autoGravity = createAutoGravityFromModel(gravityModel.fallbackGravity);\n result.fallbackGravity(autoGravity);\n }\n return result;\n}\n/**\n * Create gravity instance from given gravity model\n * @param gravityModel\n */\nfunction createGravityFromModel(gravityModel) {\n if (isCompassGravityModel(gravityModel)) {\n return new CompassGravity(new CompassQualifier(gravityModel.compass));\n }\n if (isOcrGravityModel(gravityModel)) {\n return focusOn(ocr());\n }\n if (isAutoGravityModel(gravityModel)) {\n return createAutoGravityFromModel(gravityModel);\n }\n return createFocusOnGravityFromModel(gravityModel);\n}\nexport { createGravityFromModel };\n","import { ResizeSimpleAction } from \"./ResizeSimpleAction.js\";\nimport { Qualifier } from \"../../internal/qualifier/Qualifier.js\";\nimport { createGravityModel } from \"../../internal/models/createGravityModel.js\";\nimport { createGravityFromModel } from \"../../internal/models/createGravityFromModel.js\";\n/**\n * @description Defines an advanced resize.\n * @extends Actions.Resize.ResizeSimpleAction\n * @memberOf Actions.Resize\n * @see Visit {@link Actions.Resize| Resize} for examples\n */\nclass ResizeAdvancedAction extends ResizeSimpleAction {\n /**\n * @description Which part of the original image to include.\n * @param {Qualifiers.Gravity} gravity\n */\n gravity(gravity) {\n this._actionModel.gravity = createGravityModel(gravity);\n const gravityQualifier = typeof gravity === \"string\" ? new Qualifier('g', gravity) : gravity;\n return this.addQualifier(gravityQualifier);\n }\n static fromJson(actionModel) {\n const result = super.fromJson.apply(this, [actionModel]);\n if (actionModel.gravity) {\n result.gravity(createGravityFromModel(actionModel.gravity));\n }\n return result;\n }\n}\nexport { ResizeAdvancedAction };\n","import { Qualifier } from \"../../../../internal/qualifier/Qualifier.js\";\n/**\n * @description Defines the visual appearance of the background.\n * @memberOf Qualifiers.Background\n * @extends {SDK.Qualifier}\n */\nclass BackgroundQualifier extends Qualifier {\n constructor(backgroundValue) {\n // The qualifier key for this qualifier\n super('b');\n // Such as color (b_red)\n if (backgroundValue) {\n this.addValue(backgroundValue);\n }\n }\n}\nexport { BackgroundQualifier };\n","import { Qualifier } from \"../../internal/qualifier/Qualifier.js\";\nimport { ResizeAdvancedAction } from \"./ResizeAdvancedAction.js\";\n/**\n * @description Defines a thumbnail resize action.\n * @extends Actions.Resize.ResizeAdvancedAction\n * @memberOf Actions.Resize\n * @see Visit {@link Actions.Resize| Resize} for examples\n */\nclass ThumbResizeAction extends ResizeAdvancedAction {\n /**\n * @description Controls how much of the original image surrounding the face to keep when using either the 'crop' or 'thumb' cropping modes with face detection.\n * @param {number | string} z The zoom factor. (Default: 1.0)\n */\n zoom(z) {\n this._actionModel.zoom = z;\n return this.addQualifier(new Qualifier('z', z));\n }\n static fromJson(actionModel) {\n const result = super.fromJson.apply(this, [actionModel]);\n actionModel.zoom && result.zoom(actionModel.zoom);\n return result;\n }\n}\nexport { ThumbResizeAction };\n","import { Qualifier } from \"../../internal/qualifier/Qualifier.js\";\nimport { ResizeAdvancedAction } from \"./ResizeAdvancedAction.js\";\n/**\n * @description Defines how to crop an asset\n * @extends Actions.Resize.ResizeAdvancedAction\n * @memberOf Actions.Resize\n * @see Visit {@link Actions.Resize| Resize} for examples\n */\nclass ResizeCropAction extends ResizeAdvancedAction {\n /**\n * @description Horizontal position for custom-coordinates based cropping.\n * @param {number} x The x position.\n */\n x(x) {\n this._actionModel.x = x;\n return this.addQualifier(new Qualifier('x', x));\n }\n /**\n * @description Vertical position for custom-coordinates based cropping\n * @param {number} y The y position.\n */\n y(y) {\n this._actionModel.y = y;\n return this.addQualifier(new Qualifier('y', y));\n }\n /**\n * @description Controls how much of the original image surrounding the face to keep when using either the 'crop' or 'thumb' cropping modes with face detection.\n * @param {number | string} z The zoom factor. (Default: 1.0)\n */\n zoom(z) {\n this._actionModel.zoom = z;\n return this.addQualifier(new Qualifier('z', z));\n }\n static fromJson(actionModel) {\n const result = super.fromJson.apply(this, [actionModel]);\n actionModel.x && result.x(actionModel.x);\n actionModel.y && result.y(actionModel.y);\n actionModel.zoom && result.zoom(actionModel.zoom);\n return result;\n }\n}\nexport { ResizeCropAction };\n","import { Qualifier } from \"../../internal/qualifier/Qualifier.js\";\nimport { ResizeAdvancedAction } from \"./ResizeAdvancedAction.js\";\n/**\n * @description Defines how to crop-fill an asset\n * @extends Actions.Resize.ResizeAdvancedAction\n * @memberOf Actions.Resize\n * @see Visit {@link Actions.Resize| Resize} for examples\n */\nclass ResizeFillAction extends ResizeAdvancedAction {\n /**\n * @description Absolute X position when used with Gravity.xyCenter {@link Qualifiers.Gravity.GravityQualifier}}\n * @param {number} x The x position.\n */\n x(x) {\n this._actionModel.x = x;\n return this.addQualifier(new Qualifier('x', x));\n }\n /**\n * @description Absolute Y position when used with Gravity.xyCenter {@link Qualifiers.Gravity.GravityQualifier}}\n * @param {number} y The y position.\n */\n y(y) {\n this._actionModel.y = y;\n return this.addQualifier(new Qualifier('y', y));\n }\n static fromJson(actionModel) {\n const result = super.fromJson.apply(this, [actionModel]);\n actionModel.x && result.x(actionModel.x);\n actionModel.y && result.y(actionModel.y);\n return result;\n }\n}\nexport { ResizeFillAction };\n","import { ResizeFillAction } from \"./ResizeFillAction.js\";\n/**\n * @description Defines how to crop-limit-fill an asset\n * @extends Actions.Resize.ResizeFillAction\n * @memberOf Actions.Resize\n * @see Visit {@link Actions.Resize| Resize} for examples\n */\nclass ResizeLimitFillAction extends ResizeFillAction {\n}\nexport { ResizeLimitFillAction };\n","/**\n * @description Determines how to crop, scale, and/or zoom the delivered asset according to the requested dimensions.\n * @memberOf Actions\n * @namespace Resize\n * @see Learn more about Gravity and Focus {@link Qualifiers.Gravity| here }\n * @example\n *

Scaling an image

\n * import {Cloudinary} from \"@cloudinary/url-gen\";\n * import {scale, fit, pad, crop} from '@cloudinary/url-gen/actions/resize';\n *\n * const yourCldInstance = new Cloudinary({cloud:{cloudName:'demo'}});\n * const image = yourCldInstance.image('woman');\n *\n * image.resize( scale(100, 100) );\n * // All resize actions have a similar interface.\n * // image.resize( fit(100, 100)) );\n * // image.resize( pad(100, 100)) );\n * // image.resize( crop(100, 100)) );\n * // However, Some actions have additional arguments exposed as builder methods.\n * // See the documentation for each method for more information\n *\n *\n * // Alternative syntax, using builder methods\n * image.resize(\n * scale()\n * .width(100)\n * .height(100)\n * );\n * image.toString()\n *\n * @example\n *

Cropping with automatic focus(Gravity)

\n * import {Cloudinary} from \"@cloudinary/url-gen\";\n *\n * const yourCldInstance = new Cloudinary({cloud:{cloudName:'demo'}});\n * const image = yourCldInstance.image('woman');\n *\n * import {scale} from '@cloudinary/url-gen/actions/resize';\n * import {autoGravity} from '@cloudinary/url-gen/qualifiers/gravity';\n *\n * image.resize( crop(100, 100).gravity(autoGravity()) );\n *\n * // Alternative syntax, using builder methods\n * image.resize(\n * scale()\n * .width(100)\n * .height(100)\n * .gravity(autoGravity())\n * );\n * image.toString()\n */\nimport { ResizePadAction } from \"./resize/ResizePadAction.js\";\nimport { ResizeSimpleAction } from \"./resize/ResizeSimpleAction.js\";\nimport { ResizeScaleAction } from \"./resize/ResizeScaleAction.js\";\nimport { ThumbResizeAction } from \"./resize/ThumbnailAction.js\";\nimport { ResizeCropAction } from \"./resize/ResizeCropAction.js\";\nimport { ResizeFillAction } from \"./resize/ResizeFillAction.js\";\nimport { ResizeLimitFitAction } from \"./resize/ResizeLimitFitAction.js\";\nimport { ResizeLimitFillAction } from \"./resize/ResizeLimitFillAction.js\";\nimport { ResizeLimitPadAction } from \"./resize/ResizeLimitPadAction.js\";\nimport { ResizeMinimumPadAction } from \"./resize/ResizeMinimumPadAction.js\";\n/**\n * @summary action\n * @description\n * Changes the size of the image exactly to the given width and height without necessarily retaining the original aspect ratio:
\n * all original image parts are visible but might be stretched or shrunk.\n * @memberOf Actions.Resize\n * @param {number|string} width The required width of a transformed asset.\n * @param {number|string} height The required height of a transformed asset.\n * @return {Actions.Resize.ScaleAction}\n */\nfunction scale(width, height) {\n return new ResizeScaleAction('scale', width, height);\n}\n/**\n * @summary action\n * @description\n * Scales your image based on automatically calculated areas of interest within each specific photo.\n *\n * For details, see the Imagga Crop and Scale {@link https://cloudinary.com/documentation/imagga_crop_and_scale_addon#smartly_scale_images|add-on documentation}.\n * @memberOf Actions.Resize\n * @param {number|string} width The required width of a transformed asset.\n * @param {number|string} height The required height of a transformed asset.\n * @return {Actions.Resize.ResizeSimpleAction}\n */\nfunction imaggaScale(width, height) {\n return new ResizeSimpleAction('imagga_scale', width, height);\n}\n/**\n * @summary action\n * @description\n * Crops your image based on automatically calculated areas of interest within each specific photo.\n *\n * For details, see the Imagga Crop and Scale {@link https://cloudinary.com/documentation/imagga_crop_and_scale_addon#smartly_crop_images|add-on documentation}.\n * @memberOf Actions.Resize\n * @param {number|string} width The required width of a transformed asset.\n * @param {number|string} height The required height of a transformed asset.\n * @return {Actions.Resize.ResizeSimpleAction}\n */\nfunction imaggaCrop(width, height) {\n return new ResizeSimpleAction('imagga_crop', width, height);\n}\n/**\n * @summary action\n * @description Extracts a region of the given width and height out of the original image.\n * @memberOf Actions.Resize\n * @param {number|string} width The required width of a transformed asset.\n * @param {number|string} height The required height of a transformed asset.\n * @return {Actions.Resize.ResizeCropAction}\n */\nfunction crop(width, height) {\n return new ResizeCropAction('crop', width, height);\n}\n/**\n * @summary action\n * @description\n * Creates an image with the exact given width and height without distorting the image.
\n * This option first scales up or down as much as needed to at least fill both of the given dimensions.

\n * If the requested aspect ratio is different than the original, cropping will occur on the dimension that exceeds the requested size after scaling.\n * @memberOf Actions.Resize\n * @param {number|string} width The required width of a transformed asset.\n * @param {number|string} height The required height of a transformed asset.\n * @return {Actions.Resize.ResizeFillAction}\n */\nfunction fill(width, height) {\n return new ResizeFillAction('fill', width, height);\n}\n/**\n * @summary action\n * @description\n * The image is resized so that it takes up as much space as possible within a bounding box defined by the given width and height parameters.
\n * The original aspect ratio is retained and all of the original image is visible.\n * @memberOf Actions.Resize\n * @param {number|string} width The required width of a transformed asset.\n * @param {number|string} height The required height of a transformed asset.\n * @return {Actions.Resize.ResizeSimpleAction}\n */\nfunction fit(width, height) {\n return new ResizeSimpleAction('fit', width, height);\n}\n/**\n * @summary action\n * @description\n * Resizes the asset to fill the given width and height while retaining the original aspect ratio.\n *\n * If the proportions of the original asset do not match the given width and height, padding is added to the asset\n * to reach the required size.\n * @memberOf Actions.Resize\n * @param {number|string} width The required width of a transformed asset.\n * @param {number|string} height The required height of a transformed asset.\n * @return {Actions.Resize.ResizePadAction}\n */\nfunction pad(width, height) {\n return new ResizePadAction('pad', width, height);\n}\n/**\n * @summary action\n * @description\n * Creates an asset with the exact given width and height without distorting the asset, but only if the original\n * asset is larger than the specified resolution limits.\n *\n * The asset is scaled down to fill the given width and height without distorting the asset, and then the dimension\n * that exceeds the request is cropped. If the original dimensions are both smaller than the requested size, it is\n * not resized at all.\n *\n * @memberOf Actions.Resize\n * @param {number|string} width The required width of a transformed asset.\n * @param {number|string} height The required height of a transformed asset.\n * @return {Actions.Resize.ResizeLimitFillAction}\n */\nfunction limitFill(width, height) {\n return new ResizeLimitFillAction('lfill', width, height);\n}\n/**\n * @summary action\n * @description\n * Resizes the asset so that it takes up as much space as possible within a bounding box defined by the given\n * width and height parameters, but only if the original asset is larger than the given limit (width and height).\n *\n * The asset is scaled down, the original aspect ratio is retained and all of the original asset is visible.\n * @memberOf Actions.Resize\n * @param {number|string} width The required width of a transformed asset.\n * @param {number|string} height The required height of a transformed asset.\n * @return {Actions.Resize.ResizeSimpleAction}\n */\nfunction limitFit(width, height) {\n return new ResizeLimitFitAction('limit', width, height);\n}\n/**\n * @summary action\n * @description\n * Resizes the asset to fill the given width and height while retaining the original aspect ratio, but only if the\n * original asset is smaller than the given minimum (width and height).\n *\n * The asset is scaled up. If the proportions of the original asset do not match the given width and height,\n * padding is added to the asset to reach the required size.\n * @memberOf Actions.Resize\n * @param {number|string} width The required width of a transformed asset.\n * @param {number|string} height The required height of a transformed asset.\n * @return {Actions.Resize.ResizePadAction}\n */\nfunction minimumPad(width, height) {\n return new ResizeMinimumPadAction('mpad', width, height);\n}\n/**\n * @summary action\n * @description\n * Resizes the asset so that it takes up as much space as possible within a bounding box defined by the given\n * width and height parameters, but only if the original asset is smaller than the given minimum (width and height).\n *\n * The asset is scaled up, the original aspect ratio is retained and all of the original asset is visible.\n * @memberOf Actions.Resize\n * @param {number|string} width The required width of a transformed asset.\n * @param {number|string} height The required height of a transformed asset.\n * @return {Actions.Resize.ResizeSimpleAction}\n */\nfunction minimumFit(width, height) {\n return new ResizeSimpleAction('mfit', width, height);\n}\n/**\n * @summary action\n * @memberOf Actions.Resize\n * @description\n * Tries to prevent a \"bad crop\" by first attempting to use the fill mode, but adding padding if it is determined\n * that more of the original image needs to be included in the final image.\n *\n * Especially useful if the aspect ratio of the delivered image is considerably different from the original's\n * aspect ratio.\n *\n * Only supported in conjunction with Automatic cropping.\n *\n * @param {number|string} width The required width of a transformed asset.\n * @param {number|string} height The required height of a transformed asset.\n * @return {Actions.Resize.ResizePadAction}\n */\nfunction fillPad(width, height) {\n return new ResizePadAction('fill_pad', width, height);\n}\n/**\n * @summary action\n * @description\n * The thumb cropping mode is specifically used for creating image thumbnails from either face or custom coordinates,
\n * and must always be accompanied by the gravity parameter set to one of the face detection or custom values.\n * @memberOf Actions.Resize\n * @param {number|string} width The required width of a transformed asset.\n * @param {number|string} height The required height of a transformed asset.\n * @return {Actions.Resize.ThumbResizeAction}\n */\nfunction thumbnail(width, height) {\n return new ThumbResizeAction('thumb', width, height);\n}\n/**\n * @summary action\n * @description\n * Resizes the asset to fill the given width and height while retaining the original aspect ratio, but only if the\n * original asset is larger than the given limit (width and height).\n *\n * The asset is scaled down. If the proportions of the original asset do not match the given width and height,\n * padding is added to the asset to reach the required size.\n *\n * @memberOf Actions.Resize\n * @param {number|string} width The required width of a transformed asset.\n * @param {number|string} height The required height of a transformed asset.\n * @return {Actions.Resize.ResizePadAction}\n */\nfunction limitPad(width, height) {\n return new ResizeLimitPadAction('lpad', width, height);\n}\nconst Resize = {\n imaggaScale,\n imaggaCrop,\n crop,\n fill,\n scale,\n minimumPad,\n fit,\n pad,\n limitFit,\n thumbnail,\n limitFill,\n minimumFit,\n limitPad,\n fillPad\n};\nexport { Resize, imaggaScale, imaggaCrop, crop, fill, scale, minimumPad, fit, pad, limitFit, thumbnail, limitFill, minimumFit, limitPad, fillPad };\n","import { createUnsupportedError } from \"../utils/unsupportedError.js\";\n/**\n * Returns the action's model\n */\nexport function actionToJson() {\n var _a, _b, _c;\n const actionModelIsNotEmpty = this._actionModel && Object.keys(this._actionModel).length;\n const sourceTransformationError = (_c = (_b = (_a = this._actionModel) === null || _a === void 0 ? void 0 : _a.source) === null || _b === void 0 ? void 0 : _b.transformation) === null || _c === void 0 ? void 0 : _c.error;\n // Should return error when there is unsupported transformation inside\n if (sourceTransformationError && sourceTransformationError instanceof Error) {\n return { error: sourceTransformationError };\n }\n if (actionModelIsNotEmpty) {\n return this._actionModel;\n }\n return { error: createUnsupportedError(`unsupported action ${this.constructor.name}`) };\n}\n","import { actionToJson } from \"./actionToJson.js\";\nexport class ActionModel {\n constructor() {\n this._actionModel = {};\n }\n toJson() {\n return actionToJson.apply(this);\n }\n}\n","import { FlagQualifier } from \"../qualifiers/flag/FlagQualifier.js\";\nimport { Qualifier } from \"./qualifier/Qualifier.js\";\nimport { mapToSortedArray } from \"./utils/dataStructureUtils.js\";\nimport { ActionModel } from \"./models/ActionModel.js\";\n/**\n * @summary SDK\n * @memberOf SDK\n * @description Defines the category of transformation to perform.\n */\nclass Action extends ActionModel {\n constructor() {\n super(...arguments);\n // We're using map, to overwrite existing keys. for example:\n // addParam(w_100).addQualifier(w_200) should result in w_200. and not w_100,w_200\n this.qualifiers = new Map();\n // Unlike regular qualifiers, there can be multiple flags in each url component /fl_1,fl_2/\n // If the falgs are added to the qualifiers map, only a single flag could exist in a component (it's a map)\n // So flags are stored separately until the very end because of that reason\n this.flags = [];\n this.delimiter = ','; // {qualifier}{delimiter}{qualifier} for example: `${'w_100'}${','}${'c_fill'}`\n this.actionTag = ''; // A custom name tag to identify this action in the future\n }\n prepareQualifiers() { }\n /**\n * @description Returns the custom name tag that was given to this action\n * @return {string}\n */\n getActionTag() {\n return this.actionTag;\n }\n /**\n * @description Sets the custom name tag for this action\n * @return {this}\n */\n setActionTag(tag) {\n this.actionTag = tag;\n return this;\n }\n /**\n * @description Calls toString() on all child qualifiers (implicitly by using .join()).\n * @return {string}\n */\n toString() {\n this.prepareQualifiers();\n return mapToSortedArray(this.qualifiers, this.flags).join(this.delimiter);\n }\n /**\n * @description Adds the parameter to the action.\n * @param {SDK.Qualifier} qualifier\n * @return {this}\n */\n addQualifier(qualifier) {\n // if string, find the key and value\n if (typeof qualifier === 'string') {\n const [key, value] = qualifier.toLowerCase().split('_');\n if (key === 'fl') {\n // if string qualifier is a flag, store it in the flags arrays\n this.flags.push(new FlagQualifier(value));\n }\n else {\n // if the string qualifier is not a flag, create a new qualifier from it\n this.qualifiers.set(key, new Qualifier(key, value));\n }\n }\n else {\n // if a qualifier object, insert to the qualifiers map\n this.qualifiers.set(qualifier.key, qualifier);\n }\n return this;\n }\n /**\n * @description Adds a flag to the current action.\n * @param {Qualifiers.Flag} flag\n * @return {this}\n */\n addFlag(flag) {\n if (typeof flag === 'string') {\n this.flags.push(new FlagQualifier(flag));\n }\n else {\n if (flag instanceof FlagQualifier) {\n this.flags.push(flag);\n }\n }\n return this;\n }\n addValueToQualifier(qualifierKey, qualifierValue) {\n this.qualifiers.get(qualifierKey).addValue(qualifierValue);\n return this;\n }\n}\nexport { Action };\n","/**\n * Sort a map by key\n * @private\n * @param map \n * @Return array of map's values sorted by key\n */\nfunction mapToSortedArray(map, flags) {\n const array = Array.from(map.entries());\n // objects from the Array.from() method above are stored in array of arrays:\n // [[qualifierKey, QualifierObj], [qualifierKey, QualifierObj]]\n // Flags is an array of FlagQualifierObj\n // We need to convert it to the same form: [flagQualifier] => ['fl', flagQualifier]\n flags.forEach((flag) => {\n array.push(['fl', flag]); // push ['fl', flagQualifier]\n });\n return array.sort().map((v) => v[1]);\n}\n/**\n * Checks if `value` is a string.\n * @private\n * @param {*} value The value to check.\n * @return {boolean} `true` if `value` is a string, else `false`.\n */\nfunction isString(value) {\n return (typeof value === 'string' || value instanceof String);\n}\nexport { isString, mapToSortedArray };\n","/**\n * Flip keys and values for given object\n * @param obj\n */\nfunction objectFlip(obj) {\n const result = {};\n Object.keys(obj).forEach((key) => {\n result[obj[key]] = key;\n });\n return result;\n}\nexport { objectFlip };\n","/**\n * This file is for internal constants only.\n * It is not intended for public use and is not part of the public API\n */\nimport { objectFlip } from \"./utils/objectFlip.js\";\nexport const CONDITIONAL_OPERATORS = {\n \"=\": \"eq\",\n \"!=\": \"ne\",\n \"<\": \"lt\",\n \">\": \"gt\",\n \"<=\": \"lte\",\n \">=\": \"gte\",\n \"&&\": \"and\",\n \"||\": \"or\",\n \"*\": \"mul\",\n \"/\": \"div\",\n \"+\": \"add\",\n \"-\": \"sub\",\n \"^\": \"pow\"\n};\nexport const RESERVED_NAMES = {\n \"aspect_ratio\": \"ar\",\n \"aspectRatio\": \"ar\",\n \"current_page\": \"cp\",\n \"currentPage\": \"cp\",\n \"duration\": \"du\",\n \"face_count\": \"fc\",\n \"faceCount\": \"fc\",\n \"height\": \"h\",\n \"initial_aspect_ratio\": \"iar\",\n \"initial_height\": \"ih\",\n \"initial_width\": \"iw\",\n \"initialAspectRatio\": \"iar\",\n \"initialHeight\": \"ih\",\n \"initialWidth\": \"iw\",\n \"initial_duration\": \"idu\",\n \"initialDuration\": \"idu\",\n \"page_count\": \"pc\",\n \"page_x\": \"px\",\n \"page_y\": \"py\",\n \"pageCount\": \"pc\",\n \"pageX\": \"px\",\n \"pageY\": \"py\",\n \"tags\": \"tags\",\n \"width\": \"w\",\n \"trimmed_aspect_ratio\": \"tar\",\n \"current_public_id\": \"cpi\",\n \"initial_density\": \"idn\",\n \"page_names\": \"pgnames\"\n};\nexport const ACTION_TYPE_TO_CROP_MODE_MAP = {\n limitFit: 'limit',\n limitFill: 'lfill',\n minimumFit: 'mfit',\n thumbnail: 'thumb',\n limitPad: 'lpad',\n minimumPad: 'mpad'\n};\nexport const ACTION_TYPE_TO_DELIVERY_MODE_MAP = {\n colorSpace: 'cs',\n dpr: 'dpr',\n density: 'dn',\n defaultImage: 'd',\n format: 'f',\n quality: 'q'\n};\nexport const ACTION_TYPE_TO_EFFECT_MODE_MAP = {\n redEye: 'redeye',\n advancedRedEye: 'adv_redeye',\n oilPaint: 'oil_paint',\n unsharpMask: 'unsharp_mask',\n makeTransparent: 'make_transparent',\n generativeRestore: 'gen_restore'\n};\nexport const ACTION_TYPE_TO_QUALITY_MODE_MAP = {\n autoBest: 'auto:best',\n autoEco: 'auto:eco',\n autoGood: 'auto:good',\n autoLow: 'auto:low',\n jpegminiHigh: 'jpegmini:1',\n jpegminiMedium: 'jpegmini:2',\n jpegminiBest: 'jpegmini:0'\n};\nexport const ACTION_TYPE_TO_STREAMING_PROFILE_MODE_MAP = {\n fullHd: 'full_hd',\n fullHdWifi: 'full_hd_wifi',\n fullHdLean: 'full_hd_lean',\n hdLean: 'hd_lean'\n};\nexport const CHROMA_VALUE_TO_CHROMA_MODEL_ENUM = {\n 444: \"CHROMA_444\",\n 420: \"CHROMA_420\"\n};\nexport const COLOR_SPACE_MODEL_MODE_TO_COLOR_SPACE_MODE_MAP = {\n 'noCmyk': 'no_cmyk',\n 'keepCmyk': 'keep_cmyk',\n 'tinySrgb': 'tinysrgb',\n 'srgbTrueColor': 'srgb:truecolor'\n};\nexport const ACTION_TYPE_TO_BLEND_MODE_MAP = {\n 'antiRemoval': 'anti_removal'\n};\nexport const CHROMA_MODEL_ENUM_TO_CHROMA_VALUE = objectFlip(CHROMA_VALUE_TO_CHROMA_MODEL_ENUM);\nexport const COLOR_SPACE_MODE_TO_COLOR_SPACE_MODEL_MODE_MAP = objectFlip(COLOR_SPACE_MODEL_MODE_TO_COLOR_SPACE_MODE_MAP);\nexport const CROP_MODE_TO_ACTION_TYPE_MAP = objectFlip(ACTION_TYPE_TO_CROP_MODE_MAP);\nexport const DELIVERY_MODE_TO_ACTION_TYPE_MAP = objectFlip(ACTION_TYPE_TO_DELIVERY_MODE_MAP);\nexport const EFFECT_MODE_TO_ACTION_TYPE_MAP = objectFlip(ACTION_TYPE_TO_EFFECT_MODE_MAP);\nexport const QUALITY_MODE_TO_ACTION_TYPE_MAP = objectFlip(ACTION_TYPE_TO_QUALITY_MODE_MAP);\nexport const STREAMING_PROFILE_TO_ACTION_TYPE_MAP = objectFlip(ACTION_TYPE_TO_STREAMING_PROFILE_MODE_MAP);\n","import { createUnsupportedError } from \"../utils/unsupportedError.js\";\n/**\n * Returns the action's model\n */\nexport function qualifierToJson() {\n return this._qualifierModel || { error: createUnsupportedError(`unsupported qualifier ${this.constructor.name}`) };\n}\n","import { qualifierToJson } from \"./qualifierToJson.js\";\nexport class QualifierModel {\n constructor() {\n this._qualifierModel = {};\n }\n toJson() {\n return qualifierToJson.apply(this);\n }\n}\n","import { QualifierValue } from './QualifierValue.js';\nimport { QualifierModel } from '../models/QualifierModel.js';\n/**\n * @summary SDK\n * @memberOf SDK\n */\nclass Qualifier extends QualifierModel {\n constructor(key, qualifierValue) {\n super();\n this.delimiter = '_'; // {key}{delimiter}{qualifierValue}\n this.key = key;\n if (qualifierValue instanceof QualifierValue) {\n this.qualifierValue = qualifierValue;\n }\n else {\n this.qualifierValue = new QualifierValue();\n this.qualifierValue.addValue(qualifierValue);\n }\n }\n toString() {\n const { key, delimiter, qualifierValue } = this;\n return `${key}${delimiter}${qualifierValue.toString()}`;\n }\n addValue(value) {\n this.qualifierValue.addValue(value);\n return this;\n }\n}\nexport { Qualifier };\n","/**\n * @summary SDK\n * @memberOf SDK\n */\nclass QualifierValue {\n /**\n *\n * @param {QualifierValue | QualifierValue[] | any[] | string | number}qualifierValue\n */\n constructor(qualifierValue) {\n this.values = [];\n this.delimiter = ':'; // {value}{delimiter}{value}...\n if (this.hasValue(qualifierValue)) {\n this.addValue(qualifierValue);\n }\n }\n /**\n * @description Joins the provided values with the provided delimiter\n */\n toString() {\n return this.values.join(this.delimiter);\n }\n /**\n * @description Checks if the provided argument has a value\n * @param {any} v\n * @private\n * @return {boolean}\n */\n hasValue(v) {\n return typeof v !== 'undefined' && v !== null && v !== '';\n }\n /**\n * @desc Adds a value for the this qualifier instance\n * @param {any} value\n * @return {this}\n */\n addValue(value) {\n // Append value or array of values\n if (Array.isArray(value)) {\n this.values = this.values.concat(value);\n }\n else {\n this.values.push(value);\n }\n // Remove falsy values\n this.values = this.values.filter((v) => this.hasValue(v));\n return this;\n }\n /**\n * @description Sets the delimiter for this instance\n * @param delimiter\n */\n setDelimiter(delimiter) {\n this.delimiter = delimiter;\n return this;\n }\n}\nexport { QualifierValue };\n","/**\n * Returns RGB or Color\n * @private\n * @param color\n */\nexport function prepareColor(color) {\n if (color) {\n return color.match(/^#/) ? `rgb:${color.substr(1)}` : color;\n }\n else {\n return color;\n }\n}\n","/**\n * @description\n * Returns a string representing the float value of the input, if the input was a number-like.\n * Examples:\n * - '1.0' -> '1.0'\n * - 1 -> '1.0'\n * - '5' -> '5.0'\n * - 'auto' -> 'auto'\n * @private\n * @param {string|number} value\n * @return {string}\n */\nexport function toFloatAsString(value) {\n // Turn the input to string\n // The Function will return `returnValue` value if the input is not a number-like expression\n const returnValue = value.toString();\n // if the string contains letters, return the input\n if (returnValue.match(/[A-Z]/gi)) {\n return returnValue;\n }\n // If the leading digit is 0, and we have more than 1 digit, it's not a number.\n // 00, 00000, 0x15 etc.\n if (returnValue.length > 1 && returnValue[0] === '0') {\n return returnValue;\n }\n // Final sanity check, parse the number as a float and check if its NaN\n const isNumberLike = !isNaN(parseFloat(returnValue)) && returnValue.indexOf(':') === -1;\n // If it's a number-like, but the input does not contain a decimal - add it.\n if (isNumberLike && returnValue.indexOf('.') === -1) {\n return `${returnValue}.0`;\n }\n else {\n // If the input already contains a decimal, just return the value\n return returnValue;\n }\n}\n","class UnsupportedError extends Error {\n constructor(message = 'Unsupported') {\n super(message);\n }\n}\n/**\n * Creates a new UnsupportedError\n * @param message\n */\nfunction createUnsupportedError(message) {\n return new UnsupportedError(message);\n}\nexport { UnsupportedError, createUnsupportedError };\n","/**\n * @description Defines flags that you can use to alter the default transformation behavior.\n * @namespace Flag\n * @memberOf Qualifiers\n */\nimport { FlagQualifier } from \"./flag/FlagQualifier.js\";\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description Used when delivering a video file as an image format that supports animation, such as animated WebP.\n * Plays all frames rather than just delivering the first one as a static image.\n * Use this flag in addition to the flag or parameter controlling the delivery format,\n * for example f_auto or fl_awebp.\n\n * Note: When delivering a video in GIF format, it is delivered as an animated GIF by default and this flag is not\n * necessary. To deliver a single frame of a video in GIF format, use the page parameter.\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction animated() {\n return new FlagQualifier('animated');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description When converting animated images to WebP format, generate an animated WebP from all the frames in the\n * original\n * animated file instead of only from the first still frame.\n *\n * Note that animated WebPs are not supported in all browsers and versions.\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction animatedWebP() {\n return new FlagQualifier('awebp');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description When used together with automatic quality (q_auto):\n * allow switching to PNG8 encoding if the quality algorithm decides that it's more efficient.\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction anyFormat() {\n return new FlagQualifier('any_format');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description When converting animated images to PNG format, generates an animated PNG from all the frames in the\n * original\n * animated file instead of only from the first still frame.\n *\n * Note that animated PNGs are not supported in all browsers and versions.\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction animatedPng() {\n return new FlagQualifier('apng');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description Trims pixels according to a clipping path included in the original image\n * (e.g., manually created using PhotoShop).\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction clip() {\n return new FlagQualifier('clip');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description Trims pixels according to a clipping path included in the original image (e.g., manually created\n * using PhotoShop)\n * using an evenodd clipping rule.\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction clipEvenOdd() {\n return new FlagQualifier('clip_evenodd');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description Instructs Cloudinary to clear all image meta-data (IPTC, Exif and XMP) while applying an incoming\n * transformation.\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction forceStrip() {\n return new FlagQualifier('force_strip');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description Allows custom flag\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction custom(value) {\n return new FlagQualifier(value);\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description Adds ICC color space metadata to the image, even when the original image doesn't contain any ICC data.\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction forceIcc() {\n return new FlagQualifier('force_icc');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description Delivers the image as an attachment.\n * @param {string} filename The attachment's filename\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction attachment(filename) {\n return new FlagQualifier('attachment', filename);\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description Returns metadata of the input asset and of the transformed output asset in JSON instead of the\n * transformed image.\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction getInfo() {\n return new FlagQualifier('getinfo');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description Deliver an HLS adaptive bitrate streaming file as HLS v3 instead of the default version (HLS v4).\n * Delivering in this format requires a private CDN configuration.\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction hlsv3() {\n return new FlagQualifier('hlsv3');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description Sets the cache-control to immutable for the asset.\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction immutableCache() {\n return new FlagQualifier('immutable_cache');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description * Allows specifying only either width or height so the value of the second axis remains as is, and is not\n * recalculated to maintain the aspect ratio of the original image.\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction ignoreInitialAspectRatio() {\n return new FlagQualifier('ignore_aspect_ratio');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description Keeps the copyright related fields when stripping meta-data.\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction keepAttribution() {\n return new FlagQualifier('keep_attribution');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * Keep the Display Aspect Ratio metadata of the uploaded video (if it’s different from the current video\n * dimensions).\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction keepDar() {\n return new FlagQualifier('keep_dar');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description Keeps all meta-data.\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction keepIptc() {\n return new FlagQualifier('keep_iptc');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description Applies all chained transformations, until a transformation component that includes this flag, on the last added\n * overlay or underlay instead of applying on the containing image.\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction layerApply() {\n return new FlagQualifier('layer_apply');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description Automatically use lossy compression when delivering animated GIF files.\n *\n * This flag can also be used as a conditional flag for delivering PNG files: it tells Cloudinary to deliver the\n * image in PNG format (as requested) unless there is no transparency channel - in which case deliver in JPEG\n * format.\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction lossy() {\n return new FlagQualifier('lossy');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description Convert the audio channel to mono\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction mono() {\n return new FlagQualifier('mono');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description Used internally by Position within an Overlay, this flag will tile the overlay across your image.\n *\n * Learn more: {@link https://cloudinary.com/documentation/transformation_reference#fl_no_overflow|Overflow in overlays}\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction noOverflow() {\n return new FlagQualifier('no_overflow');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description Don't stream a video that is currently being generated on the fly. Wait until the video is fully generated.\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction noStream() {\n return new FlagQualifier('no_stream');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description Generate PNG images in the png24 format.\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction png24() {\n return new FlagQualifier('png24');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description Generate PNG images in the png32 format.\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction png32() {\n return new FlagQualifier('png32');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description Generate PNG images in the PNG8 format.\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction png8() {\n return new FlagQualifier('png8');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description When used with automatic fetch_format (f_auto): ensures that images with a transparency channel will be\n * delivered in PNG format.\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction preserveTransparency() {\n return new FlagQualifier('preserve_transparency');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description Generates a JPG image using the progressive (interlaced) JPG format.\n *\n * This format allows the browser to quickly show a low-quality rendering of the image until the full-quality\n * image is loaded.\n *\n * @param {string} mode? The mode to determine a specific progressive outcome as follows:\n * * semi - A smart optimization of the decoding time, compression level and progressive rendering\n * (less iterations). This is the default mode when using q_auto.\n * * steep - Delivers a preview very quickly, and in a single later phase improves the image to\n * the required resolution.\n * * none - Use this to deliver a non-progressive image. This is the default mode when setting\n * a specific value for quality.\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction progressive(mode) {\n return new FlagQualifier('progressive', mode);\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description Modifies percentage-based width & height parameters of overlays and underlays (e.g., 1.0) to be relative to the overlaid region\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction regionRelative() {\n return new FlagQualifier('region_relative');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description Reduces the image to one flat pixelated layer (as opposed to the default vector based graphic) in\n * order to enable\n * PDF resizing and overlay manipulations.\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction rasterize() {\n return new FlagQualifier('rasterize');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description Modifies percentage-based width & height parameters of overlays and underlays (e.g., 1.0) to be relative to the containing image instead of the added layer.\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction relative() {\n return new FlagQualifier('relative');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description Instructs Cloudinary to run a sanitizer on the image (relevant only for the SVG format).\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction sanitize() {\n return new FlagQualifier('sanitize');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description Splices the video stipulated as an overlay on to the end of the container video instead of adding it as an\n * overlay.\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction splice() {\n return new FlagQualifier('splice');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description Instructs Cloudinary to clear all ICC color profile data included with the image.\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction stripProfile() {\n return new FlagQualifier('strip_profile');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description If the requested video transformation has already been generated, this flag works identically to\n * Flag::attachment.\n *\n * However, if the video transformation is being requested for the first time, this flag causes the video download\n * to begin immediately, streaming it as a fragmented video file.\n *\n * In contrast, if the regular fl_attachment flag is used when a user requests a new video transformation,\n * the download will begin only after the complete transformed video has been generated.\n *\n * Most standard video players successfully play fragmented video files without issue.\n *\n * @param {string} filename The attachment's filename\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction streamingAttachment(filename) {\n return new FlagQualifier('streaming_attachment', filename);\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description Generates TIFF images using LZW compression and in the TIFF8 format.\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction tiff8Lzw() {\n return new FlagQualifier('tiff8_lzw');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description Used internally by Position within an Overlay, this flag will tile the overlay across your image.\n *\n * Learn more: {@link https://cloudinary.com/documentation/layers#automatic_tiling|Tiling overlay}\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction tiled() {\n return new FlagQualifier('tiled');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description Truncate (trim) a video file based on the start time defined in the metadata (relevant only where the metadata\n * includes a directive to play only a section of the video).\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction truncateTS() {\n return new FlagQualifier('truncate_ts');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description Create a waveform image (in the format specified by the file extension) from the audio or video file.\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction waveform() {\n return new FlagQualifier('waveform');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Flag\n * @description A qualifier that ensures that an alpha channel is not applied to a TIFF image if it is a mask channel.\n * @return {Qualifiers.Flag.FlagQualifier}\n */\nfunction ignoreMaskChannels() {\n return new FlagQualifier('ignore_mask_channels');\n}\nconst Flag = {\n animated, anyFormat, animatedPng, animatedWebP,\n clipEvenOdd, lossy, preserveTransparency, png8, png24, png32, progressive, rasterize,\n sanitize, stripProfile, tiff8Lzw, attachment, forceIcc, forceStrip, getInfo, immutableCache,\n keepAttribution, keepIptc, custom, streamingAttachment, hlsv3, keepDar, noStream, mono,\n layerApply, relative, regionRelative, splice, truncateTS, waveform, ignoreInitialAspectRatio, clip,\n tiled, noOverflow, ignoreMaskChannels\n};\nexport { Flag, animated, anyFormat, animatedPng, animatedWebP, clipEvenOdd, lossy, preserveTransparency, png8, png24, png32, progressive, rasterize, sanitize, stripProfile, tiff8Lzw, attachment, forceIcc, forceStrip, getInfo, immutableCache, keepAttribution, keepIptc, custom, streamingAttachment, hlsv3, keepDar, noStream, mono, layerApply, relative, regionRelative, splice, truncateTS, waveform, ignoreInitialAspectRatio, clip, tiled, noOverflow, ignoreMaskChannels };\n","import { QualifierValue } from \"../../internal/qualifier/QualifierValue.js\";\nimport { Qualifier } from \"../../internal/qualifier/Qualifier.js\";\n/**\n * @memberOf Qualifiers.Flag\n * @extends {SDK.Qualifier}\n * @description the FlagQualifier class\n */\nclass FlagQualifier extends Qualifier {\n constructor(flagType, flagValue) {\n let qualifierValue;\n if (flagValue) {\n qualifierValue = new QualifierValue([flagType, `${flagValue}`]).setDelimiter(':');\n }\n else {\n qualifierValue = flagType;\n }\n super('fl', qualifierValue);\n this.flagValue = flagValue;\n }\n toString() {\n return super.toString().replace(/\\./, '%2E');\n }\n getFlagValue() {\n return this.flagValue;\n }\n}\nexport { FlagQualifier };\n","import { FocusOnValue } from \"./gravity/qualifiers/focusOn/FocusOnValue.js\";\n/**\n * @summary qualifier\n * @memberOf Qualifiers.FocusOn\n * @description Detects birds\n * @return {Qualifiers.FocusOn.FocusOnValue} FocusOnValue\n */\nfunction bird() {\n return new FocusOnValue('bird');\n}\n/**\n * @summary qualifier\n * @description Detects dogs\n * @return {Qualifiers.FocusOn.FocusOnValue} FocusOnValue\n */\nfunction dog() {\n return new FocusOnValue('dog');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.FocusOn\n * @description Detects cats\n * @return {Qualifiers.FocusOn.FocusOnValue} FocusOnValue\n */\nfunction cat() {\n return new FocusOnValue('cat');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.FocusOn\n * @description Detects microwaves\n * @return {Qualifiers.FocusOn.FocusOnValue} FocusOnValue\n */\nfunction microwave() {\n return new FocusOnValue('microwave');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.FocusOn\n * @description Detects refrigerators\n * @return {Qualifiers.FocusOn.FocusOnValue} FocusOnValue\n */\nfunction refrigerator() {\n return new FocusOnValue('refrigerator');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.FocusOn\n * @description Detects bottles\n * @return {Qualifiers.FocusOn.FocusOnValue} FocusOnValue\n */\nfunction bottle() {\n return new FocusOnValue('bottle');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.FocusOn\n * @description Detects sinks\n * @return {Qualifiers.FocusOn.FocusOnValue} FocusOnValue\n */\nfunction sink() {\n return new FocusOnValue('sink');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.FocusOn\n * @description Detects skateboards\n * @return {Qualifiers.FocusOn.FocusOnValue} FocusOnValue\n */\nfunction skateboard() {\n return new FocusOnValue('skateboard');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.FocusOn\n * @description Detects people\n * @return {Qualifiers.FocusOn.FocusOnValue} FocusOnValue\n */\nfunction person() {\n return new FocusOnValue('person');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.FocusOn\n * @description Detects the largest face in an image with the Advanced Facial Attribute Detection add-on and makes it the focus of the transformation.\n * @return {Qualifiers.FocusOn.FocusOnValue} FocusOnValue\n */\nfunction advancedFace() {\n return new FocusOnValue('adv_face');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.FocusOn\n * @description Detects all faces in an image with the Advanced Facial Attribute Detection add-on and makes them the focus of the transformation.\n * @return {Qualifiers.FocusOn.FocusOnValue} FocusOnValue\n */\nfunction advancedFaces() {\n return new FocusOnValue('adv_faces');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.FocusOn\n * @description Detects all eyes in an image with the Advanced Facial Attribute Detection add-on and makes them the focus of the transformation.\n * @return {Qualifiers.FocusOn.FocusOnValue} FocusOnValue\n */\nfunction advancedEyes() {\n return new FocusOnValue('adv_eyes');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.FocusOn\n * @description Detects the largest face in the asset and makes it the focus of the transformation.\n * @return {Qualifiers.FocusOn.FocusOnValue} FocusOnValue\n */\nfunction face() {\n return new FocusOnValue('face');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.FocusOn\n * @description Detects all the faces in the asset and makes them the focus of the transformation.\n * @return {Qualifiers.FocusOn.FocusOnValue} FocusOnValue\n */\nfunction faces() {\n return new FocusOnValue('faces');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.FocusOn\n * @description Detects all the faces in the asset and makes them the focus of the transformation.\n * @return {Qualifiers.FocusOn.FocusOnValue} FocusOnValue\n */\nfunction background() {\n return new FocusOnValue('background');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.FocusOn\n * @description Detects aeroplane\n * @return {Qualifiers.FocusOn.FocusOnValue} FocusOnValue\n */\nfunction aeroplane() {\n return new FocusOnValue('aeroplane');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.FocusOn\n * @description Detects bicycle\n * @return {Qualifiers.FocusOn.FocusOnValue} FocusOnValue\n */\nfunction bicycle() {\n return new FocusOnValue('bicycle');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.FocusOn\n * @description Detects boat\n * @return {Qualifiers.FocusOn.FocusOnValue} FocusOnValue\n */\nfunction boat() {\n return new FocusOnValue('boat');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.FocusOn\n * @description Detects bus\n * @return {Qualifiers.FocusOn.FocusOnValue} FocusOnValue\n */\nfunction bus() {\n return new FocusOnValue('bus');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.FocusOn\n * @description Detects car\n * @return {Qualifiers.FocusOn.FocusOnValue} FocusOnValue\n */\nfunction car() {\n return new FocusOnValue('car');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.FocusOn\n * @description Detects chair\n * @return {Qualifiers.FocusOn.FocusOnValue} FocusOnValue\n */\nfunction chair() {\n return new FocusOnValue('chair');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.FocusOn\n * @description Detects cow\n * @return {Qualifiers.FocusOn.FocusOnValue} FocusOnValue\n */\nfunction cow() {\n return new FocusOnValue('cow');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.FocusOn\n * @description Detects diningtable\n * @return {Qualifiers.FocusOn.FocusOnValue} FocusOnValue\n */\nfunction diningtable() {\n return new FocusOnValue('diningtable');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.FocusOn\n * @description Detects horse\n * @return {Qualifiers.FocusOn.FocusOnValue} FocusOnValue\n */\nfunction horse() {\n return new FocusOnValue('horse');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.FocusOn\n * @description Detects motorbike\n * @return {Qualifiers.FocusOn.FocusOnValue} FocusOnValue\n */\nfunction motorbike() {\n return new FocusOnValue('motorbike');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.FocusOn\n * @description Detects pottedplant\n * @return {Qualifiers.FocusOn.FocusOnValue} FocusOnValue\n */\nfunction pottedplant() {\n return new FocusOnValue('pottedplant');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.FocusOn\n * @description Detects sheep\n * @return {Qualifiers.FocusOn.FocusOnValue} FocusOnValue\n */\nfunction sheep() {\n return new FocusOnValue('sheep');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.FocusOn\n * @description Detects sofa\n * @return {Qualifiers.FocusOn.FocusOnValue} FocusOnValue\n */\nfunction sofa() {\n return new FocusOnValue('sofa');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.FocusOn\n * @description Detects train\n * @return {Qualifiers.FocusOn.FocusOnValue} FocusOnValue\n */\nfunction train() {\n return new FocusOnValue('train');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.FocusOn\n * @description Detects tvmonitor\n * @return {Qualifiers.FocusOn.FocusOnValue} FocusOnValue\n */\nfunction tvmonitor() {\n return new FocusOnValue('tvmonitor');\n}\n/**\n * @summary qualifier\n * @memberOf Qualifiers.FocusOn\n * @description Detect all text elements in an image using the {@link https://cloudinary.com/documentation/ocr_text_detection_and_extraction_addon|OCR Text Detection and Extraction add-on} and use the detected bounding box coordinates as the basis of the transformation.\n * @return {Qualifiers.FocusOn.FocusOnValue} FocusOnValue\n */\nfunction ocr() {\n return new FocusOnValue('ocr_text');\n}\n/**\n * @memberOf Qualifiers\n * @namespace FocusOn\n * @see Visit {@link Qualifiers.Gravity|Gravity} for an example\n */\nconst FocusOn = {\n person,\n cat,\n microwave,\n refrigerator,\n skateboard,\n bird,\n bottle,\n dog,\n sink,\n face,\n train,\n sofa,\n sheep,\n pottedplant,\n horse,\n faces,\n cow,\n bus,\n boat,\n advancedEyes,\n advancedFace,\n advancedFaces,\n aeroplane,\n background,\n bicycle,\n car,\n chair,\n diningtable,\n tvmonitor,\n motorbike,\n ocr\n};\nexport { FocusOnValue, FocusOn, person, cat, microwave, refrigerator, skateboard, bird, bottle, dog, sink, face, train, sofa, sheep, pottedplant, horse, faces, cow, bus, boat, advancedEyes, advancedFace, advancedFaces, aeroplane, background, bicycle, car, chair, diningtable, tvmonitor, motorbike, ocr };\n","import { FormatQualifier } from \"./format/FormatQualifier.js\";\n/**\n * @description Contains functions to select the asset format, can be used to convert images and videos to other formats.\n * @memberOf Qualifiers\n * @namespace Format\n * @see Visit {@link Actions.Delivery.format|Delivery Format} for an example\n */\n/**\n * @summary qualifier\n * @description Image format heic.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction heic() { return new FormatQualifier('heic'); }\n/**\n * @summary qualifier\n * @description Image format flif.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction flif() { return new FormatQualifier('flif'); }\n/**\n * @summary qualifier\n * @description Image format ai.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction ai() { return new FormatQualifier('ai'); }\n/**\n * @summary qualifier\n * @description Image format wdp.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction wdp() { return new FormatQualifier('wdp'); }\n/**\n * @summary qualifier\n * @description Image format svg.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction svg() { return new FormatQualifier('svg'); }\n/**\n * @summary qualifier\n * @description Image format webp.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction webp() { return new FormatQualifier('webp'); }\n/**\n * @summary qualifier\n * @description Image format psd.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction psd() { return new FormatQualifier('psd'); }\n/**\n * @summary qualifier\n * @description Image format jp2.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction jp2() { return new FormatQualifier('jp2'); }\n/**\n * @summary qualifier\n * @description Image format jpc.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction jpc() { return new FormatQualifier('jpc'); }\n/**\n * @summary qualifier\n * @description Image format eps.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction eps() { return new FormatQualifier('eps'); }\n/**\n * @summary qualifier\n * @description Image format tiff.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction tiff() { return new FormatQualifier('tiff'); }\n/**\n * @summary qualifier\n * @description Image format pdf.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction pdf() { return new FormatQualifier('pdf'); }\n/**\n * @summary qualifier\n * @description Image format ico.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction ico() { return new FormatQualifier('ico'); }\n/**\n * @summary qualifier\n * @description Image format bmp.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction bmp() { return new FormatQualifier('bmp'); }\n/**\n * @summary qualifier\n * @description Image format png.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction png() { return new FormatQualifier('png'); }\n/**\n * @summary qualifier\n * @description Image format gif.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction gif() { return new FormatQualifier('gif'); }\n/**\n * @summary qualifier\n * @description Image format auto.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction auto() { return new FormatQualifier('auto'); }\n/**\n * @summary qualifier\n * @description Image format jpg.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction jpg() { return new FormatQualifier('jpg'); }\n/**\n * @summary qualifier\n * @description Image format djvu.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction djvu() { return new FormatQualifier('djvu'); }\n/**\n * @summary qualifier\n * @description Image format ps.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction ps() { return new FormatQualifier('ps'); }\n/**\n * @summary qualifier\n * @description Image format ept.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction ept() { return new FormatQualifier('ept'); }\n/**\n * @summary qualifier\n * @description Image format eps3.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction eps3() { return new FormatQualifier('eps3'); }\n/**\n * @summary qualifier\n * @description Image format fxb.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction fxb() { return new FormatQualifier('fxb'); }\n/**\n * @summary qualifier\n * @description Image format gltf.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction gltf() { return new FormatQualifier('gltf'); }\n/**\n * @summary qualifier\n * @description Image format heif.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction heif() { return new FormatQualifier('heif'); }\n/**\n * @summary qualifier\n * @description Image format indd.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction indd() { return new FormatQualifier('indd'); }\n/**\n * @summary qualifier\n * @description Image format jpe.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction jpe() { return new FormatQualifier('jpe'); }\n/**\n * @summary qualifier\n * @description Image format jpeg.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction jpeg() { return new FormatQualifier('jpeg'); }\n/**\n * @summary qualifier\n * @description Image format jxr.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction jxr() { return new FormatQualifier('jxr'); }\n/**\n * @summary qualifier\n * @description Image format hdp.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction hdp() { return new FormatQualifier('hdp'); }\n/**\n * @summary qualifier\n * @description Image format spd.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction spd() { return new FormatQualifier('spd'); }\n/**\n * @summary qualifier\n * @description Image format arw.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction arw() { return new FormatQualifier('arw'); }\n/**\n * @summary qualifier\n * @description Image format cr2.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction cr2() { return new FormatQualifier('cr2'); }\n/**\n * @summary qualifier\n * @description Image format tga.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction tga() { return new FormatQualifier('tga'); }\n/**\n * @summary qualifier\n * @description Image format tif.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction tif() { return new FormatQualifier('tif'); }\n/**\n * @summary qualifier\n * @description Image format avif.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction avif() { return new FormatQualifier('avif'); }\n/**\n * @summary qualifier\n * @description format usdz.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction usdz() { return new FormatQualifier('usdz'); }\n/**\n * @summary qualifier\n * @description Image format 3g2.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction video3g2() { return new FormatQualifier('3g2'); }\n/**\n * @summary qualifier\n * @description Image format 3gp.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction video3gp() { return new FormatQualifier('3gp'); }\n/**\n * @summary qualifier\n * @description Image format avi.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction videoAvi() { return new FormatQualifier('avi'); }\n/**\n * @summary qualifier\n * @description Image format flv.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction videoFlv() { return new FormatQualifier('flv'); }\n/**\n * @summary qualifier\n * @description Image format m3u8.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction videoM3u8() { return new FormatQualifier('m3u8'); }\n/**\n * @summary qualifier\n * @description Image format ts.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction videoTs() { return new FormatQualifier('ts'); }\n/**\n * @summary qualifier\n * @description Image format mov.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction videoMov() { return new FormatQualifier('mov'); }\n/**\n * @summary qualifier\n * @description Image format mkv.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction videoMkv() { return new FormatQualifier('mkv'); }\n/**\n * @summary qualifier\n * @description Image format mp4.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction videoMp4() { return new FormatQualifier('mp4'); }\n/**\n * @summary qualifier\n * @description Image format mpeg.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction videoMpeg() { return new FormatQualifier('mpeg'); }\n/**\n * @summary qualifier\n * @description Image format mpd.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction videoMpd() { return new FormatQualifier('mpd'); }\n/**\n * @summary qualifier\n * @description Image format mxf.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction videoMxf() { return new FormatQualifier('mxf'); }\n/**\n * @summary qualifier\n * @description Image format ogv.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction videoOgv() { return new FormatQualifier('ogv'); }\n/**\n * @summary qualifier\n * @description Image format webm.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction videoWebm() { return new FormatQualifier('webm'); }\n/**\n * @summary qualifier\n * @description Image format wmv.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction videoWmv() { return new FormatQualifier('wmv'); }\n/**\n * @summary qualifier\n * @description Image format m2ts.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction videoM2ts() { return new FormatQualifier('m2ts'); }\n/**\n * @summary qualifier\n * @description Image format mts.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction videoMts() { return new FormatQualifier('mts'); }\n/**\n * @summary qualifier\n * @description Audio format aac.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction audioAac() { return new FormatQualifier('aac'); }\n/**\n * @summary qualifier\n * @description Audio format aiff.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction audioAiff() { return new FormatQualifier('aiff'); }\n/**\n * @summary qualifier\n * @description Audio format amr.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction audioAmr() { return new FormatQualifier('amr'); }\n/**\n * @summary qualifier\n * @description Audio format flac.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction audioFlac() { return new FormatQualifier('flac'); }\n/**\n * @summary qualifier\n * @description Audio format m4a.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction audioM4a() { return new FormatQualifier('m4a'); }\n/**\n * @summary qualifier\n * @description Audio format mp3.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction audioMp3() { return new FormatQualifier('mp3'); }\n/**\n * @summary qualifier\n * @description Audio format ogg.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction audioOgg() { return new FormatQualifier('ogg'); }\n/**\n * @summary qualifier\n * @description Audio format opus.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction audioOpus() { return new FormatQualifier('opus'); }\n/**\n * @summary qualifier\n * @description Audio format wav.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction audioWav() { return new FormatQualifier('wav'); }\n/**\n * @summary qualifier\n * @description Image format glb.\n * @memberOf Qualifiers.Format\n * @return {Qualifiers.Format.FormatQualifier}\n */\nfunction glb() { return new FormatQualifier('glb'); }\nconst Format = { usdz, jp2, ai, auto, bmp, eps, flif, gif, heic, ico, jpc, jpg, pdf, png, psd, svg, tiff, wdp, webp, arw, audioAac, audioAiff, audioAmr, audioFlac, audioM4a, audioMp3, audioOgg, audioOpus, audioWav, avif, cr2, djvu, eps3, ept, fxb, gltf, hdp, heif, indd, jpe, jpeg, jxr, ps, spd, tga, tif, video3g2, video3gp, videoAvi, videoFlv, videoM2ts, videoM3u8, videoMkv, videoMov, videoMp4, videoMpd, videoMpeg, videoMts, videoMxf, videoOgv, videoTs, videoWebm, videoWmv, glb };\nexport { usdz, jp2, ai, auto, bmp, eps, flif, gif, heic, ico, jpc, jpg, pdf, png, psd, svg, tiff, wdp, webp, arw, audioAac, audioAiff, audioAmr, audioFlac, audioM4a, audioMp3, audioOgg, audioOpus, audioWav, avif, cr2, djvu, eps3, ept, fxb, gltf, hdp, heif, indd, jpe, jpeg, jxr, ps, spd, tga, tif, video3g2, video3gp, videoAvi, videoFlv, videoM2ts, videoM3u8, videoMkv, videoMov, videoMp4, videoMpd, videoMpeg, videoMts, videoMxf, videoOgv, videoTs, videoWebm, videoWmv, glb, Format };\n","import { QualifierValue } from \"../../internal/qualifier/QualifierValue.js\";\n/**\n * @memberOf Qualifiers.Format\n * @extends {SDK.QualifierValue}\n */\nclass FormatQualifier extends QualifierValue {\n constructor(val) {\n super(val);\n this.val = val;\n }\n getValue() {\n return this.val;\n }\n}\nexport { FormatQualifier };\n","import { GravityQualifier } from \"../GravityQualifier.js\";\n/**\n * @description The class for the XYCenter Gravity builder\n * @memberOf Qualifiers.Gravity\n * @extends {Qualifiers.Gravity.GravityQualifier}\n */\nclass XYCenterGravity extends GravityQualifier {\n constructor() {\n // Required due to https://github.com/microsoft/TypeScript/issues/13029\n /* istanbul ignore next */\n super('xy_center');\n }\n}\nexport { XYCenterGravity };\n","import { CompassGravity } from \"./gravity/compassGravity/CompassGravity.js\";\nimport { FocusOnGravity } from \"./gravity/focusOnGravity/FocusOnGravity.js\";\nimport { AutoGravity } from \"./gravity/autoGravity/AutoGravity.js\";\nimport { XYCenterGravity } from \"./gravity/xyCenterGravity/XYCenterGravity.js\";\n/**\n * @description Defines the gravity based on directional values from a compass.\n * Learn more: {@link https://cloudinary.com/documentation/resizing_and_cropping#control_gravity|Control gravity for images}\n * Learn more: {@link https://cloudinary.com/documentation/video_resizing_and_cropping#control_gravity|Control gravity for videos}\n * @param {Qualifiers.Compass | string} direction A compass Values\n * @memberOf Qualifiers.Gravity\n * @example\n * import {Cloudinary} from \"@cloudinary/url-gen\";\n * import {compass} from \"@cloudinary/url-gen/qualifiers/gravity\";\n * import {north} from \"@cloudinary/url-gen/qualifiers/compass\";\n * import {crop} from \"@cloudinary/url-gen/actions/resize\";\n *\n * const yourCldInstance = new Cloudinary({cloud: {cloudName: 'demo'}});\n * const image = yourCldInstance.image('woman');\n * image.resize(crop().width(300).gravity(compass(north())))\n * @return {CompassGravity}\n */\nfunction compass(direction) {\n return new CompassGravity(direction);\n}\n/**\n * @summary qualifier\n * @description Specifies what to focus on, for example: faces, objects, eyes, etc.\n * @param {...Qualifier.FocusOn} args One or more objects to focus on\n * @memberOf Qualifiers.Gravity\n * @example\n * import {Cloudinary} from \"@cloudinary/url-gen\";\n * import {focusOn} from \"@cloudinary/url-gen/qualifiers/gravity\";\n * import {crop} from \"@cloudinary/url-gen/actions/resize\";\n * import {cat} from \"@cloudinary/url-gen/qualifiers/focusOn\";\n *\n * const yourCldInstance = new Cloudinary({cloud: {cloudName: 'demo'}});\n * const image = yourCldInstance.image('woman');\n * image.resize(crop().width(300).gravity(focusOn(cat())))\n * @return {FocusOnGravity}\n */\nfunction focusOn(...args) {\n const res = [...args];\n return new FocusOnGravity(res);\n}\n/**\n * @summary qualifier\n * @description Automatically identifies the most interesting regions in the asset, can be qualified further by including what to focus on.\n * @memberOf Qualifiers.Gravity\n * @return {Qualifiers.Gravity.AutoGravity}\n * @example\n * import {Cloudinary} from \"@cloudinary/url-gen\";\n * import {autoGravity} from \"@cloudinary/url-gen/qualifiers/gravity\";\n * import {crop} from \"@cloudinary/url-gen/actions/resize\";\n *\n * const yourCldInstance = new Cloudinary({cloud: {cloudName: 'demo'}});\n * const image = yourCldInstance.image('woman');\n * image.resize(crop().width(300).gravity(autoGravity()))\n * @example\n * import {Cloudinary} from \"@cloudinary/url-gen\";\n * import {autoGravity} from \"@cloudinary/url-gen/qualifiers/gravity\";\n * import {crop} from \"@cloudinary/url-gen/actions/resize\";\n * import {cat} from \"@cloudinary/url-gen/qualifiers/focusOn\";\n * import {AutoFocus} from \"@cloudinary/url-gen/qualifiers/autoFocus\";\n *\n * const yourCldInstance = new Cloudinary({cloud: {cloudName: 'demo'}});\n * const image = yourCldInstance.image('woman');\n * image.resize(crop().width(300).gravity(autoGravity().autoFocus(AutoFocus.focusOn(cat()))))\n */\nfunction autoGravity() {\n return new AutoGravity();\n}\n/**\n * @summary qualifier\n * @description Set the center of gravity to the given x & y coordinates.\n * @memberOf Qualifiers.Gravity\n * @return {XYCenterGravity}\n */\nfunction xyCenter() {\n return new XYCenterGravity();\n}\n/**\n * @description A qualifier that determines which part of an asset to focus on, and thus which part of the asset to keep,
\n * when any part of the asset is cropped. For overlays, this setting determines where to place the overlay.\n * @namespace Gravity\n * @memberOf Qualifiers\n * @example\n * import {Cloudinary} from \"@cloudinary/url-gen\";\n * import {compass} from \"@cloudinary/url-gen/qualifiers/gravity\";\n * import {north} from \"@cloudinary/url-gen/qualifiers/compass\";\n * import {crop} from \"@cloudinary/url-gen/actions/resize\";\n *\n * const yourCldInstance = new Cloudinary({cloud: {cloudName: 'demo'}});\n * const image = yourCldInstance.image('woman');\n * image.resize(crop().width(300).gravity(compass(north())))\n *\n * // Expand every function separately to see its own example\n */\nconst Gravity = {\n compass: compass,\n autoGravity: autoGravity,\n focusOn: focusOn,\n xyCenter\n};\nexport { Gravity, compass, autoGravity, focusOn, xyCenter };\n","import { Qualifier } from \"../../internal/qualifier/Qualifier.js\";\nimport { QualifierValue } from \"../../internal/qualifier/QualifierValue.js\";\n/**\n * @memberOf Gravity.GravityQualifier\n * @extends {SDK.Qualifier}\n */\nclass GravityQualifier extends Qualifier {\n /**\n * @param value, an array containing (GravityObject | AutoGravity | string) or a string;\n */\n constructor(value) {\n super('g', new QualifierValue(value));\n }\n}\nexport { GravityQualifier };\n","import { GravityQualifier } from \"../GravityQualifier.js\";\n/**\n * @description The class for the autoGravity builder\n * @memberOf Qualifiers.Gravity\n * @extends {Qualifiers.Gravity.GravityQualifier}\n */\nclass AutoGravity extends GravityQualifier {\n constructor() {\n // Required due to https://github.com/microsoft/TypeScript/issues/13029\n /* istanbul ignore next */\n super('auto');\n }\n /**\n * @description Autofocuses on objects, allowing their priority within the algorithm to be configured.\n * @param {AutoFocus} AutoFocusObjects\n */\n autoFocus(...AutoFocusObjects) {\n this.addValue(AutoFocusObjects);\n return this;\n }\n}\nexport { AutoGravity };\n","import { GravityQualifier } from \"../GravityQualifier.js\";\n/**\n * @description The class for the CompassGravity builder\n * @memberOf Qualifiers.Gravity\n * @extends {Qualifiers.Gravity.GravityQualifier}\n */\nclass CompassGravity extends GravityQualifier {\n constructor(dir) {\n // Required due to https://github.com/microsoft/TypeScript/issues/13029\n /* istanbul ignore next */\n super(dir);\n }\n}\nexport { CompassGravity };\n","import { GravityQualifier } from \"../GravityQualifier.js\";\n/**\n * @description The class for the FocusOn builder\n * @memberOf Qualifiers.Gravity\n * @extends {Qualifiers.Gravity.GravityQualifier}\n */\nclass FocusOnGravity extends GravityQualifier {\n constructor(FocusOnObjects) {\n // Required due to https://github.com/microsoft/TypeScript/issues/13029\n /* istanbul ignore next */\n super(FocusOnObjects);\n }\n /**\n * @description Specifies the gravity to use if none of the other gravity objects are found.\n * @param {Qualifiers.Gravity.AutoGravity} val\n */\n fallbackGravity(val) {\n /*\n * FocusOnGravity(this) is already a qualifier, with a key and a value g_{obj1}\n * fallBackGravity also attempts to add a value, to reach the result of g_{obj1}:auto:{obj2}\n * Since AutoGravity is a Qualifier, it also comes with its own g_ key, which needs to be removed.\n * To solve it, we take only the value from the qualifier, instead of the whole thing\n */\n this.addValue(val.qualifierValue);\n return this;\n }\n}\nexport { FocusOnGravity };\n","import { QualifierValue } from \"../../../../internal/qualifier/QualifierValue.js\";\n/**\n * @memberOf Qualifiers.FocusOn\n * @extends {SDK.QualifierValue}\n */\nclass FocusOnValue extends QualifierValue {\n constructor(name) {\n super();\n this.name = name;\n }\n toString() {\n return this.name;\n }\n}\nexport { FocusOnValue };\n","/**\n * @memberOf Qualifiers\n * @namespace Quality\n * @see Visit {@link Actions.Delivery.quality|Delivery Quality} for an example\n */\n/**\n * @summary qualifier\n * @description Quality auto\n * @memberOf Qualifiers.Quality\n * @return {string}\n */\nfunction auto() { return 'auto'; }\n/**\n * @summary qualifier\n * @description Quality best\n * @memberOf Qualifiers.Quality\n * @return {string}\n */\nfunction autoBest() { return 'auto:best'; }\n/**\n * @summary qualifier\n * @description Quality eco\n * @memberOf Qualifiers.Quality\n * @return {string}\n */\nfunction autoEco() { return 'auto:eco'; }\n/**\n * @summary qualifier\n * @description Quality good\n * @memberOf Qualifiers.Quality\n * @return {string}\n */\nfunction autoGood() { return 'auto:good'; }\n/**\n * @summary qualifier\n * @description Quality low\n * @memberOf Qualifiers.Quality\n * @return {string}\n */\nfunction autoLow() { return 'auto:low'; }\n/**\n * @summary qualifier\n * @description Quality jpegmini\n * @memberOf Qualifiers.Quality\n * @return {string}\n */\nfunction jpegmini() { return 'jpegmini'; }\n/**\n * @summary qualifier\n * @description Quality jpegmini best\n * @memberOf Qualifiers.Quality\n * @return {string}\n */\nfunction jpegminiBest() { return 'jpegmini:0'; }\n/**\n * @summary qualifier\n * @description Quality jpegmini high\n * @memberOf Qualifiers.Quality\n * @return {string}\n */\nfunction jpegminiHigh() { return 'jpegmini:1'; }\n/**\n * @summary qualifier\n * @quality\n * @description Quality jpegmini medium\n * @memberOf Qualifiers.Quality\n * @return {string}\n */\nfunction jpegminiMedium() { return 'jpegmini:2'; }\nconst Quality = { auto, autoBest, autoEco, autoGood, autoLow, jpegmini, jpegminiBest, jpegminiHigh, jpegminiMedium };\nexport { Quality, auto, autoBest, autoEco, autoGood, autoLow, jpegmini, jpegminiBest, jpegminiHigh, jpegminiMedium };\n","import { Action } from \"../../../internal/Action.js\";\nimport { QualifierValue } from \"../../../internal/qualifier/QualifierValue.js\";\nimport { Qualifier } from \"../../../internal/qualifier/Qualifier.js\";\n/**\n * @extends SDK.Action\n * @description A class for background transformations.\n */\nclass BackgroundColor extends Action {\n constructor(color) {\n super();\n this.addQualifier(new Qualifier('b', new QualifierValue(color).setDelimiter('_')));\n }\n}\nexport { BackgroundColor };\n","import { createUnsupportedError } from \"./utils/unsupportedError.js\";\n/**\n * @summary SDK\n * @memberOf SDK\n * @description Defines an action that's a string literal, no validations or manipulations are performed\n */\nclass RawAction {\n constructor(raw) {\n this.raw = raw;\n }\n toString() {\n return this.raw;\n }\n toJson() {\n return { error: createUnsupportedError(`unsupported action ${this.constructor.name}`) };\n }\n}\nexport { RawAction };\n","import { Action } from \"../internal/Action.js\";\nimport { BackgroundColor } from \"../actions/background/actions/BackgroundColor.js\";\nimport { prepareColor } from \"../internal/utils/prepareColor.js\";\nimport { FlagQualifier } from \"../qualifiers/flag/FlagQualifier.js\";\nimport { RawAction } from \"../internal/RawAction.js\";\nimport { isErrorObject } from \"../internal/models/IErrorObject.js\";\nimport { DeliveryFormatAction } from \"../actions/delivery/DeliveryFormatAction.js\";\n/**\n * @summary SDK\n * @description - Defines how to transform an asset\n * @memberOf SDK\n */\nclass Transformation {\n constructor() {\n this.actions = [];\n }\n /**\n * @param {SDK.Action | string} action\n * @return {this}\n */\n addAction(action) {\n let actionToAdd;\n if (typeof action === 'string') {\n if (action.indexOf('/') >= 0) {\n throw 'addAction cannot accept a string with a forward slash in it - /, use .addTransformation() instead';\n }\n else {\n actionToAdd = new RawAction(action);\n }\n }\n else {\n actionToAdd = action;\n }\n this.actions.push(actionToAdd);\n return this;\n }\n /**\n * @description Allows the injection of a raw transformation as a string into the transformation, or a Transformation instance that was previously created\n * @param {string | SDK.Transformation} tx\n * @example\n * import {Transformation} from \"@cloudinary/url-gen\";\n *\n * const transformation = new Transformation();\n * transformation.addTransformation('w_100/w_200/w_300');\n * @return {this}\n */\n addTransformation(tx) {\n if (tx instanceof Transformation) {\n // Concat the new actions into the existing actions\n this.actions = this.actions.concat(tx.actions);\n }\n else {\n this.actions.push(new RawAction(tx));\n }\n return this;\n }\n /**\n * @return {string}\n */\n toString() {\n return this.actions\n .map((action) => {\n return action.toString();\n })\n .filter((a) => a)\n .join('/');\n }\n /**\n * @description Delivers an animated GIF.\n * @param {AnimatedAction} animatedAction\n * @return {this}\n */\n animated(animatedAction) {\n return this.addAction(animatedAction);\n }\n /**\n * @description Adds a border around the image.\n * @param {Border} borderAction\n * @return {this}\n */\n border(borderAction) {\n return this.addAction(borderAction);\n }\n /**\n * @description Adjusts the shape of the delivered image.
\n * Learn more: {@link https://cloudinary.com/documentation/effects_and_artistic_enhancements#distort|Shape changes and distortion effects}\n * @param {IReshape} reshapeAction\n * @return {this}\n */\n reshape(reshapeAction) {\n return this.addAction(reshapeAction);\n }\n /**\n * @description Resize the asset using provided resize action\n * @param {ResizeSimpleAction} resizeAction\n * @return {this}\n */\n resize(resizeAction) {\n return this.addAction(resizeAction);\n }\n /**\n * @desc An alias to Action Delivery.quality\n * @param {string|number} quality\n * @return {this}\n */\n quality(quality) {\n this.addAction(new DeliveryFormatAction('q', quality));\n return this;\n }\n /**\n * @desc An alias to Action Delivery.format\n * @param {string} format\n * @return {this}\n */\n format(format) {\n this.addAction(new DeliveryFormatAction('f', format));\n return this;\n }\n /**\n * @description Rounds the specified corners of an image.\n * @param roundCornersAction\n * @return {this}\n */\n roundCorners(roundCornersAction) {\n return this.addAction(roundCornersAction);\n }\n /**\n * @description Adds an overlay over the base image.\n * @param {LayerAction} overlayAction\n * @return {this}\n */\n overlay(overlayAction) {\n return this.addAction(overlayAction);\n }\n /**\n * @description Adds an underlay under the base image.\n * @param {LayerAction} underlayAction\n * @return {this}\n */\n underlay(underlayAction) {\n underlayAction.setLayerType('u');\n return this.addAction(underlayAction);\n }\n /**\n * @description Defines an new user variable.\n * @param {VariableAction} variableAction\n * @return {this}\n */\n addVariable(variableAction) {\n return this.addAction(variableAction);\n }\n /**\n * @description Specifies a condition to be met before applying a transformation.\n * @param {ConditionalAction} conditionAction\n * @return {this}\n */\n conditional(conditionAction) {\n return this.addAction(conditionAction);\n }\n /**\n * @description Applies a filter or an effect on an asset.\n * @param {SimpleEffectAction} effectAction\n * @return {this}\n */\n effect(effectAction) {\n return this.addAction(effectAction);\n }\n /**\n * @description Applies adjustment effect on an asset.\n * @param action\n * @return {this}\n */\n adjust(action) {\n return this.addAction(action);\n }\n /**\n * @description Rotates the asset by the given angle.\n * @param {RotateAction} rotateAction\n * @return {this}\n */\n rotate(rotateAction) {\n return this.addAction(rotateAction);\n }\n /**\n * @description Applies a pre-defined named transformation of the given name.\n * @param {NamedTransformation} namedTransformation\n * @return {this}\n */\n namedTransformation(namedTransformation) {\n return this.addAction(namedTransformation);\n }\n /**\n * @description Applies delivery action.\n * @param deliveryAction\n * @return {this}\n */\n delivery(deliveryAction) {\n return this.addAction(deliveryAction);\n }\n /**\n * @description Sets the color of the background.\n * @param {Qualifiers.Color} color\n * @return {this}\n */\n backgroundColor(color) {\n return this.addAction(new BackgroundColor(prepareColor(color)));\n }\n /**\n * @description Adds a layer in a Photoshop document.\n * @param action\n * @return {this}\n */\n psdTools(action) {\n return this.addAction(action);\n }\n /**\n * @description Extracts an image or a page using an index, a range, or a name from a layered media asset.\n * @param action\n * @return {this}\n */\n extract(action) {\n return this.addAction(action);\n }\n /**\n * @description Adds a flag as a separate action.\n * @param {Qualifiers.Flag | string} flagQualifier\n * @return {this}\n */\n addFlag(flagQualifier) {\n const action = new Action();\n let flagToAdd = flagQualifier;\n if (typeof flagQualifier === 'string') {\n flagToAdd = new FlagQualifier(flagQualifier);\n }\n action.addQualifier(flagToAdd);\n return this.addAction(action);\n }\n /**\n * @description Inject a custom function into the image transformation pipeline.\n * @return {this}\n */\n customFunction(customFunction) {\n return this.addAction(customFunction);\n }\n /**\n * Transcodes the video (or audio) to another format.\n * @param {Action} action\n * @return {this}\n */\n transcode(action) {\n return this.addAction(action);\n }\n /**\n * Applies the specified video edit action.\n *\n * @param {videoEditType} action\n * @return {this}\n */\n videoEdit(action) {\n return this.addAction(action);\n }\n toJson() {\n const actions = [];\n for (const action of this.actions) {\n const json = action.toJson();\n if (isErrorObject(json)) {\n // Fail early and return an IErrorObject\n return json;\n }\n actions.push(json);\n }\n return { actions };\n }\n}\nexport { Transformation };\n","/**\n * Validates obj is an instance of IErrorObject\n * @param obj\n */\nfunction isErrorObject(obj) {\n const errorObj = obj;\n return ('error' in errorObj) && !!errorObj.error;\n}\nexport { isErrorObject };\n","import { Transformation } from \"./Transformation.js\";\n/**\n * @summary SDK\n * @extends {SDK.Transformation}\n * @memberOf SDK\n */\nclass ImageTransformation extends Transformation {\n}\nexport { ImageTransformation };\n","/**\n *\n * @private\n * @param {any} a\n */\nfunction isObject(a) {\n if (typeof a !== 'object' || a instanceof Array) {\n return false;\n }\n else {\n return true;\n }\n}\nclass Config {\n filterOutNonSupportedKeys(userProvidedConfig, validKeys) {\n const obj = Object.create({});\n if (isObject(userProvidedConfig)) {\n Object.keys(userProvidedConfig).forEach((key) => {\n if (validKeys.indexOf(key) >= 0) {\n obj[key] = userProvidedConfig[key];\n }\n else {\n console.warn('Warning - unsupported key provided to configuration: ', key);\n }\n });\n return obj;\n }\n else {\n return Object.create({});\n }\n }\n}\nexport default Config;\n","/**\n * This file is for internal constants only.\n * It is not intended for public use and is not part of the public API\n */\n/**\n * @private\n */\nexport const ALLOWED_URL_CONFIG = [\n 'cname',\n 'secureDistribution',\n 'privateCdn',\n 'signUrl',\n 'longUrlSignature',\n 'shorten',\n 'useRootPath',\n 'secure',\n 'forceVersion',\n 'analytics'\n];\n/**\n * @private\n */\nexport const ALLOWED_CLOUD_CONFIG = [\n 'cloudName',\n 'apiKey',\n 'apiSecret',\n 'authToken'\n];\n","import Config from \"./BaseConfig.js\";\nimport { ALLOWED_URL_CONFIG } from \"../internal/internalConstants.js\";\nclass URLConfig extends Config {\n /**\n * @param {IURLConfig} userURLConfig\n */\n constructor(userURLConfig) {\n super();\n const urlConfig = this.filterOutNonSupportedKeys(userURLConfig, ALLOWED_URL_CONFIG);\n Object.assign(this, {\n secure: true\n }, urlConfig);\n }\n extend(userURLConfig) {\n const urlConfig = this.filterOutNonSupportedKeys(userURLConfig, ALLOWED_URL_CONFIG);\n return new URLConfig(Object.assign({}, this, urlConfig));\n }\n /**\n * @param {string} value Sets the cname\n */\n setCname(value) {\n this.cname = value;\n return this;\n }\n /**\n * @param {string} value Sets the secureDistribution\n */\n setSecureDistribution(value) {\n this.secureDistribution = value;\n return this;\n }\n /**\n * @param {boolean} value Sets whether to use a private CDN (Removes cloudName from URL)\n */\n setPrivateCdn(value) {\n this.privateCdn = value;\n return this;\n }\n /**\n * @param value Sets whether or not to sign the URL\n */\n setSignUrl(value) {\n this.signUrl = value;\n return this;\n }\n /**\n * @param value Sets whether or not to use a long signature\n */\n setLongUrlSignature(value) {\n this.longUrlSignature = value;\n return this;\n }\n /**\n * @param value Sets whether or not to shorten the URL\n */\n setShorten(value) {\n this.shorten = value;\n return this;\n }\n /**\n * @param value Sets whether or not to use a root path\n */\n setUseRootPath(value) {\n this.useRootPath = value;\n return this;\n }\n /**\n * @param value Sets whether or not to deliver the asset through https\n */\n setSecure(value) {\n this.secure = value;\n return this;\n }\n /**\n * @param value Sets whether to force a version in the URL\n */\n setForceVersion(value) {\n this.forceVersion = value;\n return this;\n }\n}\nexport default URLConfig;\n","/**\n * @private\n * @description Adds left padding to a string with the desired substring the provided number of times\n * @example stringPad(foo, 3, 'a'') // -> aaafoo\n * @param {string} value\n * @param {number} _targetLength\n * @param {string} _padString\n */\nexport function stringPad(value, _targetLength, _padString) {\n let targetLength = _targetLength >> 0; //truncate if number or convert non-number to 0;\n let padString = String((typeof _padString !== 'undefined' ? _padString : ' '));\n if (value.length > targetLength) {\n return String(value);\n }\n else {\n targetLength = targetLength - value.length;\n if (targetLength > padString.length) {\n padString += repeatStringNumTimes(padString, targetLength / padString.length);\n }\n return padString.slice(0, targetLength) + String(value);\n }\n}\n/**\n * @description Repeat a string multiple times, cross-browser-safe alternative to string.repeat()\n * @param string\n * @param _times\n */\nfunction repeatStringNumTimes(string, _times) {\n let times = _times;\n let repeatedString = \"\";\n while (times > 0) {\n repeatedString += string;\n times--;\n }\n return repeatedString;\n}\n","import { stringPad } from \"./stringPad.js\";\n/**\n * This file maps sequences of 6 bit binary digits to a character in base64.\n * 000000 -> A\n * 110011 -> Z\n * 111111 -> /\n */\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nconst base64Map = {};\nlet num = 0;\nchars.split('').forEach((char) => {\n let key = num.toString(2);\n key = stringPad(key, 6, '0');\n base64Map[key] = char;\n num++;\n});\n/**\n * Map of [six-bit binary codes] -> [Base64 characters]\n */\nexport { base64Map };\n","import { base64Map } from \"./base64Map.js\";\nimport { stringPad } from \"./stringPad.js\";\nimport { reverseVersion } from \"./reverseVersion.js\";\n/**\n * @private\n * @description Encodes a semVer-like version string\n * @param {string} semVer Input can be either x.y.z or x.y\n * @return {string} A string built from 3 characters of the base64 table that encode the semVer\n */\nexport function encodeVersion(semVer) {\n let strResult = '';\n // support x.y or x.y.z by using 'parts' as a variable\n const parts = semVer.split('.').length;\n const paddedStringLength = parts * 6; // we pad to either 12 or 18 characters\n // reverse (but don't mirror) the version. 1.5.15 -> 15.5.1\n // Pad to two spaces, 15.5.1 -> 15.05.01\n const paddedReversedSemver = reverseVersion(semVer);\n // turn 15.05.01 to a string '150501' then to a number 150501\n const num = parseInt(paddedReversedSemver.split('.').join(''));\n // Represent as binary, add left padding to 12 or 18 characters.\n // 150,501 -> 100100101111100101\n let paddedBinary = num.toString(2);\n paddedBinary = stringPad(paddedBinary, paddedStringLength, '0');\n // Stop in case an invalid version number was provided\n // paddedBinary must be built from sections of 6 bits\n if (paddedBinary.length % 6 !== 0) {\n throw 'Version must be smaller than 43.21.26)';\n }\n // turn every 6 bits into a character using the base64Map\n paddedBinary.match(/.{1,6}/g).forEach((bitString) => {\n // console.log(bitString);\n strResult += base64Map[bitString];\n });\n return strResult;\n}\n","import { stringPad } from \"./stringPad.js\";\n/**\n * @private\n * @description Reverses the version positions, x.y.z turns to z.y.x\n * Pads each segment with '0' so they have length of 2\n * Example: 1.2.3 -> 03.02.01\n * @param {string} semVer Input can be either x.y.z or x.y\n * @return {string} in the form of zz.yy.xx (\n */\nexport function reverseVersion(semVer) {\n if (semVer.split('.').length < 2) {\n throw new Error('invalid semVer, must have at least two segments');\n }\n // Split by '.', reverse, create new array with padded values and concat it together\n return semVer.split('.').reverse().map((segment) => {\n // try to cast to number\n const asNumber = +segment;\n if (isNaN(asNumber) || asNumber < 0) {\n throw 'Invalid version number provided';\n }\n return stringPad(segment, 2, '0');\n }).join('.');\n}\n","import { encodeVersion } from \"./encodeVersion.js\";\nimport { getAnalyticsOptions } from \"./getAnalyticsOptions.js\";\nimport { packageVersion } from \"../internal/utils/packageVersion.js\";\n/**\n * @private\n * @description Try to get the node version out of process, if browser just return 0.0.0\n */\nfunction getNodeVersion() {\n const failedVersion = '0.0.0';\n if (typeof window !== 'undefined') {\n return failedVersion;\n }\n else {\n // node env\n try {\n return process.versions.node || failedVersion;\n }\n catch (e) {\n return failedVersion;\n }\n }\n}\n/**\n * @private\n * @description Ensure that all values ITrackedPropertiesThroughAnalytics are populated.\n * Accept a partial map of values and returns the complete interface of ITrackedPropertiesThroughAnalytics\n * @param {ITrackedPropertiesThroughAnalytics} trackedAnalytics\n * @param {ITrackedPropertiesThroughAnalytics} trackedAnalytics\n */\nfunction ensureShapeOfTrackedProperties(trackedAnalytics) {\n // try to get the process version from node, but if we're on the client return 0.0.0\n const defaults = {\n techVersion: getNodeVersion(),\n sdkCode: 'T',\n sdkSemver: packageVersion.split('-')[0],\n responsive: false,\n placeholder: false,\n lazyload: false,\n accessibility: false\n };\n if (!trackedAnalytics) {\n return defaults;\n }\n else {\n return Object.assign(Object.assign({}, defaults), trackedAnalytics);\n }\n}\n/**\n * @private\n * @description Creates the complete SDK signature by using all the values provided by ITrackedPropertiesThroughAnalytics\n * Creation of the signature\n * - Set the AlgoVersion of the encoding, this is an internal letter that represents the version\n * of our encoding algorithm, it will allow us to perform breaking changes if we'll need them.\n * - Take the constant SDK code (Arbitrary letter chosen for each SDK, for Base that letter is 'T')\n * this is used to tell apart which SDK is being tracked.\n * - Take the {major.minor} versions of the node version (techVersion) (14.2, 16.2 etc.)\n * - Take the full semver of the SDK you wish to track\n * - Take the features used(lazy, placeholder etc.) and turn them to a letter (for example accessibility -> D)\n * - Before appending the string, the Versions must be encoded, see the function `encodeVersion` for more details\n * - Append all the variables to a single string\n * - In any case of an error, return the single letter 'E'\n *\n * @return {string} sdkAnalyticsSignature\n */\nexport function getSDKAnalyticsSignature(_trackedAnalytics) {\n const trackedAnalytics = ensureShapeOfTrackedProperties(_trackedAnalytics);\n const analyticsOptions = getAnalyticsOptions(trackedAnalytics);\n try {\n const twoPartVersion = removePatchFromSemver(analyticsOptions.techVersion);\n const encodedSDKVersion = encodeVersion(analyticsOptions.sdkSemver);\n const encodedTechVersion = encodeVersion(twoPartVersion);\n const featureCode = analyticsOptions.feature;\n const SDKCode = analyticsOptions.sdkCode;\n const algoVersion = 'A'; // The algo version is determined here, it should not be an argument\n return `${algoVersion}${SDKCode}${encodedSDKVersion}${encodedTechVersion}${featureCode}`;\n }\n catch (e) {\n // Either SDK or Node versions were unparsable\n return 'E';\n }\n}\n/**\n * @private\n * @description Removes patch version from the semver if it exists\n * Turns x.y.z OR x.y into x.y\n * @param {'x.y.z' | 'x.y' | string} semVerStr\n */\nfunction removePatchFromSemver(semVerStr) {\n const parts = semVerStr.split('.');\n return `${parts[0]}.${parts[1]}`;\n}\n","import { getUrlPrefix, getUrlVersion, handleAssetType, handleDeliveryType } from \"../internal/url/cloudinaryURL.js\";\nimport URLConfig from \"../config/URLConfig.js\";\nimport { getSDKAnalyticsSignature } from \"../sdkAnalytics/getSDKAnalyticsSignature.js\";\n/**\n * This const contains all the valid combination of asset/delivery for URL shortening purposes\n * It's exported because it's used in a test, but it's not really shared enough to belong in a separate file\n */\nexport const SEO_TYPES = {\n \"image/upload\": \"images\",\n \"image/private\": \"private_images\",\n \"image/authenticated\": \"authenticated_images\",\n \"raw/upload\": \"files\",\n \"video/upload\": \"videos\"\n};\n/**\n * @description Cloudinary file without a transformation\n * @summary SDK\n * @memberOf SDK\n */\nclass CloudinaryFile {\n constructor(publicID, cloudConfig = {}, urlConfig) {\n this.setPublicID(publicID);\n this.setCloudConfig(cloudConfig);\n this.setURLConfig(urlConfig);\n }\n /**\n * @description Sets the URL Config for this asset\n * @param urlConfig\n * @return {this}\n */\n setURLConfig(urlConfig) {\n this.urlConfig = new URLConfig(urlConfig);\n return this;\n }\n /**\n * @description Sets the Cloud Config for this asset\n * @param urlConfig\n * @return {this}\n */\n setCloudConfig(cloudConfig) {\n this.cloudName = cloudConfig.cloudName;\n this.apiKey = cloudConfig.apiKey;\n this.apiSecret = cloudConfig.apiSecret;\n this.authToken = cloudConfig.authToken;\n return this;\n }\n /**\n * @description Sets the public ID of the asset.\n * @param {string} publicID The public ID of the asset.\n * @return {this}\n */\n setPublicID(publicID) {\n // PublicID must be a string!\n this.publicID = publicID ? publicID.toString() : '';\n return this;\n }\n /**\n * @description Sets the delivery type of the asset.\n * @param {DELIVERY_TYPE | string} newType The type of the asset.\n * @return {this}\n */\n setDeliveryType(newType) {\n this.deliveryType = newType;\n return this;\n }\n /**\n * @description Sets the URL SEO suffix of the asset.\n * @param {string} newSuffix The SEO suffix.\n * @return {this}\n */\n setSuffix(newSuffix) {\n this.suffix = newSuffix;\n return this;\n }\n /**\n * @description Sets the signature of the asset.\n * @param {string} signature The signature.\n * @return {this}\n */\n setSignature(signature) {\n this.signature = signature;\n return this;\n }\n /**\n * @description Sets the version of the asset.\n * @param {string} newVersion The version of the asset.\n * @return {this}\n */\n setVersion(newVersion) {\n if (newVersion) {\n this.version = newVersion;\n }\n return this;\n }\n /**\n * @description Sets the asset type.\n * @param {string} newType The type of the asset.\n * @return {this}\n */\n setAssetType(newType) {\n if (newType) {\n this.assetType = newType;\n }\n return this;\n }\n sign() {\n return this;\n }\n /**\n * @description Serializes to URL string\n * @param overwriteOptions\n */\n toURL(overwriteOptions = {}) {\n return this.createCloudinaryURL(null, overwriteOptions.trackedAnalytics);\n }\n /**\n * @description Validate various options before attempting to create a URL\n * The function will throw in case a violation\n * @throws Validation errors\n */\n validateAssetForURLCreation() {\n if (typeof this.cloudName === 'undefined') {\n throw 'You must supply a cloudName when initializing the asset';\n }\n const suffixContainsDot = this.suffix && this.suffix.indexOf('.') >= 0;\n const suffixContainsSlash = this.suffix && this.suffix.indexOf('/') >= 0;\n if (suffixContainsDot || suffixContainsSlash) {\n throw '`suffix`` should not include . or /';\n }\n }\n /**\n * @description return an SEO friendly name for a combination of asset/delivery, some examples:\n * * image/upload -> images\n * * video/upload -> videos\n * If no match is found, return `{asset}/{delivery}`\n */\n getResourceType() {\n const assetType = handleAssetType(this.assetType);\n const deliveryType = handleDeliveryType(this.deliveryType);\n const hasSuffix = !!this.suffix;\n const regularSEOType = `${assetType}/${deliveryType}`;\n const shortSEOType = SEO_TYPES[`${assetType}/${deliveryType}`];\n const useRootPath = this.urlConfig.useRootPath;\n const shorten = this.urlConfig.shorten;\n // Quick exit incase of useRootPath\n if (useRootPath) {\n if (regularSEOType === 'image/upload') {\n return ''; // For image/upload we're done, just return nothing\n }\n else {\n throw new Error(`useRootPath can only be used with assetType: 'image' and deliveryType: 'upload'. Provided: ${regularSEOType} instead`);\n }\n }\n if (shorten && regularSEOType === 'image/upload') {\n return 'iu';\n }\n if (hasSuffix) {\n if (shortSEOType) {\n return shortSEOType;\n }\n else {\n throw new Error(`URL Suffix only supported for ${Object.keys(SEO_TYPES).join(', ')}, Provided: ${regularSEOType} instead`);\n }\n }\n // If all else fails, return the regular image/upload combination (asset/delivery)\n return regularSEOType;\n }\n getSignature() {\n if (this.signature) {\n return `s--${this.signature}--`;\n }\n else {\n return '';\n }\n }\n /**\n *\n * @description Creates a fully qualified CloudinaryURL\n * @return {string} CloudinaryURL\n * @throws Validation Errors\n */\n createCloudinaryURL(transformation, trackedAnalytics) {\n // In accordance with the existing implementation, if no publicID exists we should return nothing.\n if (!this.publicID) {\n return '';\n }\n // Throws if some options are mis-configured\n // See the function for more information on when it throws\n this.validateAssetForURLCreation();\n const prefix = getUrlPrefix(this.cloudName, this.urlConfig);\n const transformationString = transformation ? transformation.toString() : '';\n const version = getUrlVersion(this.publicID, this.version, this.urlConfig.forceVersion);\n const publicID = this.publicID\n // Serialize the publicID, but leave slashes alone.\n // we can't use serializeCloudinaryCharacters because that does both things (, and /)\n .replace(/,/g, '%2C');\n // Resource type is a mixture of assetType, deliveryType and various URL Configurations\n // Note how `suffix` changes both image/upload (resourceType) and also is appended at the end\n const url = [prefix, this.getResourceType(), this.getSignature(), transformationString, version, publicID, this.suffix]\n .filter((a) => a)\n .join('/');\n if (typeof transformation === 'string') {\n return url;\n }\n else {\n const safeURL = encodeURI(url)\n .replace(/\\?/g, '%3F')\n .replace(/=/g, '%3D');\n // urlConfig.analytics is true by default, has to be explicitly set to false to overwrite\n // Don't add analytics when publicId includes a '?' to not risk changing existing query params\n if (this.urlConfig.analytics !== false && !(publicID.includes('?'))) {\n return `${safeURL}?_a=${getSDKAnalyticsSignature(trackedAnalytics)}`;\n }\n else {\n return safeURL;\n }\n }\n }\n}\nexport { CloudinaryFile };\n","import { isUrl } from \"./urlUtils/isUrl.js\";\nimport { isFileName } from \"./urlUtils/isFileName.js\";\nimport { publicIDContainsVersion } from \"./urlUtils/publicIDContainsVersion.js\";\n/**\n * Create the URL prefix for Cloudinary resources.\n * Available use cases\n * http://res.cloudinary.com/{cloudName}\n * https://res.cloudinary.com/{cloudName}\n * https://{cloudName}-res.cloudinary.com/\n * http://{domain}/${cloudName}\n * https://{domain}/${cloudName}\n * https://{domain}\n * @private\n *\n * @param {string} cloudName\n * @param {IURLConfig} urlConfig\n */\nfunction getUrlPrefix(cloudName, urlConfig) {\n const secure = urlConfig.secure;\n const privateCDN = urlConfig.privateCdn;\n const cname = urlConfig.cname;\n const secureDistribution = urlConfig.secureDistribution;\n if (!secure && !cname) {\n return `http://res.cloudinary.com/${cloudName}`;\n }\n if (secure && !secureDistribution && privateCDN) {\n return `https://${cloudName}-res.cloudinary.com`;\n }\n if (secure && !secureDistribution) {\n return `https://res.cloudinary.com/${cloudName}`;\n }\n if (secure && secureDistribution && privateCDN) {\n return `https://${secureDistribution}`;\n }\n if (secure && secureDistribution) {\n return `https://${secureDistribution}/${cloudName}`;\n }\n if (!secure && cname) {\n return `http://${cname}/${cloudName}`;\n }\n else {\n return 'ERROR';\n }\n}\n/**\n * @private\n * @param assetType\n */\nfunction handleAssetType(assetType) {\n //default to image\n if (!assetType) {\n return 'image';\n }\n return assetType;\n}\n/**\n * @private\n * @param deliveryType\n */\nfunction handleDeliveryType(deliveryType) {\n //default to upload\n if (!deliveryType) {\n return 'upload';\n }\n return deliveryType;\n}\n/**\n *\n * @param {string} publicID\n * @param {number} version\n * @param {boolean} forceVersion\n */\nfunction getUrlVersion(publicID, version, forceVersion) {\n const shouldForceVersion = forceVersion !== false;\n if (version) {\n return `v${version}`;\n }\n // In all these conditions we never force a version\n if (publicIDContainsVersion(publicID) || isUrl(publicID) || isFileName(publicID)) {\n return '';\n }\n return shouldForceVersion ? 'v1' : '';\n}\nexport { handleAssetType, getUrlVersion, handleDeliveryType, getUrlPrefix };\n","/**\n *\n * @param publicID\n */\nexport function publicIDContainsVersion(publicID) {\n return publicID.match(/^v[0-9]+/);\n}\n","/**\n *\n * @param publicID\n */\nexport function isUrl(publicID) {\n return publicID.match(/^https?:\\//);\n}\n","/**\n *\n * @param publicID\n */\nexport function isFileName(publicID) {\n return publicID.indexOf('/') < 0;\n}\n","/**\n * @private\n * @description Gets the analyticsOptions from options- should include sdkSemver, techVersion, sdkCode, and feature\n * @param {ITrackedPropertiesThroughAnalytics} options\n * @returns {IAnalyticsOptions}\n */\nexport function getAnalyticsOptions(options) {\n const analyticsOptions = {\n sdkSemver: options.sdkSemver,\n techVersion: options.techVersion,\n sdkCode: options.sdkCode,\n feature: '0'\n };\n if (options.accessibility) {\n analyticsOptions.feature = 'D';\n }\n if (options.lazyload) {\n analyticsOptions.feature = 'C';\n }\n if (options.responsive) {\n analyticsOptions.feature = 'A';\n }\n if (options.placeholder) {\n analyticsOptions.feature = 'B';\n }\n return analyticsOptions;\n}\n","const packageVersion = '1.9.2';\n/**\n * Export package version (injected during our build).\n * Reason for this is that If we import values from from package.json,\n * it will cause an error for users who do not have an 'import from json' plugin\n * as part of their build process / bundler.\n */\nexport { packageVersion };\n","import { CloudinaryFile } from \"./CloudinaryFile.js\";\nimport { DeliveryFormatAction } from \"@cloudinary/transformation-builder-sdk/actions/delivery/DeliveryFormatAction\";\n/**\n * @desc Cloudinary Transformable interface, extended by any class that needs a Transformation Interface\n * @summary SDK\n * @memberOf SDK\n */\nclass CloudinaryTransformable extends CloudinaryFile {\n constructor(publicID, cloudConfig, urlConfig, transformation) {\n /* istanbul ignore next */\n super(publicID, cloudConfig, urlConfig);\n this.transformation = transformation;\n }\n /**\n * @desc A proxy to {@link SDK.Transformation| Transformation} - Calls the same method contained in this.transformation\n * @param {Actions.Animated} animated\n * @return {this}\n */\n animated(animated) {\n this.transformation.animated(animated);\n return this;\n }\n /**\n * @desc A proxy to {@link SDK.Transformation| Transformation} - Calls the same method contained in this.transformation\n * @param {Actions.Border} border\n * @return {this}\n */\n border(border) {\n this.transformation.border(border);\n return this;\n }\n /**\n * @desc A proxy to {@link SDK.Transformation| Transformation} - Calls the same method contained in this.transformation\n * @param {Actions.Reshape} reshape\n * @return {this}\n */\n reshape(reshape) {\n this.transformation.reshape(reshape);\n return this;\n }\n /**\n * @desc A proxy to {@link SDK.Transformation| Transformation} - Calls the same method contained in this.transformation\n * @param {Actions.Resize} resize\n * @return {this}\n */\n resize(resize) {\n this.transformation.resize(resize);\n return this;\n }\n /**\n * @desc An alias to Action Delivery.quality\n * @param {string|number} quality\n * @return {this}\n */\n quality(quality) {\n this.addAction(new DeliveryFormatAction('q', quality));\n return this;\n }\n /**\n * @desc An alias to Action Delivery.format\n * @param {string} format\n * @return {this}\n */\n format(format) {\n this.addAction(new DeliveryFormatAction('f', format));\n return this;\n }\n /**\n * @desc A proxy to {@link SDK.Transformation| Transformation} - Calls the same method contained in this.transformation\n * @param {Actions.RoundCorners} roundCorners\n * @return {this}\n */\n roundCorners(roundCorners) {\n this.transformation.roundCorners(roundCorners);\n return this;\n }\n /**\n * @desc A proxy to {@link SDK.Transformation| Transformation} - Calls the same method contained in this.transformation\n * @return {this}\n */\n overlay(overlayAction) {\n this.transformation.overlay(overlayAction);\n return this;\n }\n /**\n * @desc A proxy to {@link SDK.Transformation| Transformation} - Calls the same method contained in this.transformation\n * @param {Actions.Variable} variableAction\n * @return {this}\n */\n addVariable(variableAction) {\n this.transformation.addVariable(variableAction);\n return this;\n }\n /**\n * @desc A proxy to {@link SDK.Transformation| Transformation} - Calls the same method contained in this.transformation\n * @param {Actions.Condition} conditionalAction\n * @return {this}\n */\n conditional(conditionalAction) {\n this.transformation.conditional(conditionalAction);\n return this;\n }\n /**\n * @desc A proxy to {@link SDK.Transformation| Transformation} - Calls the same method contained in this.transformation\n * @param {Actions.Effect} effect\n * @return {this}\n */\n effect(effect) {\n this.transformation.effect(effect);\n return this;\n }\n /**\n * @desc A proxy to {@link SDK.Transformation| Transformation} - Calls the same method contained in this.transformation\n * @param {Actions.Adjust} action\n * @return {this}\n */\n adjust(action) {\n this.transformation.adjust(action);\n return this;\n }\n /**\n * @desc A proxy to {@link SDK.Transformation| Transformation} - Calls the same method contained in this.transformation\n * @param {Actions.Rotate} rotate\n * @return {this}\n */\n rotate(rotate) {\n this.transformation.rotate(rotate);\n return this;\n }\n /**\n * @desc A proxy to {@link SDK.Transformation| Transformation} - Calls the same method contained in this.transformation\n * @param {Actions.NamedTransformation} namedTransformation\n * @return {this}\n */\n namedTransformation(namedTransformation) {\n this.transformation.namedTransformation(namedTransformation);\n return this;\n }\n /**\n * @desc A proxy to {@link SDK.Transformation| Transformation} - Calls the same method contained in this.transformation\n * @param {Actions.Delivery} deliveryAction\n * @return {this}\n */\n delivery(deliveryAction) {\n this.transformation.delivery(deliveryAction);\n return this;\n }\n /**\n * @desc A proxy to {@link SDK.Transformation| Transformation} - Calls the same method contained in this.transformation\n * @param {Qualifiers.color} color\n * @return {this}\n */\n backgroundColor(color) {\n this.transformation.backgroundColor(color);\n return this;\n }\n /**\n * @desc A proxy to {@link SDK.Transformation| Transformation} - Calls the same method contained in this.transformation\n * @param {Actions.PSDTools} action\n * @return {this}\n */\n psdTools(action) {\n this.transformation.psdTools(action);\n return this;\n }\n /**\n * @desc A proxy to {@link SDK.Transformation| Transformation} - Calls the same method contained in this.transformation\n * @param {Actions.Extract} action\n * @return {this}\n */\n extract(action) {\n this.transformation.extract(action);\n return this;\n }\n /**\n * @desc A proxy to {@link SDK.Transformation| Transformation} - Calls the same method contained in this.transformation\n * @param {Qualifiers.Flag | string} flagQualifier\n * @return {this}\n */\n addFlag(flagQualifier) {\n this.transformation.addFlag(flagQualifier);\n return this;\n }\n /**\n * @desc A proxy to {@link SDK.Transformation| Transformation} - Calls the same method contained in this.transformation\n * @param {Actions.CustomFunction} customFunction\n * @return {this}\n */\n customFunction(customFunction) {\n this.transformation.customFunction(customFunction);\n return this;\n }\n /**\n * @desc A proxy to {@link SDK.Transformation| Transformation} - Calls the same method contained in this.transformation\n * @param {SDK.Action | string} action\n * @return {this}\n */\n addAction(action) {\n this.transformation.addAction(action);\n return this;\n }\n /**\n * @description Extend your transformation with another transformation\n * @param { string | SDK.Transformation } tx\n */\n addTransformation(tx) {\n this.transformation.addTransformation(tx);\n return this;\n }\n /**\n * @desc A proxy to {@link SDK.Transformation| Transformation} - Calls the same method contained in this.transformation\n * @return {string}\n */\n toString() {\n return this.transformation.toString();\n }\n /**\n * @desc A proxy to {@link SDK.Transformation| Transformation} - Calls the same method contained in this.transformation\n * @return {this}\n */\n underlay(underlayAction) {\n this.transformation.underlay(underlayAction);\n return this;\n }\n toURL(overwriteOptions = {}) {\n return this.createCloudinaryURL(this.transformation, overwriteOptions === null || overwriteOptions === void 0 ? void 0 : overwriteOptions.trackedAnalytics);\n }\n}\nexport { CloudinaryTransformable };\n","import { ImageTransformation } from \"@cloudinary/transformation-builder-sdk/transformation/ImageTransformation\";\nimport { CloudinaryTransformable } from \"./CloudinaryTransformable.js\";\n/**\n * @desc Cloudinary image asset, with image-related transformations\n * @summary SDK\n * @memberOf SDK\n */\nclass CloudinaryImage extends CloudinaryTransformable {\n constructor(publicID, cloudConfig, urlConfig) {\n /* istanbul ignore next */\n super(publicID, cloudConfig, urlConfig, new ImageTransformation());\n }\n}\nexport { CloudinaryImage };\n","import { Transformation } from \"./Transformation.js\";\n/**\n * @summary SDK\n * @extends {SDK.Transformation}\n * @memberOf SDK\n */\nclass VideoTransformation extends Transformation {\n}\nexport { VideoTransformation };\n","import { CloudinaryTransformable } from \"./CloudinaryTransformable.js\";\nimport { VideoTransformation } from \"../transformation/VideoTransformation.js\";\n/**\n * @desc Cloudinary video asset, with video-related transformations\n * @summary SDK\n * @memberOf SDK\n */\nclass CloudinaryVideo extends CloudinaryTransformable {\n constructor(publicID, cloudConfig, urlConfig) {\n /* istanbul ignore next */\n super(publicID, cloudConfig, urlConfig, new VideoTransformation());\n this.assetType = 'video';\n }\n /**\n * @desc A proxy to {@link SDK.Transformation| Transformation} - Calls the same method contained in this.transformation\n * @param {Actions.Transcode} action\n * @return {this}\n */\n transcode(action) {\n this.transformation.transcode(action);\n return this;\n }\n /**\n * @desc A proxy to {@link SDK.Transformation| Transformation} - Calls the same method contained in this.transformation\n * @param {Actions.VideoEdit} action\n * @return {this}\n */\n videoEdit(action) {\n this.transformation.videoEdit(action);\n return this;\n }\n}\nexport { CloudinaryVideo };\n","import { CloudinaryImage } from \"../assets/CloudinaryImage.js\";\nimport { CloudinaryVideo } from \"../assets/CloudinaryVideo.js\";\nclass Cloudinary {\n constructor(cloudinaryConfig) {\n if (cloudinaryConfig) {\n this.cloudinaryConfig = cloudinaryConfig;\n }\n }\n image(publicID) {\n return new CloudinaryImage(publicID, this.cloudinaryConfig.cloud, this.cloudinaryConfig.url);\n }\n video(publicID) {\n return new CloudinaryVideo(publicID, this.cloudinaryConfig.cloud, this.cloudinaryConfig.url);\n }\n setConfig(cloudinaryConfig) {\n this.cloudinaryConfig = cloudinaryConfig;\n return this;\n }\n getConfig() {\n return this.cloudinaryConfig;\n }\n extendConfig() {\n // Future implementation\n }\n}\nexport { Cloudinary };\n"],"names":["DeliveryQualityAction","DeliveryAction","constructor","qualityValue","super","toString","chromaSubSampling","type","this","_actionModel","qualityWithSubSampling","QualifierValue","level","setDelimiter","addQualifier","Qualifier","quantization","val","qualityWithQuantization","static","actionModel","result","chromaValue","toUpperCase","DeliveryColorSpaceFromICCAction","Action","publicId","actionType","qualifierValue","DeliveryColorSpaceAction","mode","ColorSpace","DeliveryDPRAction","dprValue","dprAsFloat","toFloatAsString","dpr","format","DeliveryFormatAction","quality","qualityType","deliveryKey","deliveryType","modelProperty","deliveryTypeValue","getValue","ProgressiveQualifier","FlagQualifier","lossy","addFlag","progressive","getFlagValue","preserveTransparency","formatType","NamedRegion","regionType","RectangleRegion","x","y","width","height","BlurAction","strength","_strength","region","blurRegion","RegionType","_region","prepareQualifiers","str","qualifiers","forEach","q","faces","custom","AccelerationEffectAction","rate","_rate","SimpleEffectAction","effectType","qualifierEffect","createEffectQualifier","CartoonifyEffect","effectName","cartoonifyStrength","lineStrength","blackwhite","blackAndWhite","colorReduction","colorReductionLevel","EffectOutline","_mode","_width","blurLevel","lvl","_blurLevel","color","prepareColor","VectorizeEffectAction","numOfColors","num","_numOfColors","detailsLevel","detailLevel","_detailsLevel","despeckleLevel","_despeckleLevel","cornersLevel","_cornersLevel","paths","_paths","SimulateColorBlindEffectAction","setQualifier","strToAppend","condition","cond","AssistColorBlindEffectAction","xray","stripesStrength","GradientFadeEffectAction","arguments","_type","horizontalStartPoint","verticalStartPoint","FadeOutEffectAction","duration","length","undefined","ShadowEffectAction","offsetX","offsetY","StyleTransfer","imageSource","effectStrength","preserveColor","bool","preserve","PRES","STRENGTH","styleEffect","sourceOpenString","getOpenSourceString","imgTx","getTransformation","filter","a","join","Pixelate","squareSize","_squareSize","pixelateRegion","FadeInEffectAction","RemoveBackgroundAction","overwriteQualifier","value","_screen","_colorToRemove","replace","screen","useScreen","colorToRemove","ThemeEffect","photosensitivity","_photosensitivity","sensitivity","BackgroundRemoval","fineEdges","_fineEdges","hints","values","Array","isArray","_hints","params","push","DropShadow","azimuth","_azimuth","elevation","_elevation","spread","_spread","paramNames","paramString","map","index","Boolean","GenerativeRemove","_prompts","_regions","_detectMultiple","_removeShadow","prompt","prompts","regions","toJson","detectMultiple","removeShadow","addValue","preparePromptValue","prepareRegionValue","singleRegion","regionList","GenerativeReplace","_preserveGeometry","from","_from","to","_to","preserveGeometry","GenerativeRecolor","multiple","bind","_toColor","toColor","formattedColor","match","substr","grayscale","AspectRatioQualifierValue","ResizeSimpleAction","cropType","cropWidth","cropHeight","dimensions","aspectRatio","ratio","relative","regionRelative","getGravityValue","gravity","createIAutoFocusObject","split","object","avoid","weight","createAutoGravityModel","gravityQualifier","AutoGravity","startsWith","v","gravityType","autoFocus","AutoFocus","focusOn","_weight","shouldAvoid","obj","shouldAddWeight","getName","name","getWeight","w","CompassQualifier","createAutoFocusFromModel","autoGravityObjectModel","FocusOnValue","createAutoGravityFromModel","gravityModel","ResizeAdvancedAction","gravityValue","includes","isCompassGravity","compass","createCompassGravityModel","isOcrGravity","isIAutoGravityString","isAutoGravity","hasAutoGravity","focusOnObjects","slice","autoFocusObjects","autoGravityInstance","fallbackGravity","createFocusOnGravityModel","focusOnValues","g","FocusOnGravity","createFocusOnGravity","createGravityModel","fromJson","apply","isCompassGravityModel","CompassGravity","isOcrGravityModel","isAutoGravityModel","autoGravity","createFocusOnGravityFromModel","BackgroundQualifier","backgroundValue","ThumbResizeAction","zoom","z","ResizeCropAction","ResizeFillAction","ResizeLimitFillAction","crop","fill","fit","limitFill","thumbnail","actionToJson","_a","_b","_c","actionModelIsNotEmpty","Object","keys","sourceTransformationError","source","transformation","error","Error","ActionModel","Map","flags","delimiter","actionTag","getActionTag","setActionTag","tag","array","entries","flag","sort","mapToSortedArray","qualifier","key","toLowerCase","set","addValueToQualifier","qualifierKey","get","objectFlip","ACTION_TYPE_TO_CROP_MODE_MAP","limitFit","minimumFit","limitPad","minimumPad","ACTION_TYPE_TO_EFFECT_MODE_MAP","redEye","advancedRedEye","oilPaint","unsharpMask","makeTransparent","generativeRestore","ACTION_TYPE_TO_QUALITY_MODE_MAP","autoBest","autoEco","autoGood","autoLow","jpegminiHigh","jpegminiMedium","jpegminiBest","CHROMA_VALUE_TO_CHROMA_MODEL_ENUM","COLOR_SPACE_MODEL_MODE_TO_COLOR_SPACE_MODE_MAP","CHROMA_MODEL_ENUM_TO_CHROMA_VALUE","COLOR_SPACE_MODE_TO_COLOR_SPACE_MODEL_MODE_MAP","CROP_MODE_TO_ACTION_TYPE_MAP","DELIVERY_MODE_TO_ACTION_TYPE_MAP","colorSpace","density","defaultImage","EFFECT_MODE_TO_ACTION_TYPE_MAP","fullHd","fullHdWifi","fullHdLean","hdLean","qualifierToJson","_qualifierModel","QualifierModel","hasValue","concat","returnValue","isNaN","parseFloat","indexOf","UnsupportedError","message","createUnsupportedError","ignoreInitialAspectRatio","flagType","flagValue","face","ocr","auto","FormatQualifier","XYCenterGravity","GravityQualifier","args","res","AutoFocusObjects","dir","FocusOnObjects","BackgroundColor","RawAction","raw","Transformation","actions","addAction","action","actionToAdd","addTransformation","tx","animated","animatedAction","border","borderAction","reshape","reshapeAction","resize","resizeAction","roundCorners","roundCornersAction","overlay","overlayAction","underlay","underlayAction","setLayerType","addVariable","variableAction","conditional","conditionAction","effect","effectAction","adjust","rotate","rotateAction","namedTransformation","delivery","deliveryAction","backgroundColor","psdTools","extract","flagQualifier","flagToAdd","customFunction","transcode","videoEdit","json","ImageTransformation","filterOutNonSupportedKeys","userProvidedConfig","validKeys","create","console","warn","ALLOWED_URL_CONFIG","URLConfig","userURLConfig","urlConfig","assign","secure","extend","setCname","cname","setSecureDistribution","secureDistribution","setPrivateCdn","privateCdn","setSignUrl","signUrl","setLongUrlSignature","longUrlSignature","setShorten","shorten","setUseRootPath","useRootPath","setSecure","setForceVersion","forceVersion","stringPad","_targetLength","_padString","targetLength","padString","String","string","_times","times","repeatedString","repeatStringNumTimes","base64Map","encodeVersion","semVer","strResult","paddedStringLength","paddedReversedSemver","reverse","segment","asNumber","reverseVersion","paddedBinary","parseInt","bitString","getNodeVersion","failedVersion","window","process","versions","node","e","char","SEO_TYPES","CloudinaryFile","publicID","cloudConfig","setPublicID","setCloudConfig","setURLConfig","cloudName","apiKey","apiSecret","authToken","setDeliveryType","newType","setSuffix","newSuffix","suffix","setSignature","signature","setVersion","newVersion","version","setAssetType","assetType","sign","toURL","overwriteOptions","createCloudinaryURL","trackedAnalytics","validateAssetForURLCreation","suffixContainsDot","suffixContainsSlash","getResourceType","handleAssetType","handleDeliveryType","hasSuffix","regularSEOType","shortSEOType","getSignature","prefix","privateCDN","getUrlPrefix","transformationString","shouldForceVersion","publicIDContainsVersion","isUrl","isFileName","getUrlVersion","url","safeURL","encodeURI","analytics","_trackedAnalytics","analyticsOptions","options","sdkSemver","techVersion","sdkCode","feature","accessibility","lazyload","responsive","placeholder","getAnalyticsOptions","defaults","ensureShapeOfTrackedProperties","twoPartVersion","semVerStr","parts","removePatchFromSemver","encodedSDKVersion","encodedTechVersion","featureCode","getSDKAnalyticsSignature","CloudinaryTransformable","conditionalAction","CloudinaryImage","VideoTransformation","CloudinaryVideo","Cloudinary","cloudinaryConfig","image","cloud","video","setConfig","getConfig","extendConfig"],"sourceRoot":""}