/
create-bundler.ts
41 lines (37 loc) · 1.5 KB
/
create-bundler.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
import { bindingifyInputOptions } from '@src/options/bindingify-input-options'
import { Bundler } from '../binding'
import type { InputOptions } from '../options/input-options'
import { type OutputOptions } from '../options/output-options'
import { initializeParallelPlugins } from './initialize-parallel-plugins'
import { normalizeInputOptions } from './normalize-input-options'
import { normalizeOutputOptions } from './normalize-output-options'
import { bindingifyOutputOptions } from '@src/options/bindingify-output-options'
export async function createBundler(
inputOptions: InputOptions,
outputOptions: OutputOptions,
): Promise<{ bundler: Bundler; stopWorkers?: () => Promise<void> }> {
// Convert `InputOptions` to `NormalizedInputOptions`.
const normalizedInputOptions = await normalizeInputOptions(inputOptions)
const parallelPluginInitResult = await initializeParallelPlugins(
normalizedInputOptions.plugins,
)
try {
const normalizedOutputOptions = normalizeOutputOptions(outputOptions)
// Convert `NormalizedInputOptions` to `BindingInputOptions`
const bindingInputOptions = bindingifyInputOptions(
normalizedInputOptions,
normalizedOutputOptions,
)
return {
bundler: new Bundler(
bindingInputOptions,
bindingifyOutputOptions(normalizedOutputOptions),
parallelPluginInitResult?.registry,
),
stopWorkers: parallelPluginInitResult?.stopWorkers,
}
} catch (e) {
await parallelPluginInitResult?.stopWorkers()
throw e
}
}