|
import type { App } from './api/index.js'; |
|
export interface PluginDescriptor { |
|
id: string; |
|
label: string; |
|
app: App; |
|
packageName?: string; |
|
homepage?: string; |
|
componentStateTypes?: string[]; |
|
logo?: string; |
|
disableAppScope?: boolean; |
|
disablePluginScope?: boolean; |
|
|
|
|
|
|
|
|
|
enableEarlyProxy?: boolean; |
|
settings?: Record<string, PluginSettingsItem>; |
|
} |
|
export type PluginSettingsItem = { |
|
label: string; |
|
description?: string; |
|
} & ({ |
|
type: 'boolean'; |
|
defaultValue: boolean; |
|
} | { |
|
type: 'choice'; |
|
defaultValue: string | number; |
|
options: { |
|
value: string | number; |
|
label: string; |
|
}[]; |
|
component?: 'select' | 'button-group'; |
|
} | { |
|
type: 'text'; |
|
defaultValue: string; |
|
}); |
|
type InferSettingsType<T extends PluginSettingsItem> = [T] extends [{ |
|
type: 'boolean'; |
|
}] ? boolean : [T] extends [{ |
|
type: 'choice'; |
|
}] ? T['options'][number]['value'] : [T] extends [{ |
|
type: 'text'; |
|
}] ? string : unknown; |
|
export type ExtractSettingsTypes<O extends Record<string, PluginSettingsItem>> = { |
|
[K in keyof O]: InferSettingsType<O[K]>; |
|
}; |
|
export {}; |
|
|