58bb449f66348875e1e79e8f655e2272271ded23337246bcaa122fd51ed2faede4bc11c0993264984608392e0f54427bc94b3c080625d8a89a03b105de8362-exec 23 KB

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