{"version":3,"sources":["webpack:///./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/progressive.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/actions/delivery/DeliveryFormatAction.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/flag.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/gravity/xyCenterGravity/XYCenterGravity.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/gravity.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/actions/delivery/DeliveryAction.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/internal/utils/unsupportedError.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/internal/utils/prepareColor.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/format/FormatQualifier.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/internal/utils/toFloatAsString.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/flag/FlagQualifier.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/gravity/autoGravity/AutoGravity.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/gravity/compassGravity/CompassGravity.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/gravity/focusOnGravity/FocusOnGravity.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/focusOn.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/internal/models/qualifierToJson.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/internal/qualifier/Qualifier.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/internal/models/QualifierModel.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/aspectRatio/AspectRatioQualifierValue.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/actions/resize/ResizeSimpleAction.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/internal/models/createGravityModel.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/autoFocus.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/gravity/qualifiers/compass/CompassQualifier.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/internal/models/createGravityFromModel.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/actions/resize/ResizeAdvancedAction.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/background/shared/base/BackgroundQualifier.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/actions/resize/ResizeCropAction.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/actions/resize/ResizeFillAction.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/actions/resize/ResizeLimitFillAction.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/actions/resize.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/actions/delivery/DeliveryQualityAction.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/actions/delivery/DeliveryColorSpaceFromICCAction.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/actions/delivery/DeliveryColorSpaceAction.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/actions/delivery/DeliveryDPRAction.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/actions/delivery.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/gravity/qualifiers/focusOn/FocusOnValue.js","webpack:///./node_modules/@cloudinary/url-gen/sdkAnalytics/stringPad.js","webpack:///./node_modules/@cloudinary/url-gen/sdkAnalytics/base64Map.js","webpack:///./node_modules/@cloudinary/url-gen/sdkAnalytics/encodeVersion.js","webpack:///./node_modules/@cloudinary/url-gen/sdkAnalytics/reverseVersion.js","webpack:///./node_modules/@cloudinary/url-gen/sdkAnalytics/getSDKAnalyticsSignature.js","webpack:///./node_modules/@cloudinary/url-gen/internal/utils/packageVersion.js","webpack:///./node_modules/@cloudinary/url-gen/sdkAnalytics/getAnalyticsOptions.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/internal/qualifier/QualifierValue.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/quality.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/format.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/actions/background/actions/BackgroundColor.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/internal/RawAction.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/transformation/Transformation.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/internal/models/IErrorObject.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/transformation/ImageTransformation.js","webpack:///./node_modules/@cloudinary/url-gen/config/BaseConfig.js","webpack:///./node_modules/@cloudinary/url-gen/internal/internalConstants.js","webpack:///./node_modules/@cloudinary/url-gen/config/URLConfig.js","webpack:///./node_modules/@cloudinary/url-gen/assets/CloudinaryFile.js","webpack:///./node_modules/@cloudinary/url-gen/assets/CloudinaryTransformable.js","webpack:///./node_modules/@cloudinary/url-gen/internal/url/cloudinaryURL.js","webpack:///./node_modules/@cloudinary/url-gen/internal/url/urlUtils/publicIDContainsVersion.js","webpack:///./node_modules/@cloudinary/url-gen/internal/url/urlUtils/isUrl.js","webpack:///./node_modules/@cloudinary/url-gen/internal/url/urlUtils/isFileName.js","webpack:///./node_modules/@cloudinary/url-gen/assets/CloudinaryImage.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/transformation/VideoTransformation.js","webpack:///./node_modules/@cloudinary/url-gen/assets/CloudinaryVideo.js","webpack:///./node_modules/@cloudinary/url-gen/instance/Cloudinary.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/internal/models/actionToJson.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/internal/Action.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/internal/models/ActionModel.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/internal/utils/dataStructureUtils.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/internal/utils/objectFlip.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/internal/internalConstants.js","webpack:///./node_modules/@cloudinary/transformation-builder-sdk/qualifiers/gravity/GravityQualifier.js"],"names":["FlagQualifier","mode","super","DeliveryAction","deliveryKey","deliveryType","this","_actionModel","lossy","addFlag","progressive","getFlagValue","preserveTransparency","actionModel","formatType","result","ignoreInitialAspectRatio","regionRelative","relative","GravityQualifier","focusOn","args","res","FocusOnGravity","autoGravity","AutoGravity","modelProperty","deliveryTypeValue","getValue","actionType","addQualifier","UnsupportedError","Error","message","createUnsupportedError","prepareColor","color","match","substr","FormatQualifier","val","toFloatAsString","value","returnValue","toString","length","isNaN","parseFloat","indexOf","flagType","flagValue","qualifierValue","setDelimiter","replace","AutoFocusObjects","addValue","CompassGravity","dir","FocusOnObjects","face","ocr","qualifierToJson","_qualifierModel","error","constructor","name","apply","key","delimiter","QualifierValue","Action","cropType","cropWidth","cropHeight","dimensions","Qualifier","width","height","x","ratio","aspectRatio","getGravityValue","gravity","createIAutoFocusObject","values","split","object","avoid","weight","createAutoGravityModel","gravityQualifier","startsWith","filter","v","gravityType","autoFocus","map","createGravityModel","gravityValue","includes","isCompassGravity","compass","createCompassGravityModel","isOcrGravity","isIAutoGravityString","isAutoGravity","hasAutoGravity","focusOnObjects","slice","autoFocusObjects","autoGravityInstance","fallbackGravity","createFocusOnGravityModel","focusOnValues","g","FocusOnValue","createFocusOnGravity","_weight","shouldAvoid","obj","shouldAddWeight","getName","getWeight","w","createAutoFocusFromModel","autoGravityObjectModel","createAutoGravityFromModel","gravityModel","createGravityFromModel","isCompassGravityModel","isOcrGravityModel","isAutoGravityModel","str","createFocusOnGravityFromModel","fromJson","y","z","zoom","crop","fill","limitFill","qualityValue","type","chromaSubSampling","qualityWithSubSampling","level","quantization","qualityWithQuantization","chromaValue","toUpperCase","dprValue","dprAsFloat","dpr","format","DeliveryFormatAction","quality","qualityType","stringPad","_targetLength","_padString","targetLength","padString","String","string","_times","times","repeatedString","repeatStringNumTimes","base64Map","encodeVersion","semVer","strResult","paddedStringLength","paddedReversedSemver","reverse","segment","asNumber","join","reverseVersion","paddedBinary","parseInt","forEach","bitString","char","getNodeVersion","window","process","versions","node","e","getSDKAnalyticsSignature","_trackedAnalytics","trackedAnalytics","defaults","techVersion","sdkCode","sdkSemver","responsive","placeholder","lazyload","accessibility","Object","assign","ensureShapeOfTrackedProperties","analyticsOptions","twoPartVersion","semVerStr","parts","removePatchFromSemver","encodedSDKVersion","encodedTechVersion","featureCode","feature","SDKCode","packageVersion","getAnalyticsOptions","options","hasValue","Array","isArray","concat","push","auto","raw","actions","action","actionToAdd","tx","a","animatedAction","addAction","borderAction","reshapeAction","resizeAction","roundCornersAction","overlayAction","underlayAction","setLayerType","variableAction","conditionAction","effectAction","rotateAction","namedTransformation","deliveryAction","flagQualifier","flagToAdd","customFunction","json","toJson","userProvidedConfig","validKeys","create","keys","console","warn","ALLOWED_URL_CONFIG","userURLConfig","urlConfig","filterOutNonSupportedKeys","secure","cname","secureDistribution","privateCdn","signUrl","longUrlSignature","shorten","useRootPath","forceVersion","SEO_TYPES","publicID","cloudConfig","setPublicID","setCloudConfig","setURLConfig","cloudName","apiKey","apiSecret","authToken","newType","newSuffix","suffix","signature","newVersion","version","assetType","overwriteOptions","createCloudinaryURL","suffixContainsDot","suffixContainsSlash","handleAssetType","handleDeliveryType","hasSuffix","regularSEOType","shortSEOType","transformation","validateAssetForURLCreation","prefix","privateCDN","getUrlPrefix","transformationString","shouldForceVersion","publicIDContainsVersion","isUrl","isFileName","getUrlVersion","url","getResourceType","getSignature","safeURL","encodeURI","analytics","animated","border","reshape","resize","roundCorners","overlay","addVariable","conditionalAction","conditional","effect","adjust","rotate","delivery","backgroundColor","psdTools","extract","addTransformation","underlay","transcode","videoEdit","cloudinaryConfig","cloud","actionToJson","arguments","qualifiers","Map","flags","actionTag","tag","prepareQualifiers","array","from","entries","flag","sort","mapToSortedArray","qualifier","toLowerCase","set","qualifierKey","get","objectFlip","ACTION_TYPE_TO_CROP_MODE_MAP","limitFit","minimumFit","thumbnail","limitPad","minimumPad","ACTION_TYPE_TO_QUALITY_MODE_MAP","autoBest","autoEco","autoGood","autoLow","jpegminiHigh","jpegminiMedium","jpegminiBest","CHROMA_VALUE_TO_CHROMA_MODEL_ENUM","444","420","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","redEye","advancedRedEye","oilPaint","unsharpMask","makeTransparent","fullHd","fullHdWifi","fullHdLean","hdLean"],"mappings":"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","file":"defaultVendors~ApartmentCards~AreaMap~ArticleCardList~ArticleContent~ArticleListing~AuthorSummary~Aw~61ed3215-308ea28189a76dfe1d14.js","sourcesContent":["/**\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","/**\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 { 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 { 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","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 * 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","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","/**\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","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 { 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 { 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 { 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 { 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","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 \"../../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}\nexport { AutoFocus };\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 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 { 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 { 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 * @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","const packageVersion = '1.8.6';\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","/**\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","/**\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 * @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 { 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 { 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","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 { 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 { 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","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","import { createUnsupportedError } from \"../utils/unsupportedError.js\";\n/**\n * Returns the action's model\n */\nexport function actionToJson() {\n const actionModelIsNotEmpty = this._actionModel && Object.keys(this._actionModel).length;\n if (actionModelIsNotEmpty) {\n return this._actionModel;\n }\n return { error: createUnsupportedError(`unsupported action ${this.constructor.name}`) };\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","import { actionToJson } from \"./actionToJson.js\";\nexport class ActionModel {\n constructor() {\n this._actionModel = {};\n }\n toJson() {\n return actionToJson.apply(this);\n }\n}\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};\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 { 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"],"sourceRoot":""}