UNPKG

filestack-js

Version:

Official JavaScript library for Filestack

1,159 lines (1,158 loc) 104 kB
"use strict"; /* * Copyright (c) 2018 by Filestack * Some rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", { value: true }); exports.Filelink = exports.EnhancePreset = exports.VideoAccessMode = exports.VideoAccess = exports.Locations = exports.URLScreenshotOrientation = exports.URLScreenshotMode = exports.URLScreenshotAgent = exports.VideoTypes = exports.AudioTypes = exports.SmartCropMode = exports.ImageWatermarkPosition = exports.CropfacesType = exports.ColorspaceType = exports.StyleType = exports.NoiseType = exports.ShapeType = exports.BlurMode = exports.FitOptions = exports.Align = void 0; var tslib_1 = require("tslib"); var config_1 = require("./../config"); var transforms_schema_1 = require("./../schema/transforms.schema"); var validator_1 = require("./../schema/validator"); var utils_1 = require("./utils"); var filestack_error_1 = require("./../filestack_error"); var debug_1 = tslib_1.__importDefault(require("debug")); var debug = (0, debug_1.default)('fs:filelink'); var Align; (function (Align) { Align["left"] = "left"; Align["right"] = "right"; Align["center"] = "center"; Align["bottom"] = "bottom"; Align["top"] = "top"; Align["faces"] = "faces"; Align["middle"] = "middle"; })(Align = exports.Align || (exports.Align = {})); /** * Fit enum */ var FitOptions; (function (FitOptions) { FitOptions["clip"] = "clip"; FitOptions["crop"] = "crop"; FitOptions["scale"] = "scale"; FitOptions["max"] = "max"; })(FitOptions = exports.FitOptions || (exports.FitOptions = {})); /** * Blur enum */ var BlurMode; (function (BlurMode) { BlurMode["linear"] = "linear"; BlurMode["gaussian"] = "gaussian"; })(BlurMode = exports.BlurMode || (exports.BlurMode = {})); /** * Shapes enum */ var ShapeType; (function (ShapeType) { ShapeType["oval"] = "oval"; ShapeType["rect"] = "rect"; })(ShapeType = exports.ShapeType || (exports.ShapeType = {})); /** * Noise type enum */ var NoiseType; (function (NoiseType) { NoiseType["none"] = "none"; NoiseType["low"] = "low"; NoiseType["medium"] = "medium"; NoiseType["high"] = "high"; })(NoiseType = exports.NoiseType || (exports.NoiseType = {})); /** * Style type enum */ var StyleType; (function (StyleType) { StyleType["artwork"] = "artwork"; StyleType["photo"] = "photo"; })(StyleType = exports.StyleType || (exports.StyleType = {})); /** * Color space enum */ var ColorspaceType; (function (ColorspaceType) { ColorspaceType["RGB"] = "RGB"; ColorspaceType["CMYK"] = "CMYK"; ColorspaceType["Input"] = "Input"; })(ColorspaceType = exports.ColorspaceType || (exports.ColorspaceType = {})); /** * Crop faces options enum */ var CropfacesType; (function (CropfacesType) { CropfacesType["thumb"] = "thumb"; CropfacesType["crop"] = "crop"; CropfacesType["fill"] = "fill"; })(CropfacesType = exports.CropfacesType || (exports.CropfacesType = {})); /** * Watermark postion options enum */ var ImageWatermarkPosition; (function (ImageWatermarkPosition) { ImageWatermarkPosition["top"] = "top"; ImageWatermarkPosition["middle"] = "middle"; ImageWatermarkPosition["bottom"] = "bottom"; ImageWatermarkPosition["left"] = "left"; ImageWatermarkPosition["center"] = "center"; ImageWatermarkPosition["right"] = "right"; })(ImageWatermarkPosition = exports.ImageWatermarkPosition || (exports.ImageWatermarkPosition = {})); /** * SmartCrop options enum */ var SmartCropMode; (function (SmartCropMode) { SmartCropMode["face"] = "face"; SmartCropMode["auto"] = "auto"; })(SmartCropMode = exports.SmartCropMode || (exports.SmartCropMode = {})); /** * Convert to format */ var AudioTypes; (function (AudioTypes) { AudioTypes["libmp3lame"] = "libmp3lame"; AudioTypes["libvorbis"] = "libvorbis"; AudioTypes["libfdk_aac"] = "libfdk_aac"; AudioTypes["dib_ac3"] = "dib_ac3"; AudioTypes["pcm_s16le"] = "pcm_s16le"; AudioTypes["mp2"] = "mp2"; AudioTypes["ac3"] = "ac3"; AudioTypes["eac3"] = "eac3"; })(AudioTypes = exports.AudioTypes || (exports.AudioTypes = {})); /** * Convert to format */ var VideoTypes; (function (VideoTypes) { VideoTypes["h264"] = "h264"; VideoTypes["h264_hi"] = "h264.hi"; VideoTypes["webm"] = "webm"; VideoTypes["webm-hi"] = "webm.hi"; VideoTypes["ogg"] = "ogg"; VideoTypes["ogg-hi"] = "ogg.hi"; VideoTypes["hls-variant"] = "hls.variant"; VideoTypes["mp3"] = "mp3"; VideoTypes["oga"] = "oga"; VideoTypes["m4a"] = "m4a"; VideoTypes["aac"] = "aac"; VideoTypes["hls"] = "hls.variant.audio"; })(VideoTypes = exports.VideoTypes || (exports.VideoTypes = {})); var URLScreenshotAgent; (function (URLScreenshotAgent) { URLScreenshotAgent["desktop"] = "desktop"; URLScreenshotAgent["mobile"] = "mobile"; })(URLScreenshotAgent = exports.URLScreenshotAgent || (exports.URLScreenshotAgent = {})); var URLScreenshotMode; (function (URLScreenshotMode) { URLScreenshotMode["all"] = "all"; URLScreenshotMode["window"] = "window"; })(URLScreenshotMode = exports.URLScreenshotMode || (exports.URLScreenshotMode = {})); var URLScreenshotOrientation; (function (URLScreenshotOrientation) { URLScreenshotOrientation["portrait"] = "portrait"; URLScreenshotOrientation["landscape"] = "landscape"; })(URLScreenshotOrientation = exports.URLScreenshotOrientation || (exports.URLScreenshotOrientation = {})); /** * Video storage location */ var Locations; (function (Locations) { Locations["s3"] = "s3"; Locations["azure"] = "azure"; Locations["gcs"] = "gcs"; Locations["rackspace"] = "rackspace"; Locations["dropbox"] = "dropbox"; })(Locations = exports.Locations || (exports.Locations = {})); var VideoAccess; (function (VideoAccess) { VideoAccess["private"] = "private"; VideoAccess["public"] = "public"; })(VideoAccess = exports.VideoAccess || (exports.VideoAccess = {})); var VideoAccessMode; (function (VideoAccessMode) { VideoAccessMode["preserve"] = "preserve"; VideoAccessMode["constrain"] = "constrain"; VideoAccessMode["letterbox"] = "letterbox"; VideoAccessMode["pad"] = "pad"; VideoAccessMode["crop"] = "crop"; })(VideoAccessMode = exports.VideoAccessMode || (exports.VideoAccessMode = {})); var EnhancePreset; (function (EnhancePreset) { EnhancePreset["auto"] = "auto"; EnhancePreset["vivid"] = "vivid"; EnhancePreset["beautify"] = "beautify"; EnhancePreset["beautifyPlus"] = "beautify_plus"; EnhancePreset["fixDark"] = "fix_dark"; EnhancePreset["fixNoise"] = "fix_noise"; EnhancePreset["fixTint"] = "fix_tint"; EnhancePreset["outdor"] = "outdoor"; EnhancePreset["fireworks"] = "fireworks"; })(EnhancePreset = exports.EnhancePreset || (exports.EnhancePreset = {})); var handleRegexp = /^[\w\-]{20}|wf:\/\/[\w\-\/]{106}$/; /** * Class for handling filelinks. For now its supports all filestack transforms. * It outputs transform url or array of transforms * @example * const link = new Filelink('handle or externalUrl', 'apikey'); * link.flip().flop().store(); * * console.log(link.toString()); * // enable base64 support * link.setBase64(true) * * console.log(link.toString()); * * @export * @class Filelink */ var Filelink = /** @class */ (function () { /** * Class for generating tranformation urls * @param {(string | string[])} source - handle or multiple handles (i.e. for collage) * @param {string} [apikey] - your apikey - required for all external sources * * @memberof Filelink */ function Filelink(source, apikey) { /** * Applied transforms array * * @private * @memberof Filelink */ this.transforms = []; /** * Is base64 support is enabled * * @private * @type {boolean} * @memberof Filelink */ this.b64 = false; /** * should use a validator to check params of every task * @private * @type {boolean} * @memberof Filelink */ this.useValidator = true; /** * Converts array of objects to object * * @private * @example [{name: 'resize', params: {height: 125}}] => {resize: {height: 125}} * @param arr - any array */ this.arrayToObject = function (array, nameKey, dataKey) { if (array === void 0) { array = []; } return array.reduce(function (obj, item) { obj[item[nameKey]] = item[dataKey]; return obj; }, {}); }; this.apikey = apikey; this.setSource(source); } /** * Enable new base64 link support to avoid problems with special chars in link * * @param {boolean} flag * @returns * @memberof Filelink */ Filelink.prototype.setBase64 = function (flag) { this.b64 = flag; return this; }; /** * Switch the useValidator flag * * @param {boolean} flag * @returns * @memberof Filelink */ Filelink.prototype.setUseValidator = function (flag) { this.useValidator = flag; return this; }; /** * Set cname for transformation link * * @param {string} cname * @returns * @memberof Filelink */ Filelink.prototype.setCname = function (cname) { this.cname = cname; return this; }; /** * Set custom domain. Used for test purpose. It will be removed when after client.transform * * @param {string} domain * @returns * @memberof Filelink */ Filelink.prototype.setCustomDomain = function (domain) { this.customDomain = domain; return this; }; Filelink.prototype.setSource = function (source) { this.source = source; var isExternal = this.isSourceExternal(); debug("Source ".concat(source, " - isExternal? ").concat(isExternal)); if (isExternal && !this.apikey) { throw new filestack_error_1.FilestackError('External sources requires apikey to handle transforms'); } if (!isExternal && typeof this.source === 'string' && !handleRegexp.test(this.source) && this.source.indexOf('filestackcontent') === -1) { throw new filestack_error_1.FilestackError('Invalid filestack source provided'); } }; /** * Returns JSONSchema form transformations params * * @returns * @memberof Filelink */ Filelink.prototype.getValidationSchema = function () { return transforms_schema_1.TransformSchema; }; /** * Returns transformations in JSON format * * @returns * @memberof Filelink */ Filelink.prototype.getTransformations = function () { if (this.useValidator) { this.validateTasks(this.transforms); } return this.transforms; }; /** * Returns transform url * * @returns * @memberof Filelink */ Filelink.prototype.toString = function () { var returnUrl = []; returnUrl.push(this.getCdnHost()); if (this.useValidator) { this.validateTasks(this.transforms); } if (this.apikey) { returnUrl.push(this.apikey); } var transformsString = this.generateTransformString(); var source = this.source; if (this.b64) { if (this.transforms.length > 0) { transformsString = "b64/".concat((0, utils_1.b64)(JSON.stringify(this.transforms), true)); } if (Array.isArray(source)) { source = this.arrayToString(source); } source = "b64://".concat((0, utils_1.b64)(source, true)); } else { if (Array.isArray(source)) { source = this.arrayToString(source); } else { source = this.escapeValue(source); } } if (transformsString.length) { returnUrl.push(transformsString); } returnUrl.push(source); return returnUrl.join('/'); }; /** * Add task and validate * * @param {string} name * @param {*} [params] * @returns * @memberof Filelink */ Filelink.prototype.addTask = function (name, params) { (0, debug_1.default)("Add task ".concat(name, " with params %O"), params); if (name !== 'cache' && typeof params === 'boolean') { if (!params) { return this; } else { params = undefined; } } else if (typeof params === 'object' && !Object.keys(params).length) { params = undefined; } this.transforms.push({ name: name, params: params }); return this; }; /** * Returns all tasks added for transformation * * @memberof Filelink */ Filelink.prototype.getTasks = function () { return this.transforms; }; /** * Cleanup transformations on filelink * * @returns * @memberof Filelink */ Filelink.prototype.reset = function () { this.transforms = []; return this; }; /** * Transformations part */ /** * Add autoimage transformation * * @see https://www.filestack.com/docs/api/processing/#auto-image-conversion * @returns this * @memberof Filelink */ Filelink.prototype.autoImage = function () { return this.addTask('auto_image', true); }; /** * Adds flip transformation * * @see https://www.filestack.com/docs/api/processing/#flip * @returns this * @memberof Filelink */ Filelink.prototype.flip = function () { return this.addTask('flip', true); }; /** * Adds flop transformation * * @see https://www.filestack.com/docs/api/processing/#flop * @returns this * @memberof Filelink */ Filelink.prototype.flop = function () { return this.addTask('flop', true); }; /** * Adds imagesize transformation * * @see https://www.filestack.com/docs/api/processing/#image-size * @returns this * @memberof Filelink */ Filelink.prototype.imagesize = function () { return this.addTask('imagesize', true); }; /** * Adds noMetadata transformation * * @see https://www.filestack.com/docs/api/processing/#strip-metadata * @returns this * @memberof Filelink */ Filelink.prototype.noMetadata = function () { return this.addTask('no_metadata', true); }; /** * Adds Progressive JPEG transformation * * @see https://www.filestack.com/docs/api/processing/#progressive-jpeg * @returns this * @memberof Filelink */ Filelink.prototype.pjpg = function (params) { return this.addTask('pjpg', params); }; /** * Adds imagesize transformation * * @see https://www.filestack.com/docs/api/processing/#smart-crop * @returns this * @memberof Filelink */ Filelink.prototype.smartCrop = function (params) { return this.addTask('smart_crop', params); }; /** * Adds watermart transformation * * @see https://www.filestack.com/docs/api/processing/#watermark * @returns this * @memberof Filelink */ Filelink.prototype.watermark = function (params) { return this.addTask('watermark', params); }; /** * Adds enhance transformation * * @see https://www.filestack.com/docs/api/processing/#enhance * @returns this * @memberof Filelink */ Filelink.prototype.enhance = function (params) { return this.addTask('enhance', params || true); }; /** * Add security to link * * @see https://www.filestack.com/docs/api/processing/#redeye * @returns * @memberof Filelink */ Filelink.prototype.redeye = function () { return this.addTask('redeye', true); }; /** * Add monochrome transformation * * @see https://www.filestack.com/docs/api/processing/#monochrome * @returns this * @memberof Filelink */ Filelink.prototype.monochrome = function () { return this.addTask('monochrome', true); }; /** * Add compress transformation * * @see https://www.filestack.com/docs/api/processing/#compress * @returns this * @memberof Filelink */ Filelink.prototype.compress = function (params) { return this.addTask('compress', params || true); }; /** * Adds negative transformation * * @see https://www.filestack.com/docs/api/processing/#negative * @returns this * @memberof Filelink */ Filelink.prototype.negative = function () { return this.addTask('negative', true); }; /** * Adds tags transformation * * @see https://www.filestack.com/docs/api/processing/#tags * @returns this * @memberof Filelink */ Filelink.prototype.tags = function () { return this.addTask('tags', true); }; /** * Adds sfw transformation * * @see https://www.filestack.com/docs/api/processing/#sfw * @returns this * @memberof Filelink */ Filelink.prototype.sfw = function () { return this.addTask('sfw', true); }; /** * Add animate transformation * * @see https://www.filestack.com/docs/api/processing/#animate-images-to-gif * @param params * @returns this * @memberof Filelink */ Filelink.prototype.animate = function (params) { return this.addTask('animate', params); }; /** * Adds store transformation * * @see https://www.filestack.com/docs/api/processing/#store * @param {(StoreParams | boolean)} params * @returns this * @memberof Filelink */ Filelink.prototype.store = function (params) { return this.addTask('store', params); }; /** * Adds cache transformation * * @see https://www.filestack.com/docs/api/processing/#cache * @param {(CacheParams | boolean)} params * @returns this * @memberof Filelink */ Filelink.prototype.cache = function (params) { return this.addTask('cache', params); }; /** * Adds resize transformation * * @see https://www.filestack.com/docs/api/processing/#resize * @param {ResizeParams} params * @returns this * @memberof Filelink */ Filelink.prototype.resize = function (params) { return this.addTask('resize', params); }; /** * Adds crop transformation * * @see https://www.filestack.com/docs/api/processing/#crop * @param {CropParams} params * @returns this * @memberof Filelink */ Filelink.prototype.crop = function (params) { return this.addTask('crop', params); }; /** * Adds rotate transformation * * @see https://www.filestack.com/docs/api/processing/#rotate * @param {RotateParams} params * @returns this * @memberof Filelink */ Filelink.prototype.rotate = function (params) { return this.addTask('rotate', params); }; /** * Adds detect_faces transformation * * @see https://www.filestack.com/docs/api/processing/#facial-detection * @param {(DetectFacesParams | boolean)} params * @returns this * @memberof Filelink */ Filelink.prototype.detectFaces = function (params) { return this.addTask('detect_faces', params); }; /** * Adds crop faces transformation * * @see https://www.filestack.com/docs/api/processing/#crop-faces * @param {CropFacesParams} params * @returns this * @memberof Filelink */ Filelink.prototype.cropFaces = function (params) { return this.addTask('crop_faces', params); }; /** * Adds pixelate faces transformation * * @see https://www.filestack.com/docs/api/processing/#pixelate-faces * @param {PixelateFacesParams} params * @returns this * @memberof Filelink */ Filelink.prototype.pixelateFaces = function (params) { return this.addTask('pixelate_faces', params); }; /** * Adds blur faces transformation * * @see https://www.filestack.com/docs/api/processing/#blur-faces * @param {BlurFacesParams} params * @returns this * @memberof Filelink */ Filelink.prototype.blurFaces = function (params) { return this.addTask('blur_faces', params); }; /** * Adds rounded corners transformation * * @see https://www.filestack.com/docs/api/processing/#rounded-corners * @param {(RoundedCornersParams | boolean)} params * @returns this * @memberof Filelink */ Filelink.prototype.roundedCorners = function (params) { return this.addTask('rounded_corners', params); }; /** * Adds polaroid transformation * * @see https://www.filestack.com/docs/api/processing/#polaroid * @param {(PolaroidParams | boolean)} params * @returns this * @memberof Filelink */ Filelink.prototype.polaroid = function (params) { return this.addTask('polaroid', params); }; /** * Adds vignette transformation * * @see https://www.filestack.com/docs/api/processing/#vignette * @param {(VignetteParams | boolean)} params * @returns this * @memberof Filelink */ Filelink.prototype.vignette = function (params) { return this.addTask('vignette', params); }; /** * Adds torn edges transformation * * @see https://www.filestack.com/docs/api/processing/#torn-edges * @param {(TornEdgesParams | boolean)} params * @returns this * @memberof Filelink */ Filelink.prototype.tornEdges = function (params) { return this.addTask('torn_edges', params); }; /** * Adds shadow transformation * * @see https://www.filestack.com/docs/api/processing/#shadow * @param {(ShadowParams | boolean)} params * @returns this * @memberof Filelink */ Filelink.prototype.shadow = function (params) { return this.addTask('shadow', params); }; /** * Adds circle transformation * * @see https://www.filestack.com/docs/api/processing/#circle * @param {(CircleParams | boolean)} params * @returns this * @memberof Filelink */ Filelink.prototype.circle = function (params) { return this.addTask('circle', params); }; /** * Adds border transformation * * @see https://www.filestack.com/docs/api/processing/#border * @param {(BorderParams | boolean)} params * @returns this * @memberof Filelink */ Filelink.prototype.border = function (params) { return this.addTask('border', params); }; /** * Adds sharpen transformation * * @see https://www.filestack.com/docs/api/processing/#sharpen * @param {(SharpenParams | boolean)} params * @returns this * @memberof Filelink */ Filelink.prototype.sharpen = function (params) { return this.addTask('sharpen', params); }; /** * Adds blur transformation * * @see https://www.filestack.com/docs/api/processing/#blur * @param {(BlurParams | boolean)} params * @returns this * @memberof Filelink */ Filelink.prototype.blur = function (params) { return this.addTask('blur', params); }; /** * Adds blackwhite transformation * * @see https://www.filestack.com/docs/api/processing/#blackwhite * @param {(BlackwhiteParams | boolean)} params * @returns this * @memberof Filelink */ Filelink.prototype.blackwhite = function (params) { return this.addTask('blackwhite', params); }; /** * Adds sepia transformation * * @see https://www.filestack.com/docs/api/processing/#sepia * @param {(SepiaParams | boolean)} params * @returns this * @memberof Filelink */ Filelink.prototype.sepia = function (params) { return this.addTask('sepia', params); }; /** * Adds pixelate transformation * * @see https://www.filestack.com/docs/api/processing/#pixelate * @param {(PixelateParams | boolean)} params * @returns this * @memberof Filelink */ Filelink.prototype.pixelate = function (params) { return this.addTask('pixelate', params); }; /** * Adds oilpaint transformation * * @see https://www.filestack.com/docs/api/processing/#oil-paint * @param {(OilPaintParams | boolean)} params * @returns this * @memberof Filelink */ Filelink.prototype.oilPaint = function (params) { return this.addTask('oil_paint', params); }; /** * Adds modulate transformation * * @see https://www.filestack.com/docs/api/processing/#modulate * @param {(ModulateParams | boolean)} params * @returns this * @memberof Filelink */ Filelink.prototype.modulate = function (params) { return this.addTask('modulate', params); }; /** * Adds partial pixelate transformation * * @see https://www.filestack.com/docs/api/processing/#partial-pixelate * @param {PartialPixelateParams} params * @returns this * @memberof Filelink */ Filelink.prototype.partialPixelate = function (params) { return this.addTask('partial_pixelate', params); }; /** * Adds partial blur transformation * * @see https://www.filestack.com/docs/api/processing/#partial-blur * @param {PartialBlurParams} params * @returns this * @memberof Filelink */ Filelink.prototype.partialBlur = function (params) { return this.addTask('partial_blur', params); }; /** * Adds collage transformation * * @see https://www.filestack.com/docs/api/processing/#collage * @param {CollageParams} params * @returns this * @memberof Filelink */ Filelink.prototype.collage = function (params) { return this.addTask('collage', params); }; /** * Adds upscale transformation * * @see https://www.filestack.com/docs/api/processing/#upscale * @param {(UpscaleParams | boolean)} params * @returns this * @memberof Filelink */ Filelink.prototype.upscale = function (params) { return this.addTask('upscale', params); }; /** * Adds ascii transformation * * @see https://www.filestack.com/docs/api/processing/#ascii * @param {(AsciiParams | boolean)} params * @returns this * @memberof Filelink */ Filelink.prototype.ascii = function (params) { return this.addTask('ascii', params); }; /** * Adds quality transformation * * @see https://www.filestack.com/docs/api/processing/#quality * @param {QualityParams} params * @returns this * @memberof Filelink */ Filelink.prototype.quality = function (params) { return this.addTask('quality', params); }; /** * Adds security transformation * * @see https://www.filestack.com/docs/api/processing/#security * @param {SecurityParams} params * @returns this * @memberof Filelink */ Filelink.prototype.security = function (params) { return this.addTask('security', params); }; /** * Adds output transformation * * @see https://www.filestack.com/docs/api/processing/#output * @param {OutputParams} params * @returns this * @memberof Filelink */ Filelink.prototype.output = function (params) { return this.addTask('output', params); }; /** * Adds video convert transformation * * @see https://www.filestack.com/docs/api/processing/#video-convert * @param {VideoConvertParams} params * @returns this * @memberof Filelink */ Filelink.prototype.videoConvert = function (params) { return this.addTask('video_convert', params); }; /** * Adds URLScreenshot transformation * * @see https://www.filestack.com/docs/api/processing/#urlscreenshot * @param {(URLScreenshotParams | boolean)} params * @returns this * @memberof Filelink */ Filelink.prototype.URLScreenshot = function (params) { return this.addTask('urlscreenshot', params); }; /** * Adds pdfinfo transformation * * @see https://www.filestack.com/docs/api/processing/#pdfinfo * @param {(PdfInfoParams | boolean)} params * @returns this * @memberof Filelink */ Filelink.prototype.PDFInfo = function (params) { return this.addTask('pdfinfo', params); }; /** * Adds pdfconvert transformation * * @see https://www.filestack.com/docs/api/processing/#pdfconvert * @param {(PdfConvertParams | boolean)} params * @returns this * @memberof Filelink */ Filelink.prototype.PDFConvert = function (params) { return this.addTask('pdfconvert', params); }; /** * Adds fallback transformation * * @see https://www.filestack.com/docs/api/processing/#fallback * @param {(FallbackParams)} params * @returns this * @memberof Filelink */ Filelink.prototype.fallback = function (params) { return this.addTask('fallback', params); }; /** * Add zip transformation which create a zip package on files * used on actual context * * @see https://www.filestack.com/docs/api/processing/#zip * @returns this * @memberof Filelink */ Filelink.prototype.zip = function () { return this.addTask('zip', true); }; /** * Add task which minify a css file * * @returns this * @memberof Filelink */ Filelink.prototype.minifyCss = function (params) { return this.addTask('minify_css', params); }; /** * Add task which minify a javascript file. * For better handling of 'targets' param, use with b64 flag enabled. * * @returns this * @memberof Filelink */ Filelink.prototype.minifyJs = function (params) { return this.addTask('minify_js', params); }; /** * Checks if source is external * * @private * @returns {boolean} * @memberof Filelink */ Filelink.prototype.isSourceExternal = function () { if (!this.source) { throw new filestack_error_1.FilestackError('Source not Set'); } var toTest = Array.isArray(this.source) ? this.source : [this.source]; for (var i in toTest) { /* istanbul ignore next */ if (!toTest.hasOwnProperty(i)) { continue; } if (toTest[i].indexOf('src:') === 0 || (toTest[i].indexOf('http') === 0 && toTest[i].indexOf('filestackcontent') === -1)) { return true; } } return false; }; /** * Validate every task against schema * * @private * @param {object[]} transformations - object which contain all transformations * @returns {void} * @memberof Filelink */ Filelink.prototype.validateTasks = function (transformations) { var res = Filelink.validator(this.arrayToObject(transformations, 'name', 'params')); if (res.errors.length) { throw new filestack_error_1.FilestackError("Params validation error", res.errors, filestack_error_1.FilestackErrorType.VALIDATION); } return; }; /** * Returns correct cdn url with cname support * * @private * @returns {string} * @memberof Filelink */ Filelink.prototype.getCdnHost = function () { var urls = Object.assign({}, config_1.config.urls); if (this.customDomain) { urls.cdnUrl = this.customDomain; } urls = (0, utils_1.resolveHost)(urls, this.cname); return urls.cdnUrl; }; /** * Returns applied transformations as string * * @private * @returns {string} * @memberof Filelink */ Filelink.prototype.generateTransformString = function () { var _this = this; var transforms = []; this.transforms.forEach(function (el) { transforms.push(_this.optionToString(el.name, el.params)); }); return transforms.join('/'); }; /** * Flatten transformation option to string * * @private * @example {resize:{width: 100,height: 200}} => resize=width:100,height:200 * @param key - option key * @param values - option params */ Filelink.prototype.optionToString = function (key, values) { var _this = this; var optionsString = []; if (typeof values === 'undefined') { return key; } // if we just want to enable feature if (typeof values === 'boolean') { if (!values && key === 'cache') { return 'cache=false'; } return key; } Object.keys(values).forEach(function (i) { if (Array.isArray(values[i])) { optionsString.push("".concat(i, ":").concat(_this.arrayToString(values[i]))); return; } optionsString.push("".concat(i, ":").concat(_this.escapeValue(values[i]))); }); return "".concat(key, "=").concat(optionsString.join(',')); }; /** * Escape params values * * @private * @param {string} value * @returns {string} * @memberof Filelink */ Filelink.prototype.escapeValue = function (value) { if (typeof value !== 'string') { return value; } if (value.indexOf('/') > -1 || value.indexOf(',') > -1) { return "\"".concat(value, "\""); } return value; }; /** * Converts nested arrays to string * * @private * @example [1,2, [2,3]] => "[1,2, [2,3]]" * @param arr - any array */ Filelink.prototype.arrayToString = function (arr) { var _this = this; var toReturn = arr.map(function (el) { if (Array.isArray(el)) { return _this.arrayToString(el); } return _this.escapeValue(el); }); return "[".concat(toReturn, "]"); }; /** * Validator instance * * @private * @memberof Filelink */ Filelink.validator = (0, validator_1.getValidator)(transforms_schema_1.TransformSchema); return Filelink; }()); exports.Filelink = Filelink; //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvZmlsZWxpbmsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRzs7OztBQUVILHNDQUFxQztBQUNyQyxtRUFBZ0U7QUFDaEUsbURBQXFEO0FBQ3JELGlDQUEyQztBQUMzQyx3REFBMEU7QUFDMUUsd0RBQTBCO0FBRTFCLElBQU0sS0FBSyxHQUFHLElBQUEsZUFBSyxFQUFDLGFBQWEsQ0FBQyxDQUFDO0FBRW5DLElBQVksS0FRWDtBQVJELFdBQVksS0FBSztJQUNmLHNCQUFhLENBQUE7SUFDYix3QkFBZSxDQUFBO0lBQ2YsMEJBQWlCLENBQUE7SUFDakIsMEJBQWlCLENBQUE7SUFDakIsb0JBQVcsQ0FBQTtJQUNYLHdCQUFlLENBQUE7SUFDZiwwQkFBaUIsQ0FBQTtBQUNuQixDQUFDLEVBUlcsS0FBSyxHQUFMLGFBQUssS0FBTCxhQUFLLFFBUWhCO0FBT0Q7O0dBRUc7QUFDSCxJQUFZLFVBS1g7QUFMRCxXQUFZLFVBQVU7SUFDcEIsMkJBQWEsQ0FBQTtJQUNiLDJCQUFhLENBQUE7SUFDYiw2QkFBZSxDQUFBO0lBQ2YseUJBQVcsQ0FBQTtBQUNiLENBQUMsRUFMVyxVQUFVLEdBQVYsa0JBQVUsS0FBVixrQkFBVSxRQUtyQjtBQUVEOztHQUVHO0FBQ0gsSUFBWSxRQUdYO0FBSEQsV0FBWSxRQUFRO0lBQ2xCLDZCQUFpQixDQUFBO0lBQ2pCLGlDQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFIVyxRQUFRLEdBQVIsZ0JBQVEsS0FBUixnQkFBUSxRQUduQjtBQUVEOztHQUVHO0FBQ0gsSUFBWSxTQUdYO0FBSEQsV0FBWSxTQUFTO0lBQ25CLDBCQUFhLENBQUE7SUFDYiwwQkFBYSxDQUFBO0FBQ2YsQ0FBQyxFQUhXLFNBQVMsR0FBVCxpQkFBUyxLQUFULGlCQUFTLFFBR3BCO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLFNBS1g7QUFMRCxXQUFZLFNBQVM7SUFDbkIsMEJBQWEsQ0FBQTtJQUNiLHdCQUFXLENB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