filestack-js
Version:
Official JavaScript library for Filestack
1,330 lines (1,329 loc) • 113 kB
JavaScript
/*
* 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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