You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

77 lines
2.0 KiB

import { blank, keys } from '../utils/object';
function uniqueNames ( declarations ) {
let uniques = blank();
declarations
.filter( declaration => !/^(default|\*)$/.test( declaration.name ) )
.forEach( declaration => uniques[ declaration.name ] = true );
return keys( uniques );
}
10 years ago
function notDefault ( name ) {
return name !== 'default';
}
function getSpecifiers ( exports, replacements ) {
return keys( exports ).filter( notDefault ).map( name => {
const specifier = exports[ name ];
console.log( 'specifier', specifier )
const canonicalName = replacements[ specifier.localName ] || specifier.localName;
return canonicalName === name ?
name :
`${canonicalName} as ${name}`;
});
}
export default function es6 ( bundle, magicString ) {
const importBlock = bundle.externalModules
.map( module => {
const specifiers = [];
if ( module.needsDefault ) {
specifiers.push( module.importedByBundle.filter( declaration =>
declaration.name === 'default' )[0].localName );
}
if ( module.needsAll ) {
specifiers.push( '* as ' + module.importedByBundle.filter( declaration =>
declaration.name === '*' )[0].localName );
}
if ( module.needsNamed ) {
specifiers.push( '{ ' + uniqueNames( module.importedByBundle )
.join( ', ' ) + ' }' );
}
return specifiers.length ?
`import ${specifiers.join( ', ' )} from '${module.id}';` :
`import '${module.id}';`;
})
.join( '\n' );
if ( importBlock ) {
magicString.prepend( importBlock + '\n\n' );
}
10 years ago
const module = bundle.entryModule;
10 years ago
const specifiers = getSpecifiers( module.exports, module.replacements )
.concat( getSpecifiers( module.reexports, module.replacements ) );
10 years ago
let exportBlock = specifiers.length ? `export { ${specifiers.join(', ')} };` : '';
10 years ago
const defaultExport = module.exports.default || module.reexports.default;
if ( defaultExport ) {
exportBlock += `export default ${bundle.traceExport(module,'default')};`;
}
if ( exportBlock ) {
10 years ago
magicString.append( '\n\n' + exportBlock.trim() );
}
return magicString.trim();
}