import { CompatibilityDateSpec, CompatibilityDates } from 'compatx'; import { WatchConfigOptions, C12InputConfig, ResolvedConfig, ConfigWatcher } from 'c12'; import { LogLevel } from 'consola'; import { TSConfig } from 'pkg-types'; import { UnimportPluginOptions } from 'unimport/unplugin'; import { Unimport } from 'unimport'; import { Hookable } from 'hookable'; import { FSWatcher } from 'chokidar'; type DeepPartial = T extends Record ? { [P in keyof T]?: DeepPartial | T[P]; } : T; interface LoadConfigOptions { watch?: boolean; c12?: WatchConfigOptions; compatibilityDate?: CompatibilityDateSpec; } interface MonkeyConfig extends DeepPartial>, C12InputConfig { compatibilityDate?: CompatibilityDateSpec; name?: string; author?: string; description?: string; type?: 'dom' | 'background' | 'content'; keywords?: string[]; matches?: string[]; default_page?: string; } type MonkeyDynamicConfig = Pick; /** * Monkey normalized options (monkey.options) */ interface MonkeyOptions { _c12: ResolvedConfig | ConfigWatcher; _cli?: { command?: string; }; compatibilityDate: CompatibilityDates; debug: boolean; static: boolean; logLevel: LogLevel; runtimeConfig: MonkeyRuntimeConfig; workspaceDir: string; rootDir: string; srcDir: string; scanDirs: string[]; buildDir: string; output: { dir: string; serverDir: string; publicDir: string; }; dev: boolean; imports: UnimportPluginOptions | false; virtual: Record string | Promise)>; baseURL: string; typescript: { strict?: boolean; internalPaths?: boolean; generateRuntimeConfigTypes?: boolean; generateTsConfig?: boolean; /** the path of the generated `tsconfig.json`, relative to buildDir */ tsconfigPath: string; tsConfig?: Partial; }; nodeModulesDirs: string[]; alias: Record; entry: string; name: string; author: string; description: string; type: 'dom' | 'background' | 'content'; keywords: string[]; matches: string[]; default_page: string; repository: string; packageName: string; packageVersion: string; } interface MonkeyRuntimeConfigApp { baseURL: string; [key: string]: any; } interface MonkeyRuntimeConfig { app: MonkeyRuntimeConfigApp; nitro: { envPrefix?: string; envExpansion?: boolean; }; [key: string]: any; } interface BuildOptions { monkey: MonkeyOptions; } type HookResult = void | Promise; interface MonkeyHooks { "dev:reload": () => HookResult; "rollup:reload": () => HookResult; "restart": () => HookResult; "close": () => HookResult; } interface Monkey { options: MonkeyOptions; unimport?: Unimport; hooks: Hookable; close: () => Promise; updateConfig: (config: MonkeyDynamicConfig) => Promise | void; } interface MonkeyStaticBuildFlags { _asyncContext?: boolean; _websocket?: boolean; _tasks?: boolean; dev?: boolean; client?: boolean; monkey?: boolean; prerender?: boolean; server?: boolean; versions?: { monkey?: string; }; } declare global { namespace NodeJS { interface Process extends MonkeyStaticBuildFlags { } } interface ImportMeta extends MonkeyStaticBuildFlags { } } declare global { const defineMonkeyConfig: (config: MonkeyConfig) => MonkeyConfig; } interface MonkeyDevServer { reload?: () => void; watcher: FSWatcher; listen: () => Promise | void; close: () => Promise | void; } export type { BuildOptions, LoadConfigOptions, Monkey, MonkeyConfig, MonkeyDevServer, MonkeyDynamicConfig, MonkeyHooks, MonkeyOptions, MonkeyRuntimeConfig, MonkeyRuntimeConfigApp, MonkeyStaticBuildFlags };