Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
80711 views
1
var JSONStream = require('JSONStream');
2
var defined = require('defined');
3
var through = require('through2');
4
var umd = require('umd');
5
6
var fs = require('fs');
7
var path = require('path');
8
9
var combineSourceMap = require('combine-source-map');
10
11
var defaultPreludePath = path.join(__dirname, '_prelude.js');
12
var defaultPrelude = fs.readFileSync(defaultPreludePath, 'utf8');
13
14
function newlinesIn(src) {
15
if (!src) return 0;
16
var newlines = src.match(/\n/g);
17
18
return newlines ? newlines.length : 0;
19
}
20
21
module.exports = function (opts) {
22
if (!opts) opts = {};
23
var parser = opts.raw ? through.obj() : JSONStream.parse([ true ]);
24
var stream = through.obj(
25
function (buf, enc, next) { parser.write(buf); next() },
26
function () { parser.end() }
27
);
28
parser.pipe(through.obj(write, end));
29
stream.standaloneModule = opts.standaloneModule;
30
stream.hasExports = opts.hasExports;
31
32
var first = true;
33
var entries = [];
34
var basedir = defined(opts.basedir, process.cwd());
35
var prelude = opts.prelude || defaultPrelude;
36
var preludePath = opts.preludePath || path.relative(basedir, defaultPreludePath);
37
38
var lineno = 1 + newlinesIn(prelude);
39
var sourcemap;
40
41
return stream;
42
43
function write (row, enc, next) {
44
if (first && opts.standalone) {
45
var pre = umd.prelude(opts.standalone).trim();
46
stream.push(Buffer(pre + 'return '));
47
}
48
else if (first && stream.hasExports) {
49
var pre = opts.externalRequireName || 'require';
50
stream.push(Buffer(pre + '='));
51
}
52
if (first) stream.push(Buffer(prelude + '({'));
53
54
if (row.sourceFile && !row.nomap) {
55
if (!sourcemap) {
56
sourcemap = combineSourceMap.create();
57
sourcemap.addFile(
58
{ sourceFile: preludePath, source: prelude },
59
{ line: 0 }
60
);
61
}
62
sourcemap.addFile(
63
{ sourceFile: row.sourceFile, source: row.source },
64
{ line: lineno }
65
);
66
}
67
68
var wrappedSource = [
69
(first ? '' : ','),
70
JSON.stringify(row.id),
71
':[',
72
'function(require,module,exports){\n',
73
combineSourceMap.removeComments(row.source),
74
'\n},',
75
'{' + Object.keys(row.deps || {}).sort().map(function (key) {
76
return JSON.stringify(key) + ':'
77
+ JSON.stringify(row.deps[key])
78
;
79
}).join(',') + '}',
80
']'
81
].join('');
82
83
stream.push(Buffer(wrappedSource));
84
lineno += newlinesIn(wrappedSource);
85
86
first = false;
87
if (row.entry && row.order !== undefined) {
88
entries[row.order] = row.id;
89
}
90
else if (row.entry) entries.push(row.id);
91
next();
92
}
93
94
function end () {
95
if (first) stream.push(Buffer(prelude + '({'));
96
entries = entries.filter(function (x) { return x !== undefined });
97
98
stream.push(Buffer('},{},' + JSON.stringify(entries) + ')'));
99
100
if (opts.standalone) {
101
stream.push(Buffer(
102
'(' + JSON.stringify(stream.standaloneModule) + ')'
103
+ umd.postlude(opts.standalone)
104
));
105
}
106
107
if (sourcemap) {
108
var comment = sourcemap.comment();
109
if (opts.sourceMapPrefix) {
110
comment = comment.replace(
111
/^\/\/#/, function () { return opts.sourceMapPrefix }
112
)
113
}
114
stream.push(Buffer('\n' + comment + '\n'));
115
}
116
if (!sourcemap && !opts.standalone) stream.push(Buffer(';\n'));
117
118
stream.push(null);
119
}
120
};
121
122