quasar
132 строки · 4.1 Кб
1import { IResolve } from "./app-paths";
2import { QuasarConf } from "./configuration/conf";
3import { QuasarContext } from "./configuration/context";
4import { DeepRequired, DeepNonNullable } from "ts-essentials";
5import { BuildOptions as EsbuildConfiguration } from "esbuild";
6
7type QuasarConfProxy = DeepRequired<DeepNonNullable<QuasarConf>>;
8type ExtractQuasarConfParameters<
9FirstLevelKey extends keyof QuasarConfProxy,
10SecondLevelKey extends keyof QuasarConfProxy[FirstLevelKey],
11MaybeFunction = QuasarConfProxy[FirstLevelKey][SecondLevelKey]
12> = MaybeFunction extends (...args: any) => any
13? Parameters<MaybeFunction>
14: never;
15
16type chainWebpack = (
17fn: (
18...args: [...ExtractQuasarConfParameters<"build", "chainWebpack">, IndexAPI]
19) => void
20) => void;
21type extendWebpack = (
22fn: (
23...args: [
24...ExtractQuasarConfParameters<"build", "extendWebpack">,
25IndexAPI
26]
27) => void
28) => void;
29
30type getPersistentConf = () => Record<string, unknown>;
31type hasExtension = (extId: string) => boolean;
32
33interface BaseAPI {
34engine: '@quasar/app-webpack';
35
36ctx: QuasarContext;
37extId: string;
38resolve: IResolve;
39appDir: string;
40
41hasVite: false;
42hasWebpack: true;
43
44hasTypescript: () => Promise<boolean>;
45hasLint: () => Promise<boolean>;
46getStorePackageName: () => 'pinia' | 'vuex' | undefined;
47getNodePackagerName: () => Promise<'npm' | 'yarn' | 'pnpm' | 'bun'>;
48}
49
50interface SharedIndexInstallAPI {
51getPersistentConf: getPersistentConf;
52setPersistentConf: (cfg: Record<string, unknown>) => void;
53mergePersistentConf: (cfg: Record<string, unknown>) => void;
54compatibleWith: (packageName: string, semverCondition?: string) => void;
55hasPackage: (packageName: string, semverCondition?: string) => boolean;
56hasExtension: hasExtension;
57getPackageVersion: (packageName: string) => string | undefined;
58}
59
60export interface IndexAPI extends BaseAPI, SharedIndexInstallAPI {
61prompts: Record<string, unknown>;
62
63extendQuasarConf: (cfg: QuasarConf, api: IndexAPI) => void;
64
65chainWebpack: chainWebpack;
66extendWebpack: extendWebpack;
67
68extendBexScriptsConf: (cfg: EsbuildConfiguration, api: IndexAPI) => void;
69extendElectronMainConf: (cfg: EsbuildConfiguration, api: IndexAPI) => void;
70extendElectronPreloadConf: (cfg: EsbuildConfiguration, api: IndexAPI) => void;
71extendPWACustomSWConf: (cfg: EsbuildConfiguration, api: IndexAPI) => void;
72extendSSRWebserverConf: (cfg: EsbuildConfiguration, api: IndexAPI) => void;
73
74registerCommand: (
75commandName: string,
76fn: { args: string[]; params: Record<string, any> }
77) => void;
78
79registerDescribeApi: (name: string, relativePath: string) => void;
80
81beforeDev: (
82api: IndexAPI,
83payload: { quasarConf: QuasarConf }
84) => Promise<void> | void;
85afterDev: (
86api: IndexAPI,
87payload: { quasarConf: QuasarConf }
88) => Promise<void> | void;
89beforeBuild: (
90api: IndexAPI,
91payload: { quasarConf: QuasarConf }
92) => Promise<void> | void;
93afterBuild: (
94api: IndexAPI,
95payload: { quasarConf: QuasarConf }
96) => Promise<void> | void;
97onPublish: (
98api: IndexAPI,
99opts: { arg: string; distDir: string }
100) => Promise<void> | void;
101}
102
103type onExitLog = (msg: string) => void;
104export interface InstallAPI extends BaseAPI, SharedIndexInstallAPI {
105prompts: Record<string, unknown>;
106
107extendPackageJson: (extPkg: object | string) => void;
108extendJsonFile: (file: string, newData: object) => void;
109render: (templatePath: string, scope?: object) => void;
110renderFile: (
111relativeSourcePath: string,
112relativeTargetPath: string,
113scope?: object
114) => void;
115onExitLog: onExitLog;
116}
117
118export interface UninstallAPI extends BaseAPI {
119prompts: Record<string, unknown>;
120
121getPersistentConf: getPersistentConf;
122hasExtension: hasExtension;
123removePath: (__path: string) => void;
124onExitLog: onExitLog;
125}
126
127export interface PromptsAPI extends BaseAPI {
128compatibleWith: (packageName: string, semverCondition?: string) => void;
129hasPackage: (packageName: string, semverCondition?: string) => boolean;
130hasExtension: hasExtension;
131getPackageVersion: (packageName: string) => string | undefined;
132}
133