A Vite plugin that generates TypeScript declaration files from source files in library mode
npx @tessl/cli install tessl/npm-vite-plugin-dts@4.5.0Vite Plugin DTS is a comprehensive Vite plugin that automatically generates TypeScript declaration files (*.d.ts) from TypeScript (.ts, .tsx) and Vue (.vue) source files when building libraries with Vite. It provides flexible configuration options including declaration file bundling, custom resolvers, and advanced TypeScript compilation features.
npm install vite-plugin-dts -D or pnpm add vite-plugin-dts -Dimport dts from "vite-plugin-dts";For CommonJS:
const dts = require("vite-plugin-dts").default;Named imports:
import dts, { editSourceMapDir, type PluginOptions } from "vite-plugin-dts";import { defineConfig } from "vite";
import dts from "vite-plugin-dts";
export default defineConfig({
build: {
lib: {
entry: "src/index.ts",
name: "MyLib",
formats: ["es"],
fileName: "my-lib"
}
},
plugins: [
dts({
// Generate declaration files to match source structure
outDir: "dist",
// Include all TypeScript files
include: ["src/**/*.ts"],
// Exclude test files
exclude: ["src/**/*.test.ts"]
})
]
});Vite Plugin DTS is built around several key components:
dtsPlugin function that integrates with Vite's build lifecycleCore plugin factory function with comprehensive configuration options for declaration file generation, TypeScript compilation, and build integration.
function dts(options?: PluginOptions): import('vite').Plugin;
interface PluginOptions {
root?: string;
outDir?: string | string[];
entryRoot?: string;
strictOutput?: boolean;
compilerOptions?: ts.CompilerOptions | null;
tsconfigPath?: string;
resolvers?: Resolver[];
pathsToAliases?: boolean;
aliasesExclude?: (string | RegExp)[];
cleanVueFileName?: boolean;
staticImport?: boolean;
include?: string | string[];
exclude?: string | string[];
clearPureImport?: boolean;
insertTypesEntry?: boolean;
rollupTypes?: boolean;
bundledPackages?: string[];
rollupConfig?: RollupConfig;
rollupOptions?: IExtractorInvokeOptions;
copyDtsFiles?: boolean;
declarationOnly?: boolean;
logLevel?: LogLevel;
afterDiagnostic?: (diagnostics: readonly ts.Diagnostic[]) => MaybePromise<void>;
beforeWriteFile?: (filePath: string, content: string) => MaybePromise<void | false | { filePath?: string; content?: string }>;
afterRollup?: (result: ExtractorResult) => MaybePromise<void>;
afterBuild?: (emittedFiles: Map<string, string>) => MaybePromise<void>;
}Source map manipulation and path handling utilities for advanced declaration file processing.
function editSourceMapDir(content: string, fromDir: string, toDir: string): string | boolean;Extensible resolver system for handling non-standard file types during declaration generation.
interface Resolver {
name: string;
supports: (id: string) => void | boolean;
transform: (payload: {
id: string;
code: string;
root: string;
outDir: string;
host: ts.CompilerHost;
program: ts.Program;
}) => MaybePromise<
| { outputs: { path: string; content: string }[]; emitSkipped?: boolean; diagnostics?: readonly ts.Diagnostic[] }
| { path: string; content: string }[]
>;
}Pre-configured resolvers for common file types including JSON, Vue SFC, and Svelte components. These are automatically included in the plugin and do not need to be imported separately.
// Built-in resolvers are automatically included:
// - JSON file resolver for .json files
// - Vue SFC resolver for .vue files
// - Svelte component resolver for .svelte filesBundle multiple declaration files into single files using Microsoft API Extractor.
function rollupDeclarationFiles(options: BundleOptions): ExtractorResult;
interface BundleOptions {
root: string;
configPath?: string;
compilerOptions: Record<string, any>;
outDir: string;
entryPath: string;
fileName: string;
libFolder?: string;
rollupConfig?: RollupConfig;
rollupOptions?: IExtractorInvokeOptions;
}type MaybePromise<T> = T | Promise<T>;
type RollupConfig = Omit<
IExtractorConfigPrepareOptions['configObject'],
'projectFolder' | 'mainEntryPointFilePath' | 'compiler' | 'dtsRollup'
>;
interface BundleOptions {
root: string;
configPath?: string;
compilerOptions: Record<string, any>;
outDir: string;
entryPath: string;
fileName: string;
libFolder?: string;
rollupConfig?: RollupConfig;
rollupOptions?: IExtractorInvokeOptions;
}
function rollupDeclarationFiles(options: BundleOptions): ExtractorResult;
// External types from dependencies
interface ExtractorResult {
succeeded: boolean;
errorCount: number;
warningCount: number;
}
interface IExtractorInvokeOptions {
localBuild?: boolean;
showVerboseMessages?: boolean;
showDiagnostics?: boolean;
typescriptCompilerFolder?: string;
}
interface IExtractorConfigPrepareOptions {
configObject: any;
}
type LogLevel = 'info' | 'warn' | 'error' | 'silent';