vite-plugin-checker
Version:
Vite plugin that runs TypeScript type checker on a separate process.
292 lines (291 loc) • 9.29 kB
TypeScript
import { Worker } from "node:worker_threads";
import * as Stylelint from "stylelint";
import { ESLint } from "eslint";
import { ConfigEnv, ErrorPayload } from "vite";
//#region src/types.d.ts
interface TsConfigOptions {
/**
* path to tsconfig.json file
*/
tsconfigPath: string;
/**
* path to typescript package
*/
typescriptPath: string;
/**
* root path of cwd
*/
root: string;
/**
* root path of cwd
*/
buildMode: boolean;
}
/**
* TypeScript checker configuration
* @default true
*/
type TscConfig =
/**
* - set to `true` to enable type checking with default configuration
* - set to `false` to disable type checking, you can also remove `config.typescript` directly
*/
boolean | Partial<TsConfigOptions>;
/** vue-tsc checker configuration */
type VueTscConfig =
/**
* - set to `true` to enable type checking with default configuration
* - set to `false` to disable type checking, you can also remove `config.vueTsc` directly
*/
boolean | Partial<TsConfigOptions>;
/** ESLint checker configuration */
type EslintConfig = false | {
/**
* Configure path to watch files
*/
watchPath?: string | string[];
/**
* lintCommand will be executed at build mode, and will also be used as
* default config for dev mode when options.eslint.dev.eslint is nullable.
*/
lintCommand: string;
/**
* Use flat config mode. Only relevant for ESLint v9 which supports both
* flat config and legacy eslintrc modes. ESLint v10+ always uses flat config.
*
* - `true`: Use flat config (default for ESLint v9 and v10+)
* - `false`: Use legacy eslintrc config (ESLint v9 only)
*
* When not specified, defaults to `true` (flat config).
* @default true
*/
useFlatConfig?: boolean;
dev?: Partial<{
/** You can override the options of translated from lintCommand. */overrideConfig: ESLint.Options; /** which level of the diagnostic will be emitted from plugin */
logLevel: ('error' | 'warning')[];
}>;
};
/** Stylelint checker configuration */
type StylelintConfig = false | {
/**
* Configure path to watch files
*/
watchPath?: string | string[];
/**
* lintCommand will be executed at build mode, and will also be used as
* default config for dev mode when options.stylelint.dev.stylelint is nullable.
*/
lintCommand: string;
dev?: Partial<{
/** You can override the options of translated from lintCommand. */overrideConfig: Stylelint.LinterOptions; /** which level of the diagnostic will be emitted from plugin */
logLevel: ('error' | 'warning')[];
}>;
};
type BiomeCommand = 'lint' | 'check' | 'format' | 'ci';
/** Biome checker configuration */
type BiomeConfig = boolean | {
/**
* Command will be used in dev and build mode, will be override
* if `dev.command` or `build.command` is set their mode.
*/
command?: BiomeCommand;
/**
* Flags of the command, will be override if `dev.flags`
* or `build.command` is set their mode.
* */
flags?: string;
/**
* Configure path to watch files
*/
watchPath?: string | string[];
dev?: Partial<{
/** Command will be used in dev mode */command: BiomeCommand; /** Flags of the command */
flags?: string; /** Which level of the diagnostic will be emitted from plugin */
logLevel: ('error' | 'warning' | 'info')[];
}>;
build?: Partial<{
/** Command will be used in build mode */command: BiomeCommand; /** Flags of the command */
flags?: string;
}>;
};
type OxlintConfig = boolean | {
/**
* `lintCommand` will be executed at build mode.
*/
lintCommand: string;
/**
* Configure path to watch files
*/
watchPath?: string | string[];
dev?: Partial<{
/** Specifies which level of the diagnostic will be emitted from the plugin */logLevel: ('error' | 'warning')[];
}>;
};
declare enum DiagnosticLevel {
Warning = 0,
Error = 1,
Suggestion = 2,
Message = 3
}
type ErrorPayloadErr = ErrorPayload['err'];
interface DiagnosticToRuntime extends ErrorPayloadErr {
checkerId: string;
level?: DiagnosticLevel;
}
interface ClientDiagnosticPayload {
event: 'vite-plugin-checker:error';
data: {
checkerId: string;
diagnostics: DiagnosticToRuntime[];
};
}
interface ClientReconnectPayload {
event: 'vite-plugin-checker:reconnect';
data: ClientDiagnosticPayload[];
}
type ClientPayload = ClientDiagnosticPayload | ClientReconnectPayload;
/** checkers shared configuration */
interface SharedConfig {
/**
* Show overlay on UI view when there are errors or warnings in dev mode.
* - Set `true` to show overlay
* - Set `false` to disable overlay
* - Set with a object to customize overlay
*
* @defaultValue `true`
*/
overlay: boolean | {
/**
* Set this true if you want the overlay to default to being open if
* errors/warnings are found
* @defaultValue `true`
*/
initialIsOpen?: boolean | 'error';
/**
* The position of the vite-plugin-checker badge to open and close
* the diagnostics panel
* @default `bl`
*/
position?: 'tl' | 'tr' | 'bl' | 'br';
/**
* Use this to add extra style string to the badge button, the string format is
* [HTML element's style property](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/style)
* For example, if you want to hide the badge,
* you can pass `display: none;` to the badgeStyle property
* @default no default value
*/
badgeStyle?: string;
/**
* Use this to add extra style string to the diagnostic panel, the string format is
* [HTML element's style property](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/style)
* For example, if you want to change the opacity of the panel,
* you can pass `opacity: 0.8;` to the panelStyle property
* @default no default value
*/
panelStyle?: string;
};
/**
* stdout in terminal which starts the Vite server in dev mode.
* - Set `true` to enable
* - Set `false` to disable
*
* @defaultValue `true`
*/
terminal: boolean;
/**
* Enable checking in build mode
* @defaultValue `true`
*/
enableBuild: boolean;
/**
* Configure root directory of checkers
* @defaultValue no default value
*/
root?: string;
}
interface BuildInCheckers {
typescript: TscConfig;
vueTsc: VueTscConfig;
eslint: EslintConfig;
stylelint: StylelintConfig;
biome: BiomeConfig;
oxlint: OxlintConfig;
}
type BuildInCheckerNames = keyof BuildInCheckers;
type PluginConfig = SharedConfig & BuildInCheckers;
/** Userland plugin configuration */
type UserPluginConfig = Partial<PluginConfig>;
declare enum ACTION_TYPES {
config = "config",
configureServer = "configureServer",
overlayError = "overlayError",
console = "console",
unref = "unref"
}
interface AbstractAction {
type: string;
payload: unknown;
}
interface OverlayErrorAction extends AbstractAction {
type: ACTION_TYPES.overlayError;
/**
* send `ClientPayload` to raise error overlay
* send `null` to clear overlay for current checker
*/
payload: ClientPayload;
}
interface ConfigAction extends AbstractAction {
type: ACTION_TYPES.config;
payload: ConfigActionPayload;
}
interface ConfigureServerAction extends AbstractAction {
type: ACTION_TYPES.configureServer;
payload: {
root: string;
};
}
interface ConsoleAction extends AbstractAction {
type: ACTION_TYPES.console;
level: 'info' | 'warn' | 'error';
payload: string;
}
interface UnrefAction extends AbstractAction {
type: ACTION_TYPES.unref;
}
interface ConfigActionPayload {
enableOverlay: boolean;
enableTerminal: boolean;
env: ConfigEnv;
}
type Action = ConfigAction | ConfigureServerAction | ConsoleAction | OverlayErrorAction | UnrefAction;
type BuildCheckBin = BuildCheckBinStr | BuildCheckBinFn;
type BuildCheckBinStr = [string, ReadonlyArray<string>];
type BuildCheckBinFn = (config: UserPluginConfig) => [string, ReadonlyArray<string>];
interface ConfigureServeChecker {
worker: Worker;
config: (config: ConfigAction['payload']) => void;
configureServer: (serverConfig: ConfigureServerAction['payload']) => void;
}
interface ServeAndBuildChecker {
serve: ConfigureServeChecker;
build: {
buildBin: BuildCheckBin;
buildFile?: string;
};
}
/**
* create serve & build checker
*/
interface ServeChecker<T extends BuildInCheckerNames = any> {
createDiagnostic: CreateDiagnostic<T>;
}
interface CheckerDiagnostic {
config: (options: ConfigActionPayload) => unknown;
configureServer: (options: {
root: string;
}) => unknown;
}
type CreateDiagnostic<T extends BuildInCheckerNames = any> = (config: Pick<BuildInCheckers, T> & SharedConfig) => CheckerDiagnostic;
//#endregion
export { ACTION_TYPES, Action, BiomeConfig, BuildCheckBin, BuildCheckBinFn, BuildCheckBinStr, BuildInCheckerNames, BuildInCheckers, CheckerDiagnostic, ClientDiagnosticPayload, ClientPayload, ClientReconnectPayload, ConfigAction, ConfigureServeChecker, ConfigureServerAction, ConsoleAction, CreateDiagnostic, DiagnosticLevel, DiagnosticToRuntime, EslintConfig, OverlayErrorAction, OxlintConfig, PluginConfig, ServeAndBuildChecker, ServeChecker, SharedConfig, StylelintConfig, TscConfig, UnrefAction, UserPluginConfig, VueTscConfig };
//# sourceMappingURL=types.d.ts.map