UNPKG

1.29 kBJavaScriptView Raw
1import { keys } from '../utils/object';
2
3export default function cjs ( bundle, magicString, exportMode ) {
4 let intro = `'use strict';\n\n`;
5
6 // TODO handle empty imports, once they're supported
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}