adnbn
Version:
Addon Bone - Cross-browser web extension framework with shared code base
56 lines (53 loc) • 2.8 kB
TypeScript
import { Required } from 'utility-types';
import { T as EntrypointOptions } from '../manifest-DAV18Z2K.js';
import { Awaiter, DeepAsyncProxy } from './helpers.js';
import { MessageSendOptions, MessageSender } from './message.js';
import 'react';
import './app.js';
import './browser.js';
import './locale.js';
type TransportType = ((...args: any[]) => Promise<any>) | {
[key: string]: any | TransportType;
};
interface TransportDictionary {
[key: string]: any;
}
type TransportName = Extract<keyof TransportDictionary, string>;
type TransportTarget<T extends TransportDictionary, K extends keyof T> = T[K];
type TransportProxyTarget<T extends TransportDictionary, K extends keyof T> = DeepAsyncProxy<T[K]>;
interface TransportManager {
add<K extends TransportName>(name: K, instance: TransportDictionary[K]): this;
get<K extends TransportName>(name: K): TransportDictionary[K] | undefined;
has(name: TransportName): boolean;
remove<K extends TransportName>(name: K): TransportDictionary[K] | undefined;
clear(): this;
}
interface TransportMessageData {
path?: string;
args: any[];
}
interface TransportMessage {
send(data: TransportMessageData, options?: MessageSendOptions): any;
watch(handler: (data: TransportMessageData, sender: MessageSender) => any): void;
}
interface TransportProvider<T extends TransportType> {
get(): T;
destroy(): void;
}
interface TransportRegister<T extends TransportType, A extends any[] = []> extends TransportProvider<T> {
register(...args: A): T;
}
interface TransportConfig {
name: string;
}
type TransportOptions = TransportConfig & EntrypointOptions;
type TransportEntrypointOptions = Partial<TransportOptions>;
type TransportInitGetter<O extends TransportEntrypointOptions, T extends TransportType> = (options: O) => T;
type TransportMainHandler<O extends TransportEntrypointOptions, T extends TransportType> = (instance: T, options: O) => Awaiter<void>;
type TransportDefinition<O extends TransportOptions, T extends TransportType> = TransportEntrypointOptions & {
init: TransportInitGetter<O, T>;
main?: TransportMainHandler<O, T>;
};
type TransportUnresolvedDefinition<O extends TransportOptions, T extends TransportType> = Partial<TransportDefinition<O, T>>;
type TransportResolvedDefinition<O extends TransportOptions, T extends TransportType> = Required<TransportDefinition<O, T>, "name" | "init">;
export type { TransportConfig, TransportDefinition, TransportDictionary, TransportEntrypointOptions, TransportInitGetter, TransportMainHandler, TransportManager, TransportMessage, TransportMessageData, TransportName, TransportOptions, TransportProvider, TransportProxyTarget, TransportRegister, TransportResolvedDefinition, TransportTarget, TransportType, TransportUnresolvedDefinition };