import { IResolve } from "./app-paths"; import { QuasarConf, ResolvedQuasarConfValue } from "./configuration/conf"; import { QuasarContext } from "./configuration/context"; import { BuildOptions as EsbuildConfiguration } from "esbuild"; type ExtendViteConfHandler = ( fn: ( ...args: [...Parameters>, api: IndexAPI] ) => void ) => void; type GetPersistentConfHandler = () => Record; type HasExtensionHandler = (extId: string) => boolean; interface BaseAPI { engine: '@quasar/app-vite'; ctx: QuasarContext; extId: string; resolve: IResolve; appDir: string; hasVite: true; hasWebpack: false; hasTypescript: () => Promise; hasLint: () => Promise; getStorePackageName: () => 'pinia' | undefined; getNodePackagerName: () => Promise<'npm' | 'yarn' | 'pnpm' | 'bun'>; } interface SharedIndexInstallAPI { getPersistentConf: GetPersistentConfHandler; setPersistentConf: (cfg: Record) => void; mergePersistentConf: (cfg: Record) => void; compatibleWith: (packageName: string, semverCondition?: string) => void; hasPackage: (packageName: string, semverCondition?: string) => boolean; hasExtension: HasExtensionHandler; getPackageVersion: (packageName: string) => string | undefined; } type Callback = (callback: T) => void; export interface IndexAPI extends BaseAPI, SharedIndexInstallAPI { prompts: Record; extendQuasarConf: Callback<(cfg: QuasarConf, api: IndexAPI) => void>; extendViteConf: ExtendViteConfHandler; extendBexScriptsConf: Callback<(cfg: EsbuildConfiguration, api: IndexAPI) => void>; extendElectronMainConf: Callback<(cfg: EsbuildConfiguration, api: IndexAPI) => void>; extendElectronPreloadConf: Callback<(cfg: EsbuildConfiguration, api: IndexAPI) => void>; extendPWACustomSWConf: Callback<(cfg: EsbuildConfiguration, api: IndexAPI) => void>; extendSSRWebserverConf: Callback<(cfg: EsbuildConfiguration, api: IndexAPI) => void>; registerCommand: ( commandName: string, fn: (params: { args: string[]; params: Record }) => Promise | void ) => void; registerDescribeApi: (name: string, relativePath: string) => void; beforeDev: Callback<( api: IndexAPI, payload: { quasarConf: QuasarConf } ) => Promise | void>; afterDev: Callback<( api: IndexAPI, payload: { quasarConf: QuasarConf } ) => Promise | void>; beforeBuild: Callback<( api: IndexAPI, payload: { quasarConf: QuasarConf } ) => Promise | void>; afterBuild: Callback<( api: IndexAPI, payload: { quasarConf: QuasarConf } ) => Promise | void>; onPublish: Callback<( api: IndexAPI, opts: { arg: string; distDir: string } ) => Promise | void>; } type ExitLogHandler = (msg: string) => void; export interface InstallAPI extends BaseAPI, SharedIndexInstallAPI { prompts: Record; extendPackageJson: (extPkg: object | string) => void; extendJsonFile: (file: string, newData: object) => void; render: (templatePath: string, scope?: object) => void; renderFile: ( relativeSourcePath: string, relativeTargetPath: string, scope?: object ) => void; onExitLog: ExitLogHandler; } export interface UninstallAPI extends BaseAPI { prompts: Record; getPersistentConf: GetPersistentConfHandler; hasExtension: HasExtensionHandler; removePath: (__path: string) => void; onExitLog: ExitLogHandler; } export interface PromptsAPI extends BaseAPI { compatibleWith: (packageName: string, semverCondition?: string) => void; hasPackage: (packageName: string, semverCondition?: string) => boolean; hasExtension: HasExtensionHandler; getPackageVersion: (packageName: string) => string | undefined; }