UNPKG

2.07 kBJavaScriptView Raw
1const cleanSource = require("../node/clean");
2const dependencyResolver = require("../node/dependency_resolver");
3const isProcessShim = require("../node/is_process_shim");
4const nodeSource = require("../node/source");
5const pluginCommonjs = require("rollup-plugin-commonjs");
6const removeActiveSourceKeys = require("../node/remove_active_source_keys");
7const rollup = require("steal-rollup");
8
9const moduleNameFromSpecifier = dependencyResolver.moduleNameFromSpecifier;
10const CJS_PROXY_PREFIX = '\0commonjs-proxy:';
11
12module.exports = function(bundle, options) {
13 let removeDevelopmentCode = options.removeDevelopmentCode;
14 let main = bundle.bundles[0];
15 let firstNode = bundle.nodes[0];
16
17 let nodeMap = new Map();
18 for(let node of bundle.nodes) {
19 nodeMap.set(node.load.name + ".js", node);
20 }
21 let getNode = nodeMap.get.bind(nodeMap);
22
23 return rollup.rollup({
24 input: main,
25
26 plugins: [
27 loadFromGraph(getNode, removeDevelopmentCode),
28 pluginCommonjs({})
29 ]
30 })
31 .then(function(bundle){
32 return bundle.generate({
33 format:'es',
34 sourcemap: true
35 });
36 })
37 .then(function(chunk){
38 let sourceCode = chunk.code;
39 if(isProcessShim(firstNode)) {
40 sourceCode = firstNode.load.source + "\n" + sourceCode;
41 }
42
43 bundle.source = {
44 code: sourceCode,
45 map: chunk.map
46 };
47 });
48};
49
50function loadFromGraph(getNode, removeDevelopmentCode) {
51 return {
52 resolveId: function(id, importer) {
53 if(id.startsWith(CJS_PROXY_PREFIX)) {
54 id = id.substr(CJS_PROXY_PREFIX.length);
55 }
56 if(importer) {
57 let node = getNode(importer);
58 var outId = moduleNameFromSpecifier(node, id);
59 // Likely one of the commonjs plugins' weird internal modules
60 if(!outId) {
61 return undefined;
62 }
63 return (outId === "@empty" ? id : outId) + ".js";
64 }
65 return id + ".js";
66 },
67 load(id) {
68 let node = getNode(id);
69
70 // Likely one of the commonjs plugins' weird internal modules
71 if(!node) {
72 return undefined;
73 }
74
75 removeActiveSourceKeys(node);
76
77 if(removeDevelopmentCode) {
78 cleanSource(node, {});
79 }
80
81 return nodeSource(node);
82 }
83 };
84}