vitest/packages/browser/rollup.config.js

161 lines
3.6 KiB
JavaScript

import { createRequire } from 'node:module'
import commonjs from '@rollup/plugin-commonjs'
import json from '@rollup/plugin-json'
import resolve from '@rollup/plugin-node-resolve'
import { defineConfig } from 'rollup'
import oxc from 'unplugin-oxc/rollup'
import { createDtsUtils } from '../../scripts/build-utils.js'
const require = createRequire(import.meta.url)
const pkg = require('./package.json')
const external = [
...Object.keys(pkg.dependencies),
...Object.keys(pkg.peerDependencies || {}),
/^@?vitest(\/|$)/,
'@vitest/browser/utils',
'@vitest/browser/context',
'@vitest/browser/client',
'vitest/browser',
'worker_threads',
'node:worker_threads',
'vite',
'vitest/internal/browser',
]
const dtsUtils = createDtsUtils()
const dtsUtilsClient = createDtsUtils({
// need extra depth to avoid output conflict
isolatedDeclDir: '.types-client/tester',
cleanupDir: '.types-client',
})
const plugins = [
resolve({
preferBuiltins: true,
}),
json(),
commonjs(),
oxc({
transform: { target: 'node18' },
}),
]
const input = {
index: './src/node/index.ts',
}
export default () =>
defineConfig([
{
input,
output: {
dir: 'dist',
format: 'esm',
},
external,
context: 'null',
plugins: [
{
name: 'no-side-effects',
async resolveId(id, importer) {
// Clipboard injects "afterEach" callbacks
// We mark it as having no side effects to prevent it from being included in the bundle
if (id.includes('dataTransfer/Clipboard')) {
return {
...await this.resolve(id, importer),
moduleSideEffects: false,
}
}
},
},
...dtsUtils.isolatedDecl(),
...plugins,
],
},
{
input: {
'locators': './src/client/tester/locators/index.ts',
'expect-element': './src/client/tester/expect-element.ts',
},
output: {
dir: 'dist',
format: 'esm',
},
external,
plugins: [
...dtsUtilsClient.isolatedDecl(),
...plugins.filter(p => p.name !== 'unplugin-oxc'),
oxc({
transform: { target: 'node18' },
minify: true,
}),
],
},
{
input: './src/client/tester/context.ts',
output: {
file: 'dist/context.js',
format: 'esm',
},
external: ['vitest/internal/browser'],
plugins: [
oxc({
transform: { target: 'node18' },
}),
],
},
{
input: './src/client/client.ts',
output: {
file: 'dist/client.js',
format: 'esm',
},
plugins: [
resolve({
preferBuiltins: true,
}),
oxc({
transform: { target: 'node18' },
}),
],
},
{
input: './src/client/tester/state.ts',
output: {
file: 'dist/state.js',
format: 'iife',
},
plugins: [
oxc({
transform: { target: 'node18' },
}),
resolve(),
],
},
{
input: dtsUtils.dtsInput(input),
output: {
dir: 'dist',
entryFileNames: '[name].d.ts',
format: 'esm',
},
watch: false,
external,
plugins: dtsUtils.dts(),
},
{
input: dtsUtilsClient.dtsInput({
locators: './src/client/tester/locators/index.ts',
}),
output: {
dir: 'dist',
entryFileNames: '[name].d.ts',
format: 'esm',
},
watch: false,
external,
plugins: dtsUtilsClient.dts(),
},
])