1 | const cleanSource = require("../node/clean");
|
2 | const dependencyResolver = require("../node/dependency_resolver");
|
3 | const isProcessShim = require("../node/is_process_shim");
|
4 | const nodeSource = require("../node/source");
|
5 | const pluginCommonjs = require("rollup-plugin-commonjs");
|
6 | const removeActiveSourceKeys = require("../node/remove_active_source_keys");
|
7 | const rollup = require("steal-rollup");
|
8 |
|
9 | const moduleNameFromSpecifier = dependencyResolver.moduleNameFromSpecifier;
|
10 | const CJS_PROXY_PREFIX = '\0commonjs-proxy:';
|
11 |
|
12 | module.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 |
|
50 | function 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 |
|
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 |
|
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 | }
|