-
Notifications
You must be signed in to change notification settings - Fork 507
/
createBuildConfigs.ts
89 lines (82 loc) · 2.21 KB
/
createBuildConfigs.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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import { RollupOptions, OutputOptions } from 'rollup';
import * as fs from 'fs-extra';
import { concatAllArray } from 'jpjs';
import { paths } from './constants';
import { TsdxOptions, NormalizedOpts } from './types';
import { createRollupConfig } from './createRollupConfig';
// check for custom tsdx.config.js
let tsdxConfig = {
rollup(config: RollupOptions, _options: TsdxOptions): RollupOptions {
return config;
},
};
if (fs.existsSync(paths.appConfig)) {
tsdxConfig = require(paths.appConfig);
}
export async function createBuildConfigs(
opts: NormalizedOpts
): Promise<Array<RollupOptions & { output: OutputOptions }>> {
const allInputs = concatAllArray(
opts.input.map((input: string) =>
createAllFormats(opts, input).map(
(options: TsdxOptions, index: number) => ({
...options,
// We want to know if this is the first run for each entryfile
// for certain plugins (e.g. css)
writeMeta: index === 0,
})
)
)
);
return await Promise.all(
allInputs.map(async (options: TsdxOptions, index: number) => {
// pass the full rollup config to tsdx.config.js override
const config = await createRollupConfig(options, index);
return tsdxConfig.rollup(config, options);
})
);
}
function createAllFormats(
opts: NormalizedOpts,
input: string
): [TsdxOptions, ...TsdxOptions[]] {
return [
opts.format.includes('cjs') && {
...opts,
format: 'cjs',
env: 'development',
input,
},
opts.format.includes('cjs') && {
...opts,
format: 'cjs',
env: 'production',
input,
},
opts.format.includes('esm') && { ...opts, format: 'esm', input },
opts.format.includes('umd') && {
...opts,
format: 'umd',
env: 'development',
input,
},
opts.format.includes('umd') && {
...opts,
format: 'umd',
env: 'production',
input,
},
opts.format.includes('system') && {
...opts,
format: 'system',
env: 'development',
input,
},
opts.format.includes('system') && {
...opts,
format: 'system',
env: 'production',
input,
},
].filter(Boolean) as [TsdxOptions, ...TsdxOptions[]];
}