@autorender/sdk-core 0.1.27 → 0.1.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -218,16 +218,19 @@ interface CreateARConfig {
218
218
  imageBreakpoints?: number[];
219
219
  enableDPR?: boolean;
220
220
  enableResponsive?: boolean;
221
- connectionQuality?: 'auto' | '2g' | '3g' | '4g' | 'wifi';
222
221
  }
223
222
  interface TransformOptions {
224
223
  w?: number;
225
224
  h?: number;
226
225
  fit?: 'crop' | 'fill' | 'fit' | 'scale';
227
226
  ar?: string;
228
- p?: string;
229
- ps?: 'center' | 'entropy' | 'attention';
227
+ position?: 'p_c' | 'p_tl' | 'p_tr' | 'p_bl' | 'p_br' | 'p_t' | 'p_b' | 'p_l' | 'p_r' | 'center' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'top' | 'bottom' | 'left' | 'right';
228
+ position_startagy?: 'entropy' | 'attention';
230
229
  focus?: string;
230
+ /** Video trim: start offset in seconds → `so_{n}` */
231
+ so?: number;
232
+ /** Video trim: end offset in seconds → `eo_{n}` */
233
+ eo?: number;
231
234
  r?: number | 'portrait' | 'landscape';
232
235
  z?: number;
233
236
  flip?: 'h' | 'v' | 'hv' | 'vh';
@@ -235,7 +238,6 @@ interface TransformOptions {
235
238
  f?: string;
236
239
  q?: string | number;
237
240
  bg?: string;
238
- k?: 'nearest' | 'linear' | 'cubic' | 'mitchell' | 'lanczos2' | 'lanczos3';
239
241
  dpr?: number;
240
242
  improve?: boolean | string | {
241
243
  mode?: 'indoor' | 'outdoor';
@@ -291,7 +293,7 @@ interface LayerOptions {
291
293
  layerType?: 'overlay' | 'underlay';
292
294
  x?: number;
293
295
  y?: number;
294
- placement?: 'none' | 'north' | 'south' | 'east' | 'west' | 'center' | 'north-west' | 'north-east' | 'south-west' | 'south-east' | 'nw' | 'ne' | 'sw' | 'se' | 'n' | 's' | 'e' | 'w' | 'c';
296
+ placement?: 'none' | 'north' | 'south' | 'east' | 'west' | 'center' | 'north-west' | 'north-east' | 'south-west' | 'south-east' | 'north west' | 'north east' | 'south west' | 'south east';
295
297
  rotation?: number;
296
298
  opacity?: number;
297
299
  width?: number;
@@ -305,6 +307,7 @@ interface LayerOptions {
305
307
  position?: string;
306
308
  borderRadius?: number;
307
309
  flip?: 'h' | 'v' | 'hv' | 'vh';
310
+ /** Image layer only (`lzoom_`). */
308
311
  zoom?: number;
309
312
  enhance?: LayerEnhancementOptions;
310
313
  }
@@ -369,6 +372,14 @@ interface ARInstance {
369
372
  */
370
373
  declare function encodeAssetPathForDelivery(src: string): string;
371
374
 
375
+ /**
376
+ * Transformation builder - converts TransformOptions to URL transformation string
377
+ * with deterministic sorting
378
+ */
379
+
380
+ /** Output format is GIF — omit DPR and quality in delivery URLs (e.g. ARImage / animated GIF). */
381
+ declare function isGifFormatOutput(transform?: TransformOptions | null): boolean;
382
+
372
383
  /**
373
384
  * Main AutoRender client factory
374
385
  * Creates an AR instance with URL building and responsive image capabilities
@@ -399,4 +410,4 @@ declare function createUploader(options: CreateUploaderOptions): UploaderInstanc
399
410
 
400
411
  declare function registerAutorenderUploaderElement(): void;
401
412
 
402
- export { type ARInstance, type ApiFolderRequest, type AppRunnerResponse, type CompleteUploadPayload, type CompleteUploadResponse, type CreateARConfig, type CreateUploaderOptions, type Environment, type IconRenderer, type IconSet, type IngestErrorResponse, type IngestSuccessResponse, type LabelSet, type LayerEnhancementOptions, type LayerOptions, type Palette, type PresignPayload, type PresignResponse, type PresignedFile, type ResponsiveAttributes, type ResponsiveOptions, type ThemeOptions, type TransformOptions, type UploadItem, type UploadSettings, type UploadSourceOption, type UploadStatus, type UploadSuccessFile, type UploadedFileResponse, type UploaderClassNames, type UploaderInstance, createAR, createUploader, detectBestFormat, encodeAssetPathForDelivery, getBestFormatSync, registerAutorenderUploaderElement, resetFormatCache };
413
+ export { type ARInstance, type ApiFolderRequest, type AppRunnerResponse, type CompleteUploadPayload, type CompleteUploadResponse, type CreateARConfig, type CreateUploaderOptions, type Environment, type IconRenderer, type IconSet, type IngestErrorResponse, type IngestSuccessResponse, type LabelSet, type LayerEnhancementOptions, type LayerOptions, type Palette, type PresignPayload, type PresignResponse, type PresignedFile, type ResponsiveAttributes, type ResponsiveOptions, type ThemeOptions, type TransformOptions, type UploadItem, type UploadSettings, type UploadSourceOption, type UploadStatus, type UploadSuccessFile, type UploadedFileResponse, type UploaderClassNames, type UploaderInstance, createAR, createUploader, detectBestFormat, encodeAssetPathForDelivery, getBestFormatSync, isGifFormatOutput, registerAutorenderUploaderElement, resetFormatCache };
package/dist/index.d.ts CHANGED
@@ -218,16 +218,19 @@ interface CreateARConfig {
218
218
  imageBreakpoints?: number[];
219
219
  enableDPR?: boolean;
220
220
  enableResponsive?: boolean;
221
- connectionQuality?: 'auto' | '2g' | '3g' | '4g' | 'wifi';
222
221
  }
223
222
  interface TransformOptions {
224
223
  w?: number;
225
224
  h?: number;
226
225
  fit?: 'crop' | 'fill' | 'fit' | 'scale';
227
226
  ar?: string;
228
- p?: string;
229
- ps?: 'center' | 'entropy' | 'attention';
227
+ position?: 'p_c' | 'p_tl' | 'p_tr' | 'p_bl' | 'p_br' | 'p_t' | 'p_b' | 'p_l' | 'p_r' | 'center' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'top' | 'bottom' | 'left' | 'right';
228
+ position_startagy?: 'entropy' | 'attention';
230
229
  focus?: string;
230
+ /** Video trim: start offset in seconds → `so_{n}` */
231
+ so?: number;
232
+ /** Video trim: end offset in seconds → `eo_{n}` */
233
+ eo?: number;
231
234
  r?: number | 'portrait' | 'landscape';
232
235
  z?: number;
233
236
  flip?: 'h' | 'v' | 'hv' | 'vh';
@@ -235,7 +238,6 @@ interface TransformOptions {
235
238
  f?: string;
236
239
  q?: string | number;
237
240
  bg?: string;
238
- k?: 'nearest' | 'linear' | 'cubic' | 'mitchell' | 'lanczos2' | 'lanczos3';
239
241
  dpr?: number;
240
242
  improve?: boolean | string | {
241
243
  mode?: 'indoor' | 'outdoor';
@@ -291,7 +293,7 @@ interface LayerOptions {
291
293
  layerType?: 'overlay' | 'underlay';
292
294
  x?: number;
293
295
  y?: number;
294
- placement?: 'none' | 'north' | 'south' | 'east' | 'west' | 'center' | 'north-west' | 'north-east' | 'south-west' | 'south-east' | 'nw' | 'ne' | 'sw' | 'se' | 'n' | 's' | 'e' | 'w' | 'c';
296
+ placement?: 'none' | 'north' | 'south' | 'east' | 'west' | 'center' | 'north-west' | 'north-east' | 'south-west' | 'south-east' | 'north west' | 'north east' | 'south west' | 'south east';
295
297
  rotation?: number;
296
298
  opacity?: number;
297
299
  width?: number;
@@ -305,6 +307,7 @@ interface LayerOptions {
305
307
  position?: string;
306
308
  borderRadius?: number;
307
309
  flip?: 'h' | 'v' | 'hv' | 'vh';
310
+ /** Image layer only (`lzoom_`). */
308
311
  zoom?: number;
309
312
  enhance?: LayerEnhancementOptions;
310
313
  }
@@ -369,6 +372,14 @@ interface ARInstance {
369
372
  */
370
373
  declare function encodeAssetPathForDelivery(src: string): string;
371
374
 
375
+ /**
376
+ * Transformation builder - converts TransformOptions to URL transformation string
377
+ * with deterministic sorting
378
+ */
379
+
380
+ /** Output format is GIF — omit DPR and quality in delivery URLs (e.g. ARImage / animated GIF). */
381
+ declare function isGifFormatOutput(transform?: TransformOptions | null): boolean;
382
+
372
383
  /**
373
384
  * Main AutoRender client factory
374
385
  * Creates an AR instance with URL building and responsive image capabilities
@@ -399,4 +410,4 @@ declare function createUploader(options: CreateUploaderOptions): UploaderInstanc
399
410
 
400
411
  declare function registerAutorenderUploaderElement(): void;
401
412
 
402
- export { type ARInstance, type ApiFolderRequest, type AppRunnerResponse, type CompleteUploadPayload, type CompleteUploadResponse, type CreateARConfig, type CreateUploaderOptions, type Environment, type IconRenderer, type IconSet, type IngestErrorResponse, type IngestSuccessResponse, type LabelSet, type LayerEnhancementOptions, type LayerOptions, type Palette, type PresignPayload, type PresignResponse, type PresignedFile, type ResponsiveAttributes, type ResponsiveOptions, type ThemeOptions, type TransformOptions, type UploadItem, type UploadSettings, type UploadSourceOption, type UploadStatus, type UploadSuccessFile, type UploadedFileResponse, type UploaderClassNames, type UploaderInstance, createAR, createUploader, detectBestFormat, encodeAssetPathForDelivery, getBestFormatSync, registerAutorenderUploaderElement, resetFormatCache };
413
+ export { type ARInstance, type ApiFolderRequest, type AppRunnerResponse, type CompleteUploadPayload, type CompleteUploadResponse, type CreateARConfig, type CreateUploaderOptions, type Environment, type IconRenderer, type IconSet, type IngestErrorResponse, type IngestSuccessResponse, type LabelSet, type LayerEnhancementOptions, type LayerOptions, type Palette, type PresignPayload, type PresignResponse, type PresignedFile, type ResponsiveAttributes, type ResponsiveOptions, type ThemeOptions, type TransformOptions, type UploadItem, type UploadSettings, type UploadSourceOption, type UploadStatus, type UploadSuccessFile, type UploadedFileResponse, type UploaderClassNames, type UploaderInstance, createAR, createUploader, detectBestFormat, encodeAssetPathForDelivery, getBestFormatSync, isGifFormatOutput, registerAutorenderUploaderElement, resetFormatCache };
package/dist/index.js CHANGED
@@ -2950,7 +2950,35 @@ function getDPR() {
2950
2950
  }
2951
2951
 
2952
2952
  // src/viewtag/transform.ts
2953
- function buildTransformString(transform, defaults, enableDPR = true, connectionQuality) {
2953
+ function normalizePosition(value) {
2954
+ const normalized = value.trim().toLowerCase();
2955
+ const positionMap = {
2956
+ center: "c",
2957
+ "top-left": "tl",
2958
+ "top-right": "tr",
2959
+ "bottom-left": "bl",
2960
+ "bottom-right": "br",
2961
+ top: "t",
2962
+ bottom: "b",
2963
+ left: "l",
2964
+ right: "r",
2965
+ p_c: "c",
2966
+ p_tl: "tl",
2967
+ p_tr: "tr",
2968
+ p_bl: "bl",
2969
+ p_br: "br",
2970
+ p_t: "t",
2971
+ p_b: "b",
2972
+ p_l: "l",
2973
+ p_r: "r"
2974
+ };
2975
+ return positionMap[normalized] || normalized;
2976
+ }
2977
+ function isGifFormatOutput(transform) {
2978
+ const f = transform?.f;
2979
+ return typeof f === "string" && f.toLowerCase() === "gif";
2980
+ }
2981
+ function buildTransformString(transform, defaults, enableDPR = true) {
2954
2982
  const parts = [];
2955
2983
  const addPart = (param, value) => {
2956
2984
  if (value === void 0 || value === null) return;
@@ -3059,16 +3087,24 @@ function buildTransformString(transform, defaults, enableDPR = true, connectionQ
3059
3087
  addPart("c_", fitMap[transform.fit] || transform.fit);
3060
3088
  }
3061
3089
  if (transform.ar) addPart("ar_", transform.ar);
3062
- if (transform.p) addPart("p_", transform.p);
3063
- if (transform.ps) addPart("ps_", transform.ps);
3090
+ if (transform.position) addPart("p_", normalizePosition(transform.position));
3091
+ if (transform.position_startagy) {
3092
+ const strategy = String(transform.position_startagy).trim().toLowerCase().replace(/^ps_/, "");
3093
+ if (strategy === "entropy" || strategy === "attention") {
3094
+ addPart("ps_", strategy);
3095
+ }
3096
+ }
3064
3097
  if (transform.focus) addPart("fo_", transform.focus);
3098
+ if (transform.so !== void 0) addPart("so_", transform.so);
3099
+ if (transform.eo !== void 0) addPart("eo_", transform.eo);
3065
3100
  if (transform.r !== void 0) addPart("r_", transform.r);
3066
3101
  if (transform.z !== void 0) addPart("z_", transform.z);
3067
3102
  if (transform.flip) addPart("flip_", transform.flip);
3068
3103
  if (transform.br !== void 0) addPart("br_", transform.br);
3069
- let format = transform.f ?? defaults?.f;
3070
- if (format && format !== "auto") addPart("f_", format);
3071
- const quality = transform.q ?? defaults?.q;
3104
+ const resolvedFormat = transform.f ?? defaults?.f;
3105
+ const isGifOutput = typeof resolvedFormat === "string" && resolvedFormat.toLowerCase() === "gif";
3106
+ if (resolvedFormat && resolvedFormat !== "auto") addPart("f_", resolvedFormat);
3107
+ const quality = isGifOutput ? transform.q : transform.q ?? defaults?.q;
3072
3108
  if (quality !== void 0 && quality !== "auto") addPart("q_", quality);
3073
3109
  if (transform.bg) {
3074
3110
  if (transform.bg.startsWith("rgb:")) {
@@ -3077,12 +3113,13 @@ function buildTransformString(transform, defaults, enableDPR = true, connectionQ
3077
3113
  addPart("bg_", transform.bg);
3078
3114
  }
3079
3115
  }
3080
- if (transform.k) addPart("k_", transform.k);
3081
- if (enableDPR && transform.dpr === void 0) {
3082
- const dpr = getDPR();
3083
- if (dpr !== 1) addPart("dpr_", dpr);
3084
- } else if (transform.dpr !== void 0) {
3085
- addPart("dpr_", transform.dpr);
3116
+ if (!isGifOutput) {
3117
+ if (enableDPR && transform.dpr === void 0) {
3118
+ const dpr = getDPR();
3119
+ if (dpr !== 1) addPart("dpr_", dpr);
3120
+ } else if (transform.dpr !== void 0) {
3121
+ addPart("dpr_", transform.dpr);
3122
+ }
3086
3123
  }
3087
3124
  if (transform.improve !== void 0) {
3088
3125
  if (typeof transform.improve === "boolean" && transform.improve) {
@@ -3143,9 +3180,11 @@ function buildTransformString(transform, defaults, enableDPR = true, connectionQ
3143
3180
  "h",
3144
3181
  "fit",
3145
3182
  "ar",
3146
- "p",
3147
- "ps",
3183
+ "position",
3184
+ "position_startagy",
3148
3185
  "focus",
3186
+ "so",
3187
+ "eo",
3149
3188
  "r",
3150
3189
  "z",
3151
3190
  "flip",
@@ -3153,7 +3192,6 @@ function buildTransformString(transform, defaults, enableDPR = true, connectionQ
3153
3192
  "f",
3154
3193
  "q",
3155
3194
  "bg",
3156
- "k",
3157
3195
  "dpr",
3158
3196
  "improve",
3159
3197
  "unsharpMask",
@@ -3242,13 +3280,14 @@ function buildTransformString(transform, defaults, enableDPR = true, connectionQ
3242
3280
  if (param.startsWith("lw_")) return 3;
3243
3281
  if (param.startsWith("lh_")) return 4;
3244
3282
  if (param.startsWith("o_")) return 5;
3245
- if (param.startsWith("l")) return 6;
3283
+ if (param.startsWith("l") && !param.startsWith("lzoom_")) return 6;
3246
3284
  if (param.startsWith("co_")) return 7;
3247
3285
  if (param.startsWith("a_")) return 8;
3248
3286
  if (param.startsWith("lr_")) return 8;
3249
- if (param.startsWith("x_") || param.startsWith("y_")) return 9;
3250
- if (param.startsWith("le_")) return 10;
3251
- if (param.startsWith("e_")) return 11;
3287
+ if (param.startsWith("lzoom_")) return 9;
3288
+ if (param.startsWith("x_") || param.startsWith("y_")) return 10;
3289
+ if (param.startsWith("le_")) return 11;
3290
+ if (param.startsWith("e_")) return 12;
3252
3291
  return 100;
3253
3292
  };
3254
3293
  regularParts.sort((a, b) => {
@@ -3352,6 +3391,7 @@ function buildLayerTransform(layer, addPart) {
3352
3391
  addPart("fl_layer_apply", "");
3353
3392
  }
3354
3393
  function normalizePlacement(placement) {
3394
+ const normalized = placement.trim().toLowerCase().replace(/\s+/g, " ");
3355
3395
  const mapping = {
3356
3396
  "north": "n",
3357
3397
  "south": "s",
@@ -3359,12 +3399,16 @@ function normalizePlacement(placement) {
3359
3399
  "west": "w",
3360
3400
  "center": "c",
3361
3401
  "north-west": "nw",
3402
+ "north west": "nw",
3362
3403
  "north-east": "ne",
3404
+ "north east": "ne",
3363
3405
  "south-west": "sw",
3406
+ "south west": "sw",
3364
3407
  "south-east": "se",
3408
+ "south east": "se",
3365
3409
  "none": "none"
3366
3410
  };
3367
- return mapping[placement.toLowerCase()] || placement.toLowerCase();
3411
+ return mapping[normalized] || normalized;
3368
3412
  }
3369
3413
 
3370
3414
  // src/viewtag/url-builder.ts
@@ -3383,9 +3427,9 @@ function encodeAssetPathForDelivery(src) {
3383
3427
  }
3384
3428
  return trimmed.split("/").filter(Boolean).map((segment) => encodeURIComponent(segment)).join("/");
3385
3429
  }
3386
- function buildImageUrl(baseUrl, workspace, src, transform, defaults, enableDPR = true, connectionQuality) {
3430
+ function buildImageUrl(baseUrl, workspace, src, transform, defaults, enableDPR = true) {
3387
3431
  const normalizedBase = baseUrl.replace(/\/+$/, "");
3388
- const transformStr = buildTransformString(transform || {}, defaults, enableDPR, connectionQuality);
3432
+ const transformStr = buildTransformString(transform || {}, defaults, enableDPR);
3389
3433
  const trimmedSrc = src.trim();
3390
3434
  if (ABSOLUTE_URL_RE.test(trimmedSrc)) {
3391
3435
  const fetchPart = `fetch_${trimmedSrc}`;
@@ -3413,7 +3457,7 @@ function parseMinVWFromSizes(sizes) {
3413
3457
  const vwValues = vwMatches.map((m) => parseFloat(m));
3414
3458
  return Math.min(...vwValues);
3415
3459
  }
3416
- function generateResponsiveAttributes(baseUrl, workspace, options, defaults, deviceBreakpoints = DEFAULT_DEVICE_BREAKPOINTS, imageBreakpoints = DEFAULT_IMAGE_BREAKPOINTS, enableDPR = true, connectionQuality) {
3460
+ function generateResponsiveAttributes(baseUrl, workspace, options, defaults, deviceBreakpoints = DEFAULT_DEVICE_BREAKPOINTS, imageBreakpoints = DEFAULT_IMAGE_BREAKPOINTS, enableDPR = true) {
3417
3461
  const { src, width, sizes, transform, breakpoints } = options;
3418
3462
  const effectiveBreakpoints = breakpoints || deviceBreakpoints;
3419
3463
  if (width !== void 0 && !sizes) {
@@ -3425,7 +3469,7 @@ function generateResponsiveAttributes(baseUrl, workspace, options, defaults, dev
3425
3469
  w: baseWidth2,
3426
3470
  dpr: 1
3427
3471
  };
3428
- const url1x = buildImageUrl(baseUrl, workspace, src, transform1x, defaults, false, connectionQuality);
3472
+ const url1x = buildImageUrl(baseUrl, workspace, src, transform1x, defaults, false);
3429
3473
  srcSetParts2.push(`${url1x} 1x`);
3430
3474
  if (dpr >= 2) {
3431
3475
  const transform2x = {
@@ -3433,14 +3477,10 @@ function generateResponsiveAttributes(baseUrl, workspace, options, defaults, dev
3433
3477
  w: baseWidth2,
3434
3478
  dpr: 2
3435
3479
  };
3436
- const url2x = buildImageUrl(baseUrl, workspace, src, transform2x, defaults, false, connectionQuality);
3480
+ const url2x = buildImageUrl(baseUrl, workspace, src, transform2x, defaults, false);
3437
3481
  srcSetParts2.push(`${url2x} 2x`);
3438
3482
  }
3439
- const baseTransform2 = {
3440
- ...transform,
3441
- w: baseWidth2
3442
- };
3443
- const baseSrc2 = buildImageUrl(baseUrl, workspace, src, baseTransform2, defaults, enableDPR, connectionQuality);
3483
+ const baseSrc2 = url1x;
3444
3484
  return {
3445
3485
  src: baseSrc2,
3446
3486
  srcSet: srcSetParts2.join(", "),
@@ -3457,7 +3497,7 @@ function generateResponsiveAttributes(baseUrl, workspace, options, defaults, dev
3457
3497
  ...transform,
3458
3498
  w: bp
3459
3499
  };
3460
- const url = buildImageUrl(baseUrl, workspace, src, transformWithWidth, defaults, enableDPR, connectionQuality);
3500
+ const url = buildImageUrl(baseUrl, workspace, src, transformWithWidth, defaults, enableDPR);
3461
3501
  return `${url} ${bp}w`;
3462
3502
  });
3463
3503
  const baseWidth2 = width || filteredBreakpoints[0] || effectiveBreakpoints[0];
@@ -3465,7 +3505,7 @@ function generateResponsiveAttributes(baseUrl, workspace, options, defaults, dev
3465
3505
  ...transform,
3466
3506
  w: baseWidth2
3467
3507
  };
3468
- const baseSrc2 = buildImageUrl(baseUrl, workspace, src, baseTransform2, defaults, enableDPR, connectionQuality);
3508
+ const baseSrc2 = buildImageUrl(baseUrl, workspace, src, baseTransform2, defaults, enableDPR);
3469
3509
  return {
3470
3510
  src: baseSrc2,
3471
3511
  srcSet: srcSetParts2.join(", "),
@@ -3478,7 +3518,7 @@ function generateResponsiveAttributes(baseUrl, workspace, options, defaults, dev
3478
3518
  ...transform,
3479
3519
  w: bp
3480
3520
  };
3481
- const url = buildImageUrl(baseUrl, workspace, src, transformWithWidth, defaults, enableDPR, connectionQuality);
3521
+ const url = buildImageUrl(baseUrl, workspace, src, transformWithWidth, defaults, enableDPR);
3482
3522
  return `${url} ${bp}w`;
3483
3523
  });
3484
3524
  const baseWidth = effectiveBreakpoints[0];
@@ -3486,7 +3526,7 @@ function generateResponsiveAttributes(baseUrl, workspace, options, defaults, dev
3486
3526
  ...transform,
3487
3527
  w: baseWidth
3488
3528
  };
3489
- const baseSrc = buildImageUrl(baseUrl, workspace, src, baseTransform, defaults, enableDPR, connectionQuality);
3529
+ const baseSrc = buildImageUrl(baseUrl, workspace, src, baseTransform, defaults, enableDPR);
3490
3530
  return {
3491
3531
  src: baseSrc,
3492
3532
  srcSet: srcSetParts.join(", "),
@@ -3817,6 +3857,7 @@ export {
3817
3857
  detectBestFormat,
3818
3858
  encodeAssetPathForDelivery,
3819
3859
  getBestFormatSync,
3860
+ isGifFormatOutput,
3820
3861
  registerAutorenderUploaderElement,
3821
3862
  resetFormatCache
3822
3863
  };