UNPKG

22.5 kBTypeScriptView Raw
1// Type definitions for svgo 2.6
2// Project: https://github.com/svg/svgo
3// Definitions by: Bradley Ayers <https://github.com/bradleyayers>
4// Gilad Gray <https://github.com/giladgray>
5// Aankhen <https://github.com/Aankhen>
6// Jan Karres <https://github.com/jankarres>
7// Gavin Gregory <https://github.com/gavingregory>
8// Piotr Błażejewicz <https://github.com/peterblazejewicz>
9// Remco Haszing <https://github.com/remcohaszing>
10// Petr Zahradník <https://github.com/petrzjunior>
11// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
12
13/// <reference types="node"/>
14
15export interface DefaultPlugin<N extends string, P = never> {
16 active?: boolean | undefined;
17 name: N;
18 params?: P | undefined;
19}
20
21/**
22 * adds attributes to an outer <svg> element
23 */
24export type AddAttributesToSVGElementPlugin = DefaultPlugin<'addAttributesToSVGElement'>;
25
26/**
27 * adds classnames to an outer <svg> element
28 */
29export type AddClassesToSVGElementPlugin = DefaultPlugin<'addClassesToSVGElement'>;
30
31/**
32 * cleanups attributes from newlines, trailing and repeating spaces
33 */
34export type CleanupAttrsPlugin = DefaultPlugin<
35 'cleanupAttrs',
36 {
37 /** @default true */
38 newlines?: boolean | undefined;
39 /** @default true */
40 trim?: boolean | undefined;
41 /** @default true */
42 spaces?: boolean | undefined;
43 }
44>;
45
46/**
47 * remove or cleanup enable-background attribute when possible
48 */
49export type CleanupEnableBackgroundPlugin = DefaultPlugin<'cleanupEnableBackground'>;
50
51/**
52 * removes unused IDs and minifies used
53 */
54export type CleanupIDsPlugin = DefaultPlugin<
55 'cleanupIDs',
56 {
57 /** @default true */
58 remove?: boolean | undefined;
59 /** @default true */
60 minify?: boolean | undefined;
61 /** @default '' */
62 prefix?: string | undefined;
63 /** @default [] */
64 preserve?: any[] | undefined;
65 /** @default [] */
66 preservePrefixes?: any[] | undefined;
67 /** @default false */
68 force?: boolean | undefined;
69 }
70>;
71
72/**
73 * rounds list of values to the fixed precision
74 */
75export type CleanupListOfValuesPlugin = DefaultPlugin<
76 'cleanupListOfValues',
77 {
78 /** @default 3 */
79 floatPrecision?: number | undefined;
80 /** @default true */
81 leadingZero?: boolean | undefined;
82 /** @default true */
83 defaultPx?: boolean | undefined;
84 /** @default true */
85 convertToPx?: boolean | undefined;
86 }
87>;
88
89/**
90 * rounds numeric values to the fixed precision, removes default ‘px’ units
91 */
92export type CleanupNumericValuesPlugin = DefaultPlugin<
93 'cleanupNumericValues',
94 {
95 /** @default 3 */
96 floatPrecision?: number | undefined;
97 /** @default true */
98 leadingZero?: boolean | undefined;
99 /** @default true */
100 defaultPx?: boolean | undefined;
101 /** @default true */
102 convertToPx?: boolean | undefined;
103 }
104>;
105
106/**
107 * collapses useless groups
108 */
109export type CollapseGroupsPlugin = DefaultPlugin<'collapseGroups'>;
110
111/**
112 * converts colors: rgb() to #rrggbb and #rrggbb to #rgb
113 */
114export type ConvertColorsPlugin = DefaultPlugin<
115 'convertColors',
116 {
117 /** @default false */
118 currentColor?: boolean | undefined;
119 /** @default true */
120 names2hex?: boolean | undefined;
121 /** @default true */
122 rgb2hex?: boolean | undefined;
123 /** @default true */
124 shorthex?: boolean | undefined;
125 /** @default true */
126 shortname?: boolean | undefined;
127 }
128>;
129
130/**
131 * converts non-eccentric <ellipse>s to <circle>s
132 */
133export type ConvertEllipseToCirclePlugin = DefaultPlugin<'convertEllipseToCircle'>;
134
135/**
136 * optimizes path data: writes in shorter form, applies transformations
137 */
138export type ConvertPathDataPlugin = DefaultPlugin<
139 'convertPathData',
140 {
141 /** @default true */
142 applyTransforms?: boolean | undefined;
143 /** @default true */
144 applyTransformsStroked?: boolean | undefined;
145 makeArcs?:
146 | {
147 /** @default 2.5 */
148 threshold?: number | undefined;
149 /** @default 0.5 */
150 tolerance?: number | undefined;
151 }
152 | undefined;
153 /** @default true */
154 straightCurves?: boolean | undefined;
155 /** @default true */
156 lineShorthands?: boolean | undefined;
157 /** @default true */
158 curveSmoothShorthands?: boolean | undefined;
159 /** @default 3 */
160 floatPrecision?: number | undefined;
161 /** @default 5 */
162 transformPrecision?: number | undefined;
163 /** @default true */
164 removeUseless?: boolean | undefined;
165 /** @default true */
166 collapseRepeated?: boolean | undefined;
167 /** @default true */
168 utilizeAbsolute?: boolean | undefined;
169 /** @default true */
170 leadingZero?: boolean | undefined;
171 /** @default true */
172 negativeExtraSpace?: boolean | undefined;
173 /** @default false */
174 noSpaceAfterFlags?: boolean | undefined;
175 /** @default false */
176 forceAbsolutePath?: boolean | undefined;
177 }
178>;
179
180/**
181 * converts basic shapes to more compact path form
182 */
183export type ConvertShapeToPathPlugin = DefaultPlugin<
184 'convertShapeToPath',
185 {
186 /** @default false */
187 convertArcs?: boolean | undefined;
188 }
189>;
190
191/**
192 * converts style to attributes
193 */
194export type ConvertStyleToAttrsPlugin = DefaultPlugin<
195 'convertStyleToAttrs',
196 {
197 /** @default false */
198 keepImportant?: boolean | undefined;
199 }
200>;
201
202/**
203 * collapses multiple transformations and optimizes it
204 */
205export type ConvertTransformPlugin = DefaultPlugin<
206 'convertTransform',
207 {
208 /** @default true */
209 convertToShorts?: boolean | undefined;
210 /** @default 3 */
211 floatPrecision?: number | undefined;
212 /** @default 5 */
213 transformPrecision?: number | undefined;
214 /** @default true */
215 matrixToTransform?: boolean | undefined;
216 /** @default true */
217 shortTranslate?: boolean | undefined;
218 /** @default true */
219 shortScale?: boolean | undefined;
220 /** @default true */
221 shortRotate?: boolean | undefined;
222 /** @default true */
223 removeUseless?: boolean | undefined;
224 /** @default true */
225 collapseIntoOne?: boolean | undefined;
226 /** @default true */
227 leadingZero?: boolean | undefined;
228 /** @default false */
229 negativeExtraSpace?: boolean | undefined;
230 }
231>;
232
233/**
234 * inline styles (additional options)
235 */
236export type InlineStylesPlugin = DefaultPlugin<
237 'inlineStyles',
238 {
239 /** @default true */
240 onlyMatchedOnce?: boolean | undefined;
241 /** @default true */
242 removeMatchedSelectors?: boolean | undefined;
243 /** @default ['', 'screen'] */
244 useMqs?: string[] | undefined;
245 /** @default [''] */
246 usePseudos?: string[] | undefined;
247 }
248>;
249
250/**
251 * merges multiple paths in one if possible
252 */
253export type MergePathsPlugin = DefaultPlugin<
254 'mergePaths',
255 {
256 /** @default true */
257 collapseRepeated?: boolean | undefined;
258 /** @default false */
259 force?: boolean | undefined;
260 /** @default true */
261 leadingZero?: boolean | undefined;
262 /** @default true */
263 negativeExtraSpace?: boolean | undefined;
264 /** @default false */
265 noSpaceAfterFlags?: boolean | undefined;
266 }
267>;
268
269/**
270 * merge multiple style elements into one
271 */
272export type MergeStylesPlugin = DefaultPlugin<'mergeStyles'>;
273
274/**
275 * minifies styles and removes unused styles based on usage data
276 */
277export type MinifyStylesPlugin = DefaultPlugin<
278 'minifyStyles',
279 {
280 usage: {
281 /** @default false */
282 force?: boolean | undefined;
283 /** @default true */
284 ids?: boolean | undefined;
285 /** @default true */
286 classes?: boolean | undefined;
287 /** @default true */
288 tags?: boolean | undefined;
289 };
290 }
291>;
292
293/**
294 * moves elements attributes to the existing group wrapper
295 */
296export type MoveElemsAttrsToGroupPlugin = DefaultPlugin<'moveElemsAttrsToGroup'>;
297
298/**
299 * moves some group attributes to the content elements
300 */
301export type MoveGroupAttrsToElemsPlugin = DefaultPlugin<'moveGroupAttrsToElems'>;
302
303/**
304 * undefined
305 */
306export type PluginsPlugin = DefaultPlugin<'plugins'>;
307
308/**
309 * prefix IDs
310 */
311export type PrefixIdsPlugin = DefaultPlugin<
312 'prefixIds',
313 {
314 /** @default '__' */
315 delim?: string | undefined;
316 /** @default true */
317 prefixIds?: boolean | undefined;
318 /** @default true */
319 prefixClassNames?: boolean | undefined;
320 }
321>;
322
323/**
324 * removes attributes of elements that match a css selector
325 */
326export type RemoveAttributesBySelectorPlugin = DefaultPlugin<'removeAttributesBySelector'>;
327
328/**
329 * removes specified attributes
330 */
331export type RemoveAttrsPlugin = DefaultPlugin<
332 'removeAttrs',
333 {
334 /** @default ':' */
335 elemSeparator?: string | undefined;
336 /** @default false */
337 preserveCurrentColor?: boolean | undefined;
338 /** @default [] */
339 attrs: string | string[];
340 }
341>;
342
343/**
344 * removes comments
345 */
346export type RemoveCommentsPlugin = DefaultPlugin<'removeComments'>;
347
348/**
349 * removes <desc>
350 */
351export type RemoveDescPlugin = DefaultPlugin<
352 'removeDesc',
353 {
354 /** @default true */
355 removeAny?: boolean | undefined;
356 }
357>;
358
359/**
360 * removes width and height in presence of viewBox (opposite to removeViewBox, disable it first)
361 */
362export type RemoveDimensionsPlugin = DefaultPlugin<'removeDimensions'>;
363
364/**
365 * removes doctype declaration
366 */
367export type RemoveDoctypePlugin = DefaultPlugin<'removeDoctype'>;
368
369/**
370 * removes editors namespaces, elements and attributes
371 */
372export type RemoveEditorsNSDataPlugin = DefaultPlugin<
373 'removeEditorsNSData',
374 {
375 /** @default [] */
376 additionalNamespaces?: any[] | undefined;
377 }
378>;
379
380/**
381 * removes arbitrary elements by ID or className (disabled by default)
382 */
383export type RemoveElementsByAttrPlugin = DefaultPlugin<
384 'removeElementsByAttr',
385 {
386 /** @default [] */
387 id?: any[] | undefined;
388 /** @default [] */
389 class?: any[] | undefined;
390 }
391>;
392
393/**
394 * removes empty attributes
395 */
396export type RemoveEmptyAttrsPlugin = DefaultPlugin<'removeEmptyAttrs'>;
397
398/**
399 * removes empty container elements
400 */
401export type RemoveEmptyContainersPlugin = DefaultPlugin<'removeEmptyContainers'>;
402
403/**
404 * removes empty <text> elements
405 */
406export type RemoveEmptyTextPlugin = DefaultPlugin<
407 'removeEmptyText',
408 {
409 /** @default true */
410 text?: boolean | undefined;
411 /** @default true */
412 tspan?: boolean | undefined;
413 /** @default true */
414 tref?: boolean | undefined;
415 }
416>;
417
418/**
419 * removes hidden elements (zero sized, with absent attributes)
420 */
421export type RemoveHiddenElemsPlugin = DefaultPlugin<
422 'removeHiddenElems',
423 {
424 /** @default true */
425 isHidden?: boolean | undefined;
426 /** @default true */
427 displayNone?: boolean | undefined;
428 /** @default true */
429 opacity0?: boolean | undefined;
430 /** @default true */
431 circleR0?: boolean | undefined;
432 /** @default true */
433 ellipseRX0?: boolean | undefined;
434 /** @default true */
435 ellipseRY0?: boolean | undefined;
436 /** @default true */
437 rectWidth0?: boolean | undefined;
438 /** @default true */
439 rectHeight0?: boolean | undefined;
440 /** @default true */
441 patternWidth0?: boolean | undefined;
442 /** @default true */
443 patternHeight0?: boolean | undefined;
444 /** @default true */
445 imageWidth0?: boolean | undefined;
446 /** @default true */
447 imageHeight0?: boolean | undefined;
448 /** @default true */
449 pathEmptyD?: boolean | undefined;
450 /** @default true */
451 polylineEmptyPoints?: boolean | undefined;
452 /** @default true */
453 polygonEmptyPoints?: boolean | undefined;
454 }
455>;
456
457/**
458 * removes <metadata>
459 */
460export type RemoveMetadataPlugin = DefaultPlugin<'removeMetadata'>;
461
462/**
463 * removes non-inheritable group’s presentational attributes
464 */
465export type RemoveNonInheritableGroupAttrsPlugin = DefaultPlugin<'removeNonInheritableGroupAttrs'>;
466
467/**
468 * removes elements that are drawn outside of the viewbox (disabled by default)
469 */
470export type RemoveOffCanvasPathsPlugin = DefaultPlugin<'removeOffCanvasPaths'>;
471
472/**
473 * removes raster images (disabled by default)
474 */
475export type RemoveRasterImagesPlugin = DefaultPlugin<'removeRasterImages'>;
476
477/**
478 * removes <script> elements (disabled by default)
479 */
480export type RemoveScriptElementPlugin = DefaultPlugin<'removeScriptElement'>;
481
482/**
483 * removes <style> element (disabled by default)
484 */
485export type RemoveStyleElementPlugin = DefaultPlugin<'removeStyleElement'>;
486
487/**
488 * removes <title>
489 */
490export type RemoveTitlePlugin = DefaultPlugin<'removeTitle'>;
491
492/**
493 * removes unknown elements content and attributes, removes attrs with default values
494 */
495export type RemoveUnknownsAndDefaultsPlugin = DefaultPlugin<
496 'removeUnknownsAndDefaults',
497 {
498 /** @default true */
499 unknownContent?: boolean | undefined;
500 /** @default true */
501 unknownAttrs?: boolean | undefined;
502 /** @default true */
503 defaultAttrs?: boolean | undefined;
504 /** @default true */
505 uselessOverrides?: boolean | undefined;
506 /** @default true */
507 keepDataAttrs?: boolean | undefined;
508 /** @default true */
509 keepAriaAttrs?: boolean | undefined;
510 /** @default false */
511 keepRoleAttr?: boolean | undefined;
512 }
513>;
514
515/**
516 * removes unused namespaces declaration
517 */
518export type RemoveUnusedNSPlugin = DefaultPlugin<'removeUnusedNS'>;
519
520/**
521 * removes elements in <defs> without id
522 */
523export type RemoveUselessDefsPlugin = DefaultPlugin<'removeUselessDefs'>;
524
525/**
526 * removes useless stroke and fill attributes
527 */
528export type RemoveUselessStrokeAndFillPlugin = DefaultPlugin<
529 'removeUselessStrokeAndFill',
530 {
531 /** @default true */
532 stroke?: boolean | undefined;
533 /** @default true */
534 fill?: boolean | undefined;
535 /** @default false */
536 removeNone?: boolean | undefined;
537 /** @default false */
538 hasStyleOrScript?: boolean | undefined;
539 }
540>;
541
542/**
543 * removes viewBox attribute when possible
544 */
545export type RemoveViewBoxPlugin = DefaultPlugin<'removeViewBox'>;
546
547/**
548 * removes xmlns attribute (for inline svg, disabled by default)
549 */
550export type RemoveXMLNSPlugin = DefaultPlugin<'removeXMLNS'>;
551
552/**
553 * removes XML processing instructions
554 */
555export type RemoveXMLProcInstPlugin = DefaultPlugin<'removeXMLProcInst'>;
556
557/**
558 * finds <path> elements with the same d, fill, and stroke, and converts them to <use> elements referencing a single <path> def.
559 */
560export type ReusePathsPlugin = DefaultPlugin<'reusePaths'>;
561
562/**
563 * sorts element attributes (disabled by default)
564 */
565export type SortAttrsPlugin = DefaultPlugin<
566 'sortAttrs',
567 {
568 /**
569 * @default ['id', 'width', 'height', 'x', 'x1', 'x2', 'y', 'y1', 'y2', 'cx', 'cy', 'r', 'fill', 'stroke', 'marker', 'd', 'points']
570 */
571 order?: string[] | undefined;
572 }
573>;
574
575/**
576 * sorts children of <defs> to improve compression
577 */
578export type SortDefsChildrenPlugin = DefaultPlugin<'sortDefsChildren'>;
579
580export interface Preset<N extends string, P = never> {
581 name: N;
582 params?: P | undefined;
583}
584
585/**
586 * plugins which are enabled in default preset
587 */
588export type DefaultPresetPlugins =
589 | CleanupAttrsPlugin
590 | CleanupEnableBackgroundPlugin
591 | CleanupIDsPlugin
592 | CleanupNumericValuesPlugin
593 | CollapseGroupsPlugin
594 | ConvertColorsPlugin
595 | ConvertEllipseToCirclePlugin
596 | ConvertPathDataPlugin
597 | ConvertShapeToPathPlugin
598 | ConvertTransformPlugin
599 | InlineStylesPlugin
600 | MergePathsPlugin
601 | MergeStylesPlugin
602 | MinifyStylesPlugin
603 | MoveElemsAttrsToGroupPlugin
604 | MoveGroupAttrsToElemsPlugin
605 | RemoveCommentsPlugin
606 | RemoveDescPlugin
607 | RemoveDoctypePlugin
608 | RemoveEditorsNSDataPlugin
609 | RemoveEmptyAttrsPlugin
610 | RemoveEmptyContainersPlugin
611 | RemoveEmptyTextPlugin
612 | RemoveHiddenElemsPlugin
613 | RemoveMetadataPlugin
614 | RemoveNonInheritableGroupAttrsPlugin
615 | RemoveTitlePlugin
616 | RemoveUnknownsAndDefaultsPlugin
617 | RemoveUnusedNSPlugin
618 | RemoveUselessDefsPlugin
619 | RemoveUselessStrokeAndFillPlugin
620 | RemoveViewBoxPlugin
621 | RemoveXMLProcInstPlugin
622 | SortDefsChildrenPlugin;
623
624/**
625 * default plugin preset, customize plugin options by overriding them
626 */
627export type PresetDefault = Preset<
628 'preset-default',
629 {
630 floatPrecision?: number | undefined;
631 overrides?: { [P in DefaultPresetPlugins['name']]?: false | DefaultPresetPlugins['params'] };
632 }
633>;
634
635export type DefaultPlugins =
636 | DefaultPresetPlugins
637 | PresetDefault
638 | AddAttributesToSVGElementPlugin
639 | AddClassesToSVGElementPlugin
640 | CleanupListOfValuesPlugin
641 | ConvertStyleToAttrsPlugin
642 | PrefixIdsPlugin
643 | RemoveAttributesBySelectorPlugin
644 | RemoveAttrsPlugin
645 | RemoveDimensionsPlugin
646 | RemoveElementsByAttrPlugin
647 | RemoveOffCanvasPathsPlugin
648 | RemoveRasterImagesPlugin
649 | RemoveScriptElementPlugin
650 | RemoveStyleElementPlugin
651 | RemoveXMLNSPlugin
652 | ReusePathsPlugin
653 | SortAttrsPlugin;
654
655export interface CustomPlugin<P extends object = never> {
656 name: string;
657 type: 'perItem' | 'perItemReverse' | 'full';
658 params?: P | undefined;
659 fn: (ast: any, params: P, info: any) => any;
660}
661
662export interface SvgoParserError extends Error {
663 reason: string;
664 line: number;
665 column: number;
666 source: string;
667}
668
669export interface OptimizedError {
670 error: string;
671 modernError: SvgoParserError;
672}
673
674export interface OptimizedSvg {
675 data: string;
676 info: {
677 width: string;
678 height: string;
679 };
680 path?: string | undefined;
681 modernError: undefined;
682 error: undefined;
683}
684
685export type Plugin = DefaultPlugins | DefaultPlugins['name'] | CustomPlugin;
686
687export interface Js2SvgOptions {
688 /** @default '<!DOCTYPE' */
689 doctypeStart?: string | undefined;
690 /** @default '>' */
691 doctypeEnd?: string | undefined;
692 /**
693 * Allows to customize end of line characters which is usually resolved by os.EOL in node.
694 */
695 eol?: 'lf' | 'crlf' | undefined;
696 /**
697 * Ensures SVG output has a final newline which is required for some tools like git.
698 */
699 finalNewline?: boolean | undefined;
700 /** @default '<?' */
701 procInstStart?: string | undefined;
702 /** @default '?>' */
703 procInstEnd?: string | undefined;
704 /** @default '<' */
705 tagOpenStart?: string | undefined;
706 /** @default '>' */
707 tagOpenEnd?: string | undefined;
708 /** @default '</' */
709 tagCloseStart?: string | undefined;
710 /** @default '>' */
711 tagCloseEnd?: string | undefined;
712 /** @default '<' */
713 tagShortStart?: string | undefined;
714 /** @default '/>' */
715 tagShortEnd?: string | undefined;
716 /** @default '="' */
717 attrStart?: string | undefined;
718 /** @default '"' */
719 attrEnd?: string | undefined;
720 /** @default '<!--' */
721 commentStart?: string | undefined;
722 /** @default '-->' */
723 commentEnd?: string | undefined;
724 /** @default '<![CDATA[' */
725 cdataStart?: string | undefined;
726 /** @default ']]>' */
727 cdataEnd?: string | undefined;
728 /** @default '' */
729 textStart?: string | undefined;
730 /** @default '' */
731 textEnd?: string | undefined;
732 /** @default 4 */
733 indent?: number | undefined;
734 /** @default /[&'"<>]/g */
735 regEntities?: RegExp | undefined;
736 /** @default /[&"<>]/g */
737 regValEntities?: RegExp | undefined;
738 /** @default encodeEntity */
739 encodeEntity?: ((char?: string) => string) | undefined;
740 /** @default false */
741 pretty?: boolean | undefined;
742 /** @default true */
743 useShortTags?: boolean | undefined;
744}
745
746export interface Svg2JsOptions {
747 /** @default true */
748 strict?: boolean | undefined;
749 /** @default false */
750 trim?: boolean | undefined;
751 /** @default true */
752 normalize?: boolean | undefined;
753 /** @default true */
754 lowercase?: boolean | undefined;
755 /** @default true */
756 xmlns?: boolean | undefined;
757 /** @default true */
758 position?: boolean | undefined;
759}
760
761/**
762 * If plugins field is specified default list is fully overrided. To extend default list use extendDefaultPlugins
763 * utility.
764 *
765 * To disable one of default plugins use active field.
766 *
767 * @deprecated Use `preset-default` plugin instead
768 */
769export function extendDefaultPlugins(plugins: Plugin[]): Plugin[];
770
771export interface OptimizeOptions {
772 /** Output as Data URI string. */
773 datauri?: 'base64' | 'enc' | 'unenc' | undefined;
774
775 /** Precision of floating point numbers. Will be passed to each plugin that suppors this param. */
776 floatPrecision?: number | undefined;
777
778 /** Use full set of plugins. */
779 full?: boolean | undefined;
780
781 path?: string | undefined;
782
783 /** Pass over SVGs multiple times to ensure all optimizations are applied */
784 multipass?: boolean | undefined;
785
786 /** Options for rendering optimized SVG from AST. */
787 js2svg?: Js2SvgOptions | undefined;
788
789 /**
790 * Individual plugin configurations.
791 * For specific options, see plugin source in https://github.com/svg/svgo/tree/master/plugins.
792 */
793 plugins?: Plugin[] | undefined;
794
795 /** Options for parsing original SVG into AST. */
796 svg2js?: Svg2JsOptions | undefined;
797}
798
799/* The core of SVGO is optimize function. */
800export function optimize(svgString: string | Buffer, options?: OptimizeOptions): OptimizedSvg | OptimizedError;
801
802/**
803 * If you write a tool on top of svgo you might need a way to load svgo config.
804 *
805 * You can also specify relative or absolute path and customize current working directory.
806 */
807export function loadConfig(configFile: string, cwd?: string): Promise<OptimizeOptions>;
808export function loadConfig(): Promise<OptimizeOptions | null>;
809
\No newline at end of file