unplugin/test/unit-tests/bun/index.test.ts
Alistair Smith f674d582bc
feat: support bun plugin (#539)
* loose start for bun plugin

* implement bun

* support emitFile()

* fix Bun cases in integration test

* add bun to other test files

* remove bun-types-no-globals from github

* restore bun-types-no-globals from npm @^1.2

* bun does not yet support .onEnd, so for now we shouldn't fake it with brittle workarounds

* add Bun in the documentation

* some missing bun references in docs

* support multiple plugins

* use Bun namespace instead of importing module that won't necessarily exist

* Bun is a cute pink color!

* fix the transform hook

* fix for virtual modules

* tidy up

* setup bun in ci

* revert unplugin require path

* ignore bun in test-out folders

* update tests

* support onEnd

* remove

* implement guessLoader(), bun also now supports onEnd()

* don't eat errors/warnings

* we dont need to outdir for bun in this test

* bun writebundle test

* Update to bun@1.2.22 (supports onEnd and onResolve)

* use onStart()

* define onStart() in mocks

* onStart

* ci: run vitest in Bun so we can run bun's tests

* Bun error message if building outside of Bun

* skip bun specific tests when not running in bun

* refactor

* allow only

* ci: fix typecheck

---------

Co-authored-by: Kevin Deng <sxzz@sxzz.moe>
2025-11-03 18:30:00 +08:00

52 lines
1.4 KiB
TypeScript

import { createUnplugin } from 'unplugin'
import { describe, expect, it } from 'vitest'
describe.skipIf(typeof Bun === 'undefined')('bun plugin', () => {
it('should export bun plugin', () => {
const unplugin = createUnplugin(() => ({
name: 'test-plugin',
}))
expect(unplugin.bun).toBeDefined()
expect(typeof unplugin.bun).toBe('function')
})
it('should create bun plugin with correct name', () => {
const unplugin = createUnplugin(() => ({
name: 'test-plugin',
}))
const bunPlugin = unplugin.bun()
expect(bunPlugin.name).toBe('test-plugin')
expect(bunPlugin.setup).toBeDefined()
expect(typeof bunPlugin.setup).toBe('function')
})
it('should handle options correctly', () => {
interface Options {
value: string
}
const unplugin = createUnplugin<Options>(options => ({
name: 'test-plugin',
buildStart() {
expect(options.value).toBe('test')
},
}))
const bunPlugin = unplugin.bun({ value: 'test' })
expect(bunPlugin).toBeDefined()
})
it('should support multiple plugins with host name', () => {
const unplugin = createUnplugin(() => [
{ name: 'plugin-1' },
{ name: 'plugin-2' },
])
const bunPlugin = unplugin.bun()
expect(bunPlugin.name).toBe('unplugin-host:plugin-1:plugin-2')
expect(bunPlugin.setup).toBeDefined()
})
})