UNPKG

unbundle

Version:

`require()` and `import`/`export` in the browser, without the bundling

84 lines (67 loc) 2.27 kB
import {dirname, basename} from 'path' import {readFile} from 'fs' import {transform} from 'babel-core' import {promisify} from 'bluebird' import {write} from './write' import mkdirp from 'mkdirp' import {parse} from './importResolve' const babelOptions = { babelrc: false, ignore: null, sourceMaps: true } const babelPlugins = [ 'syntax-async-generators', 'syntax-class-properties', 'syntax-decorators', 'syntax-do-expressions', 'syntax-export-extensions', 'syntax-function-bind', 'syntax-function-sent', 'syntax-object-rest-spread' ] const babelPresets = [ ] function babelrc (options = {}, plugins = [], presets = []) { const result = Object.assign({}, babelOptions, options) result.plugins = babelPlugins.concat(plugins) result.presets = babelPresets.concat(presets) return result } const importResolveOptions = {} const stages = [ { // Inline NODE_ENV ("development"/"production") // Must run before minify-dead-code-elimination plugins: ['transform-node-env-inline'], // {plugins: ['transform-inline-environment-variables']}, // Parse and transform JSX/Flow presets: ['react'] }, // Get rid of require() calls that are not used in the current prod/dev environment {plugins: ['minify-dead-code-elimination']}, // Transform CommonJS to ES2015 modules {plugins: ['transform-commonjs-es2015-modules']}, // Trace all import sources {plugins: [['transform-import-resolve', importResolveOptions]]}, // Transform ES2015 modules to SystemJS for client-side asynchronous loading {plugins: ['transform-es2015-modules-systemjs']}, // Transform to minified ES5 code {presets: ['latest', 'stage-0', 'babili']} ] export async function processFile (file, output, destination) { importResolveOptions.parse = parse(file, output, destination) let code = await promisify(readFile)(file, 'utf8') let map = null for (const {plugins, presets} of stages) { ({code, map} = transform(code, babelrc({ filename: file, inputSourceMap: map }, plugins, presets))) } await promisify(mkdirp)(dirname(output)) await Promise.all([ write(code + '\n//# sourceMappingURL=' + basename(output) + '.map', output), write(JSON.stringify(map), output + '.map') ]) }