UNPKG

filestack-js

Version:

Official JavaScript library for Filestack

1,330 lines (1,329 loc) 113 kB
/* * 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. */ export var TransformSchema = { '$schema': 'http://json-schema.org/draft-07/schema#', title: 'Filestack Transformations', description: 'Filestack transformations parameters', type: 'object', additionalProperties: false, properties: { flip: { type: 'boolean', additionalProperties: false, }, auto_image: { type: 'boolean', additionalProperties: false, }, no_metadata: { type: 'boolean', additionalProperties: false, }, compress: { additionalProperties: false, oneOf: [{ type: 'boolean', }, { type: 'object', properties: { metadata: { type: 'boolean', default: false, }, }, }], }, flop: { type: 'boolean', additionalProperties: false, }, enhance: { default: true, oneOf: [{ type: 'boolean', }, { type: 'object', additionalProperties: false, properties: { preset: { type: 'string', enum: ['auto', 'vivid', 'beautify', 'beautify_plus', 'fix_dark', 'fix_noise', 'fix_tint', 'outdoor', 'fireworks'], }, }, }], }, redeye: { type: 'boolean', additionalProperties: false, }, monochrome: { type: 'boolean', additionalProperties: false, }, negative: { type: 'boolean', additionalProperties: false, }, tags: { type: 'boolean', additionalProperties: false, }, sfw: { type: 'boolean', additionalProperties: false, }, imagesize: { type: 'boolean', additionalProperties: false, }, smart_crop: { width: { type: 'integer', minimum: 0, maximum: 10000, }, height: { type: 'integer', minimum: 0, maximum: 10000, }, mode: { type: 'string', default: 'auto', enum: ['face', 'auto'], }, }, animate: { type: 'object', properties: { delay: { type: 'integer', minimum: 0, maximum: 10000, default: 1000, }, loop: { type: 'integer', minimum: 0, maximum: 1000, default: 0, }, width: { type: 'integer', minimum: 1, maximum: 1800, }, height: { type: 'integer', minimum: 1, maximum: 1800, }, fit: { type: 'string', default: 'clip', enum: ['clip', 'scale', 'crop'], }, background: { '$ref': 'colorDef', default: 'transparent', }, align: { '$ref': 'positionDef', default: 'center', }, }, }, metadata: { type: 'object', params: { type: 'array', items: { type: 'string', enum: [ 'filename', 'mimetype', 'size', 'width', 'height', 'writeable', 'path', 'container', 'cloud', 'exif', 'source_url', 'md5', 'sha256', 'sha1', 'sha512', ], }, minItems: 0, uniqueItems: true, additionalItems: false, }, additionalProperties: false, }, resize: { type: 'object', properties: { width: { type: 'number', minimum: 0, maximum: 10000, }, height: { type: 'number', minimum: 0, maximum: 10000, }, fit: { type: 'string', enum: ['clip', 'crop', 'scale', 'max'], default: 'clip', }, align: { '$ref': 'positionDef', default: 'center', }, }, // required: ['width', 'height'], additionalProperties: false, anyOf: [ { required: ['width'] }, { required: ['height'] }, ], }, crop: { type: 'object', properties: { dim: { type: 'array', additionalItems: false, minItems: 4, items: [{ type: 'integer', minimum: 0, maximum: 100000, }, { type: 'integer', minimum: 0, maximum: 100000, }, { type: 'integer', minimum: 1, maximum: 100000, }, { type: 'integer', minimum: 1, maximum: 100000, }], }, }, required: ['dim'], }, rotate: { type: 'object', properties: { deg: { oneOf: [{ type: 'string', enum: ['exif'], }, { type: 'number', minimum: 0, maximum: 359, }], }, exif: { type: 'boolean', }, background: { '$ref': 'colorDef', default: 'FFFFFFFF', }, }, additionalProperties: false, }, detect_faces: { oneOf: [{ type: 'boolean', }, { type: 'object', properties: { maxsize: { type: 'number', minimum: 0, maximum: 10000, default: 0.35, }, minsize: { type: 'number', minimum: 0, maximum: 10000, default: 0.35, }, export: { type: 'boolean', }, color: { '$ref': 'colorDef', default: '000000FF', }, }, additionalProperties: false, }], }, crop_faces: { oneOf: [{ type: 'boolean', }, { type: 'object', properties: { faces: { default: 1, '$ref': 'facesDef', }, width: { type: 'number', minimum: 1, maximum: 10000, }, height: { type: 'number', minimum: 1, maximum: 10000, }, maxsize: { type: 'number', minimum: 0, maximum: 10000, default: 0.35, }, minsize: { type: 'number', minimum: 0, maximum: 10000, default: 0.35, }, buffer: { type: 'integer', minimum: 0, maximum: 10000, }, mode: { type: 'string', enum: ['crop', 'thumb', 'fill'], default: 'thumb', }, }, additionalProperties: false, }], }, pixelate_faces: { oneOf: [{ type: 'boolean', }, { type: 'object', properties: { faces: { '$ref': 'facesDef', default: 'all', }, maxsize: { type: 'number', minimum: 0, maximum: 10000, default: 0.35, }, minsize: { type: 'number', minimum: 0, maximum: 10000, default: 0.35, }, buffer: { type: 'integer', minimum: 0, maximum: 10000, }, amount: { type: 'integer', minimum: 2, maximum: 100, default: 10, }, blur: { type: 'number', minimum: 0, maximum: 20, default: 4, }, type: { type: 'string', enum: ['rect', 'oval'], default: 'rect', }, }, additionalProperties: false, }], }, blur_faces: { oneOf: [{ type: 'boolean', }, { type: 'object', properties: { faces: { '$ref': 'facesDef', default: 'all', }, maxsize: { type: 'number', minimum: 0, maximum: 10000, default: 0.35, }, minsize: { type: 'number', minimum: 0, maximum: 10000, default: 0.35, }, buffer: { type: 'integer', minimum: 0, maximum: 10000, }, amount: { type: 'number', minimum: 0, maximum: 10, default: 10, }, blur: { type: 'number', minimum: 0, maximum: 20, default: 4, }, type: { type: 'string', enum: ['rect', 'oval'], default: 'rect', }, }, additionalProperties: false, }], }, rounded_corners: { oneOf: [{ type: 'boolean', }, { type: 'object', properties: { radius: { oneOf: [{ type: 'integer', minimum: 1, maximum: 10000, }, { type: 'string', enum: ['max'], }], }, blur: { type: 'number', minimum: 0, maximum: 20, default: 0.3, }, background: { '$ref': 'colorDef', }, }, additionalProperties: false, }], }, vignette: { oneOf: [{ type: 'boolean', }, { type: 'object', properties: { amount: { type: 'integer', minimum: 0, maximum: 100, default: 20, }, blurmode: { type: 'string', enum: ['gaussian', 'linear'], default: 'gaussian', }, background: { '$ref': 'colorDef', }, }, additionalProperties: false, }], }, polaroid: { oneOf: [{ type: 'boolean', }, { type: 'object', properties: { rotate: { type: 'integer', minimum: 0, maximum: 359, }, color: { '$ref': 'colorDef', default: 'snow', }, background: { '$ref': 'colorDef', }, }, additionalProperties: false, }], }, torn_edges: { oneOf: [{ type: 'boolean', }, { type: 'object', properties: { spread: { type: 'array', additionalItems: false, minItems: 2, items: [{ type: 'integer', minimum: 1, maximum: 10000, default: 1, }, { type: 'integer', minimum: 1, maximum: 10000, default: 10, }], }, background: { '$ref': 'colorDef', }, }, additionalProperties: false, }], }, shadow: { oneOf: [{ type: 'boolean', }, { type: 'object', properties: { blur: { type: 'number', minimum: 0, maximum: 20, default: 100, }, opacity: { type: 'integer', minimum: 0, maximum: 100, default: 60, }, vector: { type: 'array', additionalItems: false, minItems: 2, items: [{ type: 'integer', minimum: -1000, maximum: 1000, default: 4, }, { type: 'integer', minimum: -1000, maximum: 1000, default: 4, }], }, color: { '$ref': 'colorDef', }, background: { '$ref': 'colorDef', }, }, additionalProperties: false, }], }, circle: { oneOf: [{ type: 'boolean', }, { type: 'object', properties: { background: { '$ref': 'colorDef', }, }, additionalProperties: false, }], }, border: { oneOf: [{ type: 'boolean', }, { type: 'object', properties: { color: { '$ref': 'colorDef', }, background: { '$ref': 'colorDef', }, width: { type: 'integer', minimum: 0, maximum: 1000, }, }, additionalProperties: false, }], }, sharpen: { oneOf: [{ type: 'boolean', }, { type: 'object', properties: { amount: { type: 'integer', minimum: 0, maximum: 20, default: 2, }, }, additionalProperties: false, }], }, blur: { oneOf: [{ type: 'boolean', }, { type: 'object', properties: { amount: { type: 'integer', minimum: 0, maximum: 20, default: 2, }, }, additionalProperties: false, }], }, blackwhite: { oneOf: [{ type: 'boolean', }, { type: 'object', properties: { threshold: { type: 'integer', minimum: 0, maximum: 100, default: 50, }, }, additionalProperties: false, }], }, sepia: { oneOf: [{ type: 'boolean', }, { type: 'object', properties: { tone: { type: 'integer', minimum: 0, maximum: 100, default: 80, }, }, additionalProperties: false, }], }, pixelate: { oneOf: [{ type: 'boolean', }, { type: 'object', properties: { amount: { type: 'integer', minimum: 2, maximum: 100, default: 2, }, }, additionalProperties: false, }], }, oil_paint: { oneOf: [{ type: 'boolean', }, { type: 'object', properties: { amount: { type: 'integer', minimum: 2, maximum: 100, default: 2, }, }, additionalProperties: false, }], }, modulate: { oneOf: [{ type: 'boolean', }, { type: 'object', properties: { brightness: { type: 'integer', minimum: 0, maximum: 10000, default: 100, }, saturation: { type: 'integer', minimum: 0, maximum: 10000, default: 100, }, hue: { type: 'integer', minimum: 0, maximum: 359, default: 0, }, }, additionalProperties: false, }], }, ascii: { oneOf: [{ type: 'boolean', }, { type: 'object', properties: { foreground: { '$ref': 'colorDef', default: '000000FF', }, background: { '$ref': 'colorDef', default: 'FFFFFFFF', }, colored: { type: 'boolean', default: false, }, size: { type: 'integer', minimum: 10, maximum: 100, default: 100, }, reverse: { type: 'boolean', default: false, }, }, additionalProperties: false, }], }, collage: { type: 'object', properties: { files: { type: 'array', minItems: 1, items: [{ type: 'string', }], }, margin: { type: 'integer', minimum: 1, maximum: 100, default: 10, }, width: { type: 'integer', minimum: 0, maximum: 10000, }, height: { type: 'integer', minimum: 0, maximum: 10000, }, color: { '$ref': 'colorDef', default: 'FFFFFFFF', }, fit: { type: 'string', enum: ['auto', 'crop'], }, autorotate: { type: 'boolean', default: false, }, }, required: ['width', 'height', 'files'], additionalProperties: false, }, urlscreenshot: { oneOf: [{ type: 'boolean', }, { type: 'object', properties: { agent: { type: 'string', enum: ['desktop', 'mobile'], default: 'desktop', }, width: { type: 'integer', minimum: 1, maximum: 1920, default: 1024, }, height: { type: 'integer', minimum: 1, maximum: 8000, default: 768, }, mode: { type: 'string', enum: ['all', 'window'], default: 'all', }, delay: { type: 'integer', minimum: 0, maximum: 20000, default: 1000, }, orientation: { type: 'string', enum: ['portrait', 'landscape'], default: 'portrait', }, device: { type: 'string', default: '', }, }, additionalProperties: false, }], }, upscale: { oneOf: [{ type: 'boolean', }, { type: 'object', properties: { noise: { type: 'string', enum: ['none', 'low', 'medium', 'high'], default: 'none', }, upscale: { type: 'boolean', default: true, }, style: { type: 'string', enum: ['artwork', 'photo'], default: 'photo', }, }, additionalProperties: false, }], }, output: { type: 'object', additionalProperties: false, properties: { format: { type: 'string', enum: ['doc', 'docx', 'html', 'jpg', 'odp', 'ods', 'odt', 'pjpg', 'pdf', 'png', 'ppt', 'pptx', 'svg', 'txt', 'webp', 'xls', 'xlsx'], }, page: { type: 'integer', minimum: 1, maximum: 99999, }, density: { type: 'integer', minimum: 1, maximum: 500, }, compress: { type: 'boolean', }, quality: { oneOf: [{ type: 'string', enum: ['input'], }, { type: 'integer', minimum: 1, maximum: 100, default: 95, }], }, secure: { type: 'boolean', default: false, }, docinfo: { type: 'boolean', default: false, }, strip: { type: 'boolean', default: false, }, colorspace: { type: 'string', enum: ['rgb', 'cmyk', 'input'], default: 'rgb', }, background: { '$ref': 'colorDef', }, pageformat: { type: 'string', enum: ['a2', 'a3', 'a4', 'a5', 'b4', 'b5', 'letter', 'legal', 'tabloid'], }, pageorientation: { type: 'string', enum: ['landscape', 'portrait'], }, }, }, pjpg: { oneOf: [{ type: 'boolean', }, { type: 'object', additionalProperties: false, properties: { quality: { type: 'integer', minimum: 0, maximum: 100, }, metadata: { type: 'boolean', default: false, }, }, }], }, quality: { type: 'object', additionalProperties: false, properties: { value: { type: 'integer', minimum: 1, maximum: 100, }, }, }, cache: { oneOf: [{ type: 'boolean', }, { type: 'object', properties: { expiry: { type: 'integer', }, }, }], }, video_convert: { type: 'object', additionalProperties: false, properties: { width: { type: 'integer', minimum: 1, maximum: 4096, }, height: { type: 'integer', minimum: 1, maximum: 4096, }, preset: { type: 'string', }, force: { type: 'boolean', }, title: { type: 'string', }, extname: { type: 'string', }, upscale: { type: 'boolean', }, aspect_mode: { type: 'string', enum: ['letterbox', 'pad', 'crop', 'preserve', 'constrain'], default: 'letterbox', }, audio_sample_rate: { type: 'integer', minimum: 1, maximum: 99999, }, two_pass: { type: 'boolean', }, video_bitrate: { type: 'integer', minimum: 1, maximum: 5000, }, fps: { type: 'integer', minimum: 1, maximum: 300, }, keyframe_interval: { type: 'integer', minimum: 250, maximum: 250, }, audio_bitrate: { type: 'integer', minimum: 1, maximum: 999, }, audio_codec: { type: 'string', }, audio_channels: { type: 'integer', minimum: 1, maximum: 12, }, clip_length: { type: 'string', pattern: "^([0-1]?\\d|2[0-3])(?::([0-5]?\\d))?(?::([0-5]?\\d))?$", }, clip_offset: { type: 'string', pattern: "^([0-1]?\\d|2[0-3])(?::([0-5]?\\d))?(?::([0-5]?\\d))?$", }, watermark_url: { type: 'string', }, watermark_top: { type: 'integer', minimum: 0, maximum: 9999, }, watermark_right: { type: 'integer', minimum: 0, maximum: 9999, }, watermark_bottom: { type: 'integer', minimum: 0, maximum: 9999, }, watermark_left: { type: 'integer', minimum: 0, maximum: 9999, }, frame_count: { type: 'integer', minimum: 1, maximum: 1, default: 1, }, filename: { type: 'string', }, location: { '$ref': 'locationsDef', }, path: { type: 'string', }, container: { type: 'string', }, access: { type: 'string', enum: ['public', 'private'], default: 'public', }, }, }, store: { oneOf: [{ type: 'boolean', }, { type: 'object', additionalProperties: false, properties: { filename: { type: 'string', }, location: { '$ref': 'locationsDef', }, path: { type: 'string', }, container: { type: 'string', }, region: { '$ref': 'regionsDef', }, access: { type: 'string', enum: ['public', 'private'], default: 'private', }, base64decode: { type: 'boolean', }, workflows: { '$ref': 'workflowsDef', }, }, }], }, watermark: { type: 'object', properties: { file: { type: 'string', }, size: { type: 'number', minimum: 0, maximum: 500, }, position: { '$ref': 'positionDef', }, }, required: [ 'file', ], additionalProperties: false, }, partial_blur: { type: 'object', properties: { objects: { '$ref': 'objectsDef', }, amount: { type: 'number', minimum: 0, maximum: 20, }, blur: { type: 'number', minimum: 0, maximum: 20, }, type: { type: 'string', enum: ['rect', 'oval'], }, }, required: ['objects'], }, partial_pixelate: { type: 'object', properties: { objects: { '$ref': 'objectsDef', }, amount: { type: 'number', minimum: 2, maximum: 100, }, blur: { type: 'number', minimum: 0, maximum: 20, }, type: { type: 'string', enum: ['rect', 'oval'], }, }, required: ['objects'], }, security: { type: 'object', additionalProperties: false, properties: { policy: { type: 'string', }, signature: { type: 'string', }, }, required: ['policy', 'signature'], }, pdfinfo: { oneOf: [{ type: 'boolean', }, { type: 'object', properties: { colorinfo: { type: 'boolean', }, }, }], }, pdfconvert: { type: 'object', additionalProperties: false, properties: { pageorientation: { type: 'string', enum: ['portrait', 'landscape'], }, pageformat: { '$ref': 'pageFormatDef', }, pages: { '$ref': 'pageRangeDef', }, }, anyOf: [{ required: ['pageorientation'], }, { required: ['pageformat'], }, { required: ['pages'], }], }, fallback: { type: 'object', additionalProperties: false, properties: { handle: { type: 'string', }, cache: { type: 'integer', minimum: 1, maximum: 31536000, }, }, required: ['handle'], }, zip: { type: 'string', }, minify_css: { type: 'object', additionalProperties: false, properties: { gzip: { type: 'boolean', }, level: { type: 'number', enum: [1, 2], }, }, }, minify_js: { type: 'object', additionalProperties: false, properties: { gzip: { type: 'boolean', }, use_babel_polyfill: { type: 'boolean', }, keep_fn_name: { type: 'boolean', }, keep_class_name: { type: 'boolean', }, mangle: { type: 'boolean', }, merge_vars: { type: 'boolean', }, remove_console: { type: 'boolean', }, remove_undefined: { type: 'boolean', }, targets: { type: 'string', }, }, }, }, }; //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvdHJhbnNmb3Jtcy5zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBTSxDQUFDLElBQU0sZUFBZSxHQUFHO0lBQzdCLFNBQVMsRUFBRSx5Q0FBeUM7SUFDcEQsS0FBSyxFQUFFLDJCQUEyQjtJQUNsQyxXQUFXLEVBQUUsc0NBQXNDO0lBQ25ELElBQUksRUFBRSxRQUFRO0lBQ2Qsb0JBQW9CLEVBQUUsS0FBSztJQUMzQixVQUFVLEVBQUU7UUFDVixJQUFJLEVBQUU7WUFDSixJQUFJLEVBQUUsU0FBUztZQUNmLG9CQUFvQixFQUFFLEtBQUs7U0FDNUI7UUFDRCxVQUFVLEVBQUU7WUFDVixJQUFJLEVBQUUsU0FBUztZQUNmLG9CQUFvQixFQUFFLEtBQUs7U0FDNUI7UUFDRCxXQUFXLEVBQUU7WUFDWCxJQUFJLEVBQUUsU0FBUztZQUNmLG9CQUFvQixFQUFFLEtBQUs7U0FDNUI7UUFDRCxRQUFRLEVBQUU7WUFDUixvQkFBb0IsRUFBRSxLQUFLO1lBQzNCLEtBQUssRUFBRSxDQUFDO29CQUNOLElBQUksRUFBRSxTQUFTO2lCQUNoQixFQUFFO29CQUNELElBQUksRUFBRSxRQUFRO29CQUNkLFVBQVUsRUFBRTt3QkFDVixRQUFRLEVBQUU7NEJBQ1IsSUFBSSxFQUFFLFNBQVM7NEJBQ2YsT0FBTyxFQUFFLEtBQUs7eUJBQ2Y7cUJBQ0Y7aUJBQ0YsQ0FBQztTQUNIO1FBQ0QsSUFBSSxFQUFFO1lBQ0osSUFBSSxFQUFFLFNBQVM7WUFDZixvQkFBb0IsRUFBRSxLQUFLO1NBQzVCO1FBQ0QsT0FBTyxFQUFFO1lBQ1AsT0FBTyxFQUFFLElBQUk7WUFDYixLQUFLLEVBQUUsQ0FBQztvQkFDTixJQUFJLEVBQUUsU0FBUztpQkFDaEIsRUFBRTtvQkFDRCxJQUFJLEVBQUUsUUFBUTtvQkFDZCxvQkFBb0IsRUFBRSxLQUFLO29CQUMzQixVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFF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