### Install unplugin-dts Source: https://github.com/qmhc/unplugin-dts/blob/main/packages/unplugin-dts/README.md Install unplugin-dts as a development dependency using pnpm. ```sh pnpm i -D unplugin-dts ``` -------------------------------- ### Install vite-plugin-dts (Not Recommended) Source: https://github.com/qmhc/unplugin-dts/blob/main/README.md Install vite-plugin-dts, the previous version for Vite only. This is not recommended for new projects. ```sh pnpm i -D vite-plugin-dts ``` -------------------------------- ### Quick Start with Vite Source: https://github.com/qmhc/unplugin-dts/blob/main/packages/unplugin-dts/README.md Integrate unplugin-dts into your Vite project by importing and adding it to the plugins array in your Vite configuration. ```ts import dts from 'unplugin-dts/vite' export default defineConfig({ plugins: [dts()], }) ``` -------------------------------- ### Vue Project Configuration Source: https://github.com/qmhc/unplugin-dts/blob/main/docs/en/usage.md For Vue projects, install `@vue/language-core` as a peer dependency. Explicitly setting the `processor` option to 'vue' is recommended. ```sh pnpm i -D @vue/language-core ``` ```ts export default defineConfig({ plugins: [dts({ processor: 'vue' })], }) ``` -------------------------------- ### Rspack Configuration Source: https://github.com/qmhc/unplugin-dts/blob/main/docs/en/usage.md Configure unplugin-dts for Rspack projects in rspack.config.mjs. This example demonstrates setting up entry points, output paths, and module rules with SWC loader. ```ts import { resolve } from 'node:path' import { fileURLToPath } from 'node:url' import { defineConfig } from '@rspack/cli' import dts from 'unplugin-dts/rspack' const rootDir = resolve(fileURLToPath(import.meta.url), '..') export default defineConfig({ entry: { index: './src/index.ts', }, output: { path: resolve(rootDir, 'dist'), }, module: { rules: [ { test: /.js$/, use: [ { loader: 'builtin:swc-loader', options: { jsc: { parser: { syntax: 'ecmascript', }, }, }, }, ], }, { test: /.ts$/, use: [ { loader: 'builtin:swc-loader', options: { jsc: { parser: { syntax: 'typescript', decorators: true, }, }, }, }, ], }, ], }, plugins: [dts()], }) ``` -------------------------------- ### Bundle Types with API Extractor Source: https://github.com/qmhc/unplugin-dts/blob/main/docs/en/usage.md To bundle all generated declaration files into a single file, install @microsoft/api-extractor and set `bundleTypes: true` in the dts plugin options. ```sh pnpm i -D @microsoft/api-extractor ``` ```ts export default defineConfig({ plugins: [dts({ bundleTypes: true })], }) ``` -------------------------------- ### Rollup Configuration Source: https://github.com/qmhc/unplugin-dts/blob/main/docs/en/usage.md Integrate unplugin-dts into your Rollup build process by including it in the plugins array in rollup.config.mjs. This example uses @rollup/plugin-typescript. ```ts import { defineConfig } from 'rollup' import typescript from '@rollup/plugin-typescript' import dts from 'unplugin-dts/rollup' export default defineConfig({ input: { index: './src/index.ts', }, output: [ { dir: 'dist', exports: 'named', format: 'esm', }, ], plugins: [typescript(), dts()], }) ``` -------------------------------- ### Webpack Configuration Source: https://github.com/qmhc/unplugin-dts/blob/main/docs/en/usage.md Add unplugin-dts to your Webpack configuration in webpack.config.js. This example includes basic module rules for TypeScript. ```ts import { resolve } from 'node:path' import dts from 'unplugin-dts/webpack' export default { entry: { index: './src/index.ts', }, output: { path: resolve(__dirname, 'dist'), }, module: { rules: [ { test: /.ts$/, use: 'ts-loader', exclude: /node_modules/, }, ], }, plugins: [dts()], } ``` -------------------------------- ### Configure outDirs Option Source: https://github.com/qmhc/unplugin-dts/blob/main/docs/en/options.md Demonstrates different ways to configure the `outDirs` option, specifying output directories for declaration files. This can be a simple string, an array of strings, an object with a module format, or a mixed array. ```typescript outDirs: 'dist' ``` ```typescript outDirs: ['dist', 'types'] ``` ```typescript outDirs: { dir: 'dist', moduleFormat: 'esm' } ``` ```typescript outDirs: [ 'dist', { dir: 'dist-cjs', moduleFormat: 'cjs' }, { dir: 'dist-esm', moduleFormat: 'esm' } ] ``` -------------------------------- ### afterBootstrap Hook Type Source: https://github.com/qmhc/unplugin-dts/blob/main/docs/en/options.md Hook called immediately after the Runtime instance is created in buildStart. Program, host, and aliases are initialized, but no emission has occurred. ```typescript afterBootstrap: (runtime: Runtime) => MaybePromise ``` -------------------------------- ### Esbuild Configuration Source: https://github.com/qmhc/unplugin-dts/blob/main/docs/en/usage.md Use unplugin-dts with Esbuild in your build script. Import the plugin and add it to the plugins array in the build configuration. ```ts import { build } from 'esbuild' import dts from 'unplugin-dts/esbuild' await build({ entryPoints: ['src/index.ts'], format: 'esm', outdir: 'dist', bundle: true, plugins: [dts()], }) ``` -------------------------------- ### OutDirConfig Interface Source: https://github.com/qmhc/unplugin-dts/blob/main/docs/en/options.md Defines configuration for an output directory, including its path and module format. ```typescript export interface OutDirConfig { /** Output directory path */ dir: string, /** * Module format * - 'cjs': generates .d.cts files * - 'esm': generates .d.mts files * - undefined: generates .d.ts files (default) */ moduleFormat?: 'cjs' | 'esm' } ``` -------------------------------- ### Basic Vite Configuration with unplugin-dts Source: https://github.com/qmhc/unplugin-dts/blob/main/README.md Integrate unplugin-dts into your Vite project by importing and adding it to the plugins array in your configuration. ```ts import dts from 'unplugin-dts/vite' export default defineConfig({ plugins: [dts()], }) ``` -------------------------------- ### Rolldown Configuration Source: https://github.com/qmhc/unplugin-dts/blob/main/docs/en/usage.md Set up unplugin-dts for Rolldown projects by adding it to the plugins array in rolldown.config.mjs. This configuration is similar to Rollup. ```ts import { defineConfig } from 'rolldown' import dts from 'unplugin-dts/rolldown' export default defineConfig({ input: { index: './src/index.ts', }, output: [ { dir: 'dist', exports: 'named', format: 'esm', }, ], plugins: [dts()], }) ``` -------------------------------- ### Tsconfig App for Monorepo Type Inlining Source: https://github.com/qmhc/unplugin-dts/blob/main/docs/en/faq.md Configure the paths in your tsconfig.app.json to map internal monorepo package names to their source files. This complements the Vite configuration for type inlining. ```json { "compilerOptions": { "paths": { "packageB": ["../packageB/src/index.ts"] } } } ``` -------------------------------- ### Vite Configuration Source: https://github.com/qmhc/unplugin-dts/blob/main/docs/en/usage.md Configure unplugin-dts for Vite projects by adding it to the plugins array in vite.config.ts. Ensure your build library configuration is set up correctly. ```ts import { resolve } from 'path' import { defineConfig } from 'vite' import dts from 'unplugin-dts/vite' export default defineConfig({ build: { lib: { entry: resolve(__dirname, 'src/index.ts'), name: 'MyLib', formats: ['es'], fileName: 'my-lib', }, }, plugins: [dts()], }) ``` -------------------------------- ### afterBuild Hook Type Source: https://github.com/qmhc/unplugin-dts/blob/main/docs/en/options.md Hook called after all declaration files are written. The map contains path-to-content for successfully written files. ```typescript afterBuild: (emittedFiles: Map) => MaybePromise ``` -------------------------------- ### beforeWriteFile Hook Type Source: https://github.com/qmhc/unplugin-dts/blob/main/docs/en/options.md Hook called before each declaration file is written. Return false to skip, or an object to override path/content. ```typescript beforeWriteFile: ( filePath: string, content: string, ) => MaybePromise< | void | false | { filePath?: string, content?: string } > ``` -------------------------------- ### Configure tsconfig.json for node_modules Type Inference Source: https://github.com/qmhc/unplugin-dts/blob/main/docs/en/faq.md Use this workaround when TypeScript cannot infer types from packages in `node_modules` due to soft links (pnpm). Add `baseUrl` and `paths` to your `tsconfig.json` to specify package locations. ```json { "compilerOptions": { "baseUrl": ".", "paths": { "third-lib": ["node_modules/third-lib"] } } } ``` -------------------------------- ### Define Alias Options Source: https://github.com/qmhc/unplugin-dts/blob/main/docs/en/options.md Specify additional alias mappings for declaration files. Custom aliases take precedence over tsconfig-derived aliases. ```typescript type AliasOptions = | { find: string | RegExp, replacement: string }[] | { [find: string]: string } ``` -------------------------------- ### ResolverTransformOutput Interface Source: https://github.com/qmhc/unplugin-dts/blob/main/docs/en/options.md Represents the output of a resolver transformation, containing the path and content of a generated declaration file. ```typescript export interface ResolverTransformOutput { path: string, content: string, } ``` -------------------------------- ### API Extractor Configuration Source: https://github.com/qmhc/unplugin-dts/blob/main/docs/en/options.md Override the configuration of `@microsoft/api-extractor` when `bundleTypes` is enabled. ```typescript interface BundleTypesOptions { extractorConfig?: BundleConfig bundledPackages?: string[] invokeOptions?: ExtractorInvokeOptions } ``` -------------------------------- ### API Extractor Bundled Packages Configuration Source: https://github.com/qmhc/unplugin-dts/blob/main/docs/en/faq.md When using bundleTypes: true, specify packages to be inlined by @microsoft/api-extractor using the bundledPackages option. Note limitations regarding single rolled-up files and complex type inlining. ```typescript dts({ bundleTypes: { bundledPackages: ['packageB', '@scope/*'], }, }) ``` -------------------------------- ### afterRollup Hook Type Source: https://github.com/qmhc/unplugin-dts/blob/main/docs/en/options.md Hook called after each entry is successfully bundled by @microsoft/api-extractor. This hook is not called if bundling fails. ```typescript afterRollup: (result: ExtractorResult) => MaybePromise ``` -------------------------------- ### Vite Template tsconfigPath Source: https://github.com/qmhc/unplugin-dts/blob/main/docs/en/usage.md When using unplugin-dts with official Vite templates, specify the `tsconfigPath` option to ensure correct type generation. ```ts export default defineConfig({ plugins: [dts({ tsconfigPath: './tsconfig.app.json' })], }) ``` -------------------------------- ### Vite Config for Monorepo Type Inlining Source: https://github.com/qmhc/unplugin-dts/blob/main/docs/en/faq.md Configure Vite's resolve alias and the dts plugin's include option to point to the source code of internal monorepo packages. This ensures TypeScript emits types as if they belong to the current package. ```typescript import { defineConfig } from 'vite' import dts from 'vite-plugin-dts' import { resolve } from 'node:path' export default defineConfig({ resolve: { alias: { // Point to the source entry of the internal package 'packageB': resolve(__dirname, '../packageB/src/index.ts'), }, }, plugins: [ dts({ // Include the internal package's source files so they are emitted together include: ['src', '../packageB/src'], tsconfigPath: resolve(__dirname, 'tsconfig.app.json'), }), ], }) ``` -------------------------------- ### API Extractor Config Path Source: https://github.com/qmhc/unplugin-dts/blob/main/docs/en/options.md Specify an external api-extractor config file. The configuration is merged with internal base config and inline overrides. ```typescript bundleTypes: { configPath: './api-extractor.json' } ``` -------------------------------- ### Resolver Interface Source: https://github.com/qmhc/unplugin-dts/blob/main/docs/en/options.md Defines a resolver for transforming source files into declaration files. Supports determining if a file is supported and transforming it. ```typescript export interface Resolver { /** * The name of the resolver. * A later resolver with the same name will overwrite the earlier one. */ name: string, /** Determine whether the resolver supports the file */ supports: (id: string) => void | boolean, /** * Transform source files into declaration files. * Note that the returned paths should be based on `outDir`, or relative to `root`. */ transform: (payload: { id: string, code: string, root: string, outDir: string, host: ts.CompilerHost, program: ts.Program, }) => MaybePromise< | ResolverTransformOutput[] | { outputs: ResolverTransformOutput[], emitSkipped?: boolean, diagnostics?: readonly ts.Diagnostic[], } > } ``` -------------------------------- ### Transform Dynamic Imports to Static Source: https://github.com/qmhc/unplugin-dts/blob/main/docs/en/options.md Transforms dynamic `import()` type references into static top-level imports. This option handles nested generics and synthesizes default import names. ```typescript // Before import('vue').DefineComponent // After import { DefineComponent } from 'vue' ``` -------------------------------- ### Vue Component DefineEmits Workaround Source: https://github.com/qmhc/unplugin-dts/blob/main/docs/en/faq.md Use object-style defineEmits when exceeding 8 interface-overloaded emits to avoid type inference issues with Vue language tools. ```typescript defineEmits<{ click: [id: number], submit: [value: string], // ...more events }>() ``` -------------------------------- ### afterDiagnostic Hook Type Source: https://github.com/qmhc/unplugin-dts/blob/main/docs/en/options.md Hook called after TypeScript diagnostics are collected and before files are emitted. Includes declaration, semantic, and syntactic diagnostics. ```typescript afterDiagnostic: (diagnostics: readonly ts.Diagnostic[]) => MaybePromise ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.