/
cjs.ts
88 lines (74 loc) · 1.93 KB
/
cjs.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
import esModuleExport from './shared/esModuleExport';
import { OutputOptions } from '../rollup/types';
import { Bundle as MagicStringBundle } from 'magic-string';
import getExportBlock from './shared/getExportBlock';
import { FinaliserOptions } from './index';
export default function cjs(
magicString: MagicStringBundle,
{
graph,
isEntryModuleFacade,
namedExportsMode,
hasExports,
intro,
outro,
dependencies,
exports
}: FinaliserOptions,
options: OutputOptions
) {
intro =
(options.strict === false ? intro : `'use strict';\n\n${intro}`) +
(namedExportsMode && hasExports && options.legacy !== true && isEntryModuleFacade
? `${esModuleExport}\n\n`
: '');
let needsInterop = false;
const varOrConst = graph.varOrConst;
const interop = options.interop !== false;
const importBlock = dependencies
.map(
({
id,
namedExportsMode,
isChunk,
name,
reexports,
imports,
exportsNames,
exportsDefault
}) => {
if (!reexports && !imports) {
return `require('${id}');`;
}
if (!interop || isChunk || !exportsDefault || !namedExportsMode) {
return `${varOrConst} ${name} = require('${id}');`;
}
needsInterop = true;
if (exportsNames) {
return (
`${varOrConst} ${name} = require('${id}');` +
`\n${varOrConst} ${name}__default = _interopDefault(${name});`
);
}
return `${varOrConst} ${name} = _interopDefault(require('${id}'));`;
}
)
.join('\n');
if (needsInterop) {
intro += `function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\n`;
}
if (importBlock) {
intro += importBlock + '\n\n';
}
const exportBlock = getExportBlock(
exports,
dependencies,
namedExportsMode,
options.interop,
'module.exports ='
);
magicString.prepend(intro);
if (exportBlock) magicString.append('\n\n' + exportBlock);
if (outro) magicString.append(outro);
return magicString;
}