import { basename } from './utils/path';
import { writeFile } from 'sander';
import Bundle from './Bundle';

let SOURCEMAPPING_URL = 'sourceMa';
SOURCEMAPPING_URL += 'ppingURL';

export function rollup ( options ) {
	if ( !options || !options.entry ) {
		throw new Error( 'You must supply options.entry to rollup' );
	}

	const bundle = new Bundle( options );

	return bundle.build().then( () => {
		return {
			generate: options => bundle.generate( 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.generate( 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 );
			}
		};
	});
}

@@ -70,16 +70,55 @@
 ander';%0A
+import %7B keys %7D from './utils/object';%0A
 import B
@@ -441,16 +441,128 @@
 eturn %7B%0A
+%09%09%09imports: bundle.externalModules.map( module =%3E module.id ),%0A%09%09%09exports: keys( bundle.entryModule.exports ),%0A%0A
 %09%09%09gener

include imports/exports in bundle object