import Promise from 'es6-promise/lib/es6-promise/promise.js' ;
import { basename } from './utils/path.js' ;
import { writeFile } from './utils/fs.js' ;
import { keys } from './utils/object.js' ;
import validateKeys from './utils/validateKeys.js' ;
import SOURCEMAPPING_URL from './utils/sourceMappingURL.js' ;
import Bundle from './Bundle.js' ;
export const VERSION = '<@VERSION@>' ;
const ALLOWED_KEYS = [
'banner' ,
'dest' ,
'entry' ,
'exports' ,
'external' ,
'footer' ,
'format' ,
'globals' ,
'indent' ,
'intro' ,
'moduleId' ,
'moduleName' ,
'onwarn' ,
'outro' ,
'plugins' ,
'sourceMap'
] ;
export function rollup ( options ) {
if ( ! options || ! options . entry ) {
return Promise . reject ( new Error ( 'You must supply options.entry to rollup' ) ) ;
}
if ( options . transform || options . load || options . resolveId || options . resolveExternal ) {
return Promise . reject ( new Error ( 'The `transform`, `load`, `resolveId` and `resolveExternal` options are deprecated in favour of a unified plugin API. See https://github.com/rollup/rollup/wiki/Plugins for details' ) ) ;
}
const error = validateKeys ( options , ALLOWED_KEYS ) ;
if ( error ) {
return Promise . reject ( error ) ;
}
const bundle = new Bundle ( options ) ;
return bundle . build ( ) . then ( ( ) => {
return {
imports : bundle . externalModules . map ( module => module . id ) ,
exports : keys ( bundle . entryModule . exports ) ,
modules : bundle . orderedModules . map ( module => {
return { id : module . id } ;
} ) ,
generate : options => bundle . render ( options ) ,
write : options => {
if ( ! options || ! options . dest ) {
throw new Error ( 'You must supply options.dest to bundle.write' ) ;
}
const dest = options . dest ;
let { code , map } = bundle . render ( options ) ;
let promises = [ ] ;
if ( options . sourceMap ) {
let url ;
if ( options . sourceMap === 'inline' ) {
url = map . toUrl ( ) ;
} else {
url = ` ${ basename ( dest ) } .map ` ;
promises . push ( writeFile ( dest + '.map' , map . toString ( ) ) ) ;
}
code += ` \n //# ${ SOURCEMAPPING_URL } = ${ url } ` ;
}
promises . push ( writeFile ( dest , code ) ) ;
return Promise . all ( promises ) ;
}
} ;
} ) ;
}