/
getExportMode.ts
35 lines (31 loc) · 1.14 KB
/
getExportMode.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
import type Chunk from '../Chunk';
import type { NormalizedOutputOptions, WarningHandler } from '../rollup/types';
import { errIncompatibleExportOptionValue, errMixedExport, error } from './error';
export default function getExportMode(
chunk: Chunk,
{ exports: exportMode, name, format }: NormalizedOutputOptions,
facadeModuleId: string,
warn: WarningHandler
): 'default' | 'named' | 'none' {
const exportKeys = chunk.getExportNames();
if (exportMode === 'default') {
if (exportKeys.length !== 1 || exportKeys[0] !== 'default') {
return error(errIncompatibleExportOptionValue('default', exportKeys, facadeModuleId));
}
} else if (exportMode === 'none' && exportKeys.length) {
return error(errIncompatibleExportOptionValue('none', exportKeys, facadeModuleId));
}
if (exportMode === 'auto') {
if (exportKeys.length === 0) {
exportMode = 'none';
} else if (exportKeys.length === 1 && exportKeys[0] === 'default') {
exportMode = 'default';
} else {
if (format !== 'es' && format !== 'system' && exportKeys.includes('default')) {
warn(errMixedExport(facadeModuleId, name));
}
exportMode = 'named';
}
}
return exportMode;
}