UNPKG

@quasar/app-webpack

Version:

Quasar Framework App CLI with Webpack

135 lines (113 loc) 4.43 kB
import { IResolve } from "./app-paths"; import { QuasarConf } from "./configuration/conf"; import { QuasarContext } from "./configuration/context"; import { DeepRequired, DeepNonNullable } from "ts-essentials"; import { BuildOptions as EsbuildConfiguration } from "esbuild"; type QuasarConfProxy = DeepRequired<DeepNonNullable<QuasarConf>>; type ExtractQuasarConfParameters< FirstLevelKey extends keyof QuasarConfProxy, SecondLevelKey extends keyof QuasarConfProxy[FirstLevelKey], MaybeFunction = QuasarConfProxy[FirstLevelKey][SecondLevelKey] > = MaybeFunction extends (...args: any) => any ? Parameters<MaybeFunction> : never; type ChainWebpackHandler = ( fn: ( ...args: [...ExtractQuasarConfParameters<"build", "chainWebpack">, IndexAPI] ) => void ) => void; type ExtendWebpackHandler = ( fn: ( ...args: [ ...ExtractQuasarConfParameters<"build", "extendWebpack">, IndexAPI ] ) => void ) => void; type GetPersistentConfHandler = () => Record<string, unknown>; type HasExtensionHandler = (extId: string) => boolean; interface BaseAPI { engine: '@quasar/app-webpack'; ctx: QuasarContext; extId: string; resolve: IResolve; appDir: string; hasVite: false; hasWebpack: true; hasTypescript: () => Promise<boolean>; hasLint: () => Promise<boolean>; getStorePackageName: () => 'pinia' | undefined; getNodePackagerName: () => Promise<'npm' | 'yarn' | 'pnpm' | 'bun'>; } interface SharedIndexInstallAPI { getPersistentConf: GetPersistentConfHandler; setPersistentConf: (cfg: Record<string, unknown>) => void; mergePersistentConf: (cfg: Record<string, unknown>) => void; compatibleWith: (packageName: string, semverCondition?: string) => void; hasPackage: (packageName: string, semverCondition?: string) => boolean; hasExtension: HasExtensionHandler; getPackageVersion: (packageName: string) => string | undefined; } type Callback<T> = (callback: T) => void; export interface IndexAPI extends BaseAPI, SharedIndexInstallAPI { prompts: Record<string, unknown>; extendQuasarConf: Callback<(cfg: QuasarConf, api: IndexAPI) => void>; chainWebpack: ChainWebpackHandler; extendWebpack: ExtendWebpackHandler; 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<string, any> }) => Promise<void> | void ) => void; registerDescribeApi: (name: string, relativePath: string) => void; beforeDev: Callback<( api: IndexAPI, payload: { quasarConf: QuasarConf } ) => Promise<void> | void>; afterDev: Callback<( api: IndexAPI, payload: { quasarConf: QuasarConf } ) => Promise<void> | void>; beforeBuild: Callback<( api: IndexAPI, payload: { quasarConf: QuasarConf } ) => Promise<void> | void>; afterBuild: Callback<( api: IndexAPI, payload: { quasarConf: QuasarConf } ) => Promise<void> | void>; onPublish: Callback<( api: IndexAPI, opts: { arg: string; distDir: string } ) => Promise<void> | void>; } type ExitLogHandler = (msg: string) => void; export interface InstallAPI extends BaseAPI, SharedIndexInstallAPI { prompts: Record<string, unknown>; 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<string, unknown>; 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; }