48 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 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;
 | |
|     /**
 | |
|      * Run the plugin setup and expose the api even if the devtools is not opened yet.
 | |
|      * Useful to record timeline events early.
 | |
|      */
 | |
|     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 {};
 |