diff --git a/lib/svgo.d.ts b/lib/svgo.d.ts index 3c6332b8..a042db6c 100644 --- a/lib/svgo.d.ts +++ b/lib/svgo.d.ts @@ -1,107 +1,28 @@ import type { StringifyOptions, DataUri, Plugin as PluginFn } from './types'; - -type PluginDef = { - name: string; - fn: PluginFn; -}; - -type Usage = { - name: T['name']; - params?: Parameters[1]; -}; - -type UsageReqParams = { - name: T['name']; - params: Parameters[1]; -}; +import type { + BuiltinsWithOptionalParams, + BuiltinsWithRequiredParams, +} from '../plugins/plugins-types'; type CustomPlugin = { name: string; fn: PluginFn; }; -type DefaultPlugin = - | Usage - | Usage - | Usage - | Usage - | Usage - | Usage - | Usage - | Usage - | Usage - | Usage - | Usage - | Usage - | Usage - | Usage - | Usage - | Usage - | Usage - | Usage - | Usage - | Usage - | Usage - | Usage - | Usage - | Usage - | Usage - | Usage - | Usage - | Usage - | Usage - | Usage - | Usage - | Usage - | Usage - | Usage - | Usage; - -type Overrides = T extends DefaultPlugin - ? { [key in T['name']]?: T['params'] | false } - : never; - -type PresetDefault = { - name: 'preset-default'; - params?: { - floatPrecision?: number; - /** - * All default plugins can be customized or disabled here - * for example - * { - * sortAttrs: { xmlnsOrder: "alphabetical" }, - * cleanupAttrs: false, - * } - */ - overrides?: Overrides; - }; -}; - -type BuiltinPluginWithOptionalParams = - | DefaultPlugin - | PresetDefault - | Usage - | Usage - | Usage - | Usage - | Usage - | Usage - | Usage - | Usage - | Usage - | Usage; - -type BuiltinPluginWithRequiredParams = - | UsageReqParams - | UsageReqParams - | UsageReqParams - | UsageReqParams - | UsageReqParams; - type PluginConfig = - | BuiltinPluginWithOptionalParams['name'] - | BuiltinPluginWithOptionalParams - | BuiltinPluginWithRequiredParams + | keyof BuiltinsWithOptionalParams + | { + [Name in keyof BuiltinsWithOptionalParams]: { + name: Name; + params?: BuiltinsWithOptionalParams[Name]; + }; + }[keyof BuiltinsWithOptionalParams] + | { + [Name in keyof BuiltinsWithRequiredParams]: { + name: Name; + params: BuiltinsWithRequiredParams[Name]; + }; + }[keyof BuiltinsWithRequiredParams] | CustomPlugin; export type Config = { diff --git a/plugins/plugins-types.ts b/plugins/plugins-types.ts index 0cd1c4b9..d3fc0d94 100644 --- a/plugins/plugins-types.ts +++ b/plugins/plugins-types.ts @@ -157,7 +157,23 @@ type DefaultPlugins = { sortDefsChildren: void; }; -type BuiltinsWithOptionalParams = DefaultPlugins & { +type PresetDefaultOverrides = { + [Name in keyof DefaultPlugins]?: DefaultPlugins[Name] | false; +}; + +export type BuiltinsWithOptionalParams = DefaultPlugins & { + 'preset-default': { + floatPrecision?: number; + /** + * All default plugins can be customized or disabled here + * for example + * { + * sortAttrs: { xmlnsOrder: "alphabetical" }, + * cleanupAttrs: false, + * } + */ + overrides?: PresetDefaultOverrides; + }; cleanupListOfValues: { floatPrecision?: number; leadingZero?: boolean; @@ -185,7 +201,7 @@ type BuiltinsWithOptionalParams = DefaultPlugins & { reusePaths: void; }; -type BuiltinsWithRequiredParams = { +export type BuiltinsWithRequiredParams = { addAttributesToSVGElement: { attribute?: string | Record; attributes?: Array>;