mirror of
https://github.com/vitest-dev/vitest.git
synced 2025-12-08 18:26:03 +00:00
68 lines
1.8 KiB
JavaScript
68 lines
1.8 KiB
JavaScript
// @ts-check
|
|
import fs from 'node:fs'
|
|
import path from 'node:path'
|
|
import dts from 'rollup-plugin-dts'
|
|
import isolatedDecl from 'unplugin-isolated-decl/rollup'
|
|
|
|
export function createDtsUtils({
|
|
isolatedDeclDir = '.types',
|
|
cleanupDir = '.types',
|
|
} = {}) {
|
|
return {
|
|
/**
|
|
* @returns {import('rollup').Plugin[]} plugins
|
|
*/
|
|
isolatedDecl() {
|
|
return [
|
|
isolatedDecl({
|
|
transformer: 'oxc',
|
|
transformOptions: { stripInternal: true },
|
|
// exclude direct imports to other package sources
|
|
include: path.join(process.cwd(), '**/*.ts'),
|
|
extraOutdir: isolatedDeclDir,
|
|
}),
|
|
{
|
|
name: 'isolated-decl-dts-extra',
|
|
resolveId(source) {
|
|
// silence node-resolve error by isolated-decl transform of type import
|
|
if (source.startsWith('vite/types/')) {
|
|
return { id: '/node_modules/', external: true }
|
|
}
|
|
},
|
|
},
|
|
]
|
|
},
|
|
/**
|
|
* @returns {import('rollup').Plugin[]} plugins
|
|
*/
|
|
dts() {
|
|
return [
|
|
dts({ respectExternal: true }),
|
|
{
|
|
name: 'isolated-decl-dts-extra',
|
|
buildEnd(error) {
|
|
// keep temporary type files on watch mode since removing them makes re-build flaky
|
|
if (!error && !this.meta.watchMode) {
|
|
fs.rmSync(`dist/${cleanupDir}`, { recursive: true, force: true })
|
|
}
|
|
},
|
|
},
|
|
]
|
|
},
|
|
/**
|
|
* @param {Record<string, string> | string} input
|
|
*/
|
|
dtsInput(input, { ext = 'ts' } = {}) {
|
|
if (typeof input === 'string') {
|
|
input = { index: '' }
|
|
}
|
|
return Object.fromEntries(
|
|
Object.keys(input).map(name => [
|
|
name,
|
|
`dist/${isolatedDeclDir}/${name}.d.${ext}`,
|
|
]),
|
|
)
|
|
},
|
|
}
|
|
}
|