/
index.ts
42 lines (35 loc) · 1.34 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import type { RollupPlugin, UnpluginContextMeta, UnpluginFactory, UnpluginInstance, UnpluginOptions } from '../types'
import { toArray } from '../utils'
export function getRollupPlugin <UserOptions = {}, Nested extends boolean = boolean>(
factory: UnpluginFactory<UserOptions, Nested>,
) {
return ((userOptions?: UserOptions) => {
const meta: UnpluginContextMeta = {
framework: 'rollup',
}
const rawPlugins = toArray(factory(userOptions!, meta))
const plugins = rawPlugins.map(plugin => toRollupPlugin(plugin))
return plugins.length === 1 ? plugins[0] : plugins
}) as UnpluginInstance<UserOptions, Nested>['rollup']
}
export function toRollupPlugin(plugin: UnpluginOptions, containRollupOptions = true): RollupPlugin {
if (plugin.transform && plugin.transformInclude) {
const _transform = plugin.transform
plugin.transform = function (code, id) {
if (plugin.transformInclude && !plugin.transformInclude(id))
return null
return _transform.call(this, code, id)
}
}
if (plugin.load && plugin.loadInclude) {
const _load = plugin.load
plugin.load = function (id) {
if (plugin.loadInclude && !plugin.loadInclude(id))
return null
return _load.call(this, id)
}
}
if (plugin.rollup && containRollupOptions)
Object.assign(plugin, plugin.rollup)
return plugin
}