1 | import { keys } from '../utils/object';
|
2 |
|
3 | export default function cjs ( bundle, magicString, exportMode ) {
|
4 | let intro = `'use strict';\n\n`;
|
5 |
|
6 |
|
7 | const importBlock = bundle.externalModules
|
8 | .map( module => {
|
9 | let requireStatement = `var ${module.name} = require('${module.id}');`;
|
10 |
|
11 | if ( module.needsDefault ) {
|
12 | requireStatement += '\n' + ( module.needsNamed ? `var ${module.name}__default = ` : `${module.name} = ` ) +
|
13 | `'default' in ${module.name} ? ${module.name}['default'] : ${module.name};`;
|
14 | }
|
15 |
|
16 | return requireStatement;
|
17 | })
|
18 | .join( '\n' );
|
19 |
|
20 | if ( importBlock ) {
|
21 | intro += importBlock + '\n\n';
|
22 | }
|
23 |
|
24 | magicString.prepend( intro );
|
25 |
|
26 | let exportBlock;
|
27 | if ( exportMode === 'default' && bundle.entryModule.exports.default ) {
|
28 | exportBlock = `module.exports = ${bundle.entryModule.getCanonicalName('default')};`;
|
29 | } else if ( exportMode === 'named' ) {
|
30 | exportBlock = keys( bundle.entryModule.exports )
|
31 | .map( key => {
|
32 | const specifier = bundle.entryModule.exports[ key ];
|
33 | const name = bundle.entryModule.getCanonicalName( specifier.localName );
|
34 |
|
35 | return `exports.${key} = ${name};`;
|
36 | })
|
37 | .join( '\n' );
|
38 | }
|
39 |
|
40 | if ( exportBlock ) {
|
41 | magicString.append( '\n\n' + exportBlock );
|
42 | }
|
43 |
|
44 | return magicString;
|
45 | }
|