-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprologueGlobals.js
68 lines (57 loc) · 1.55 KB
/
prologueGlobals.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
'use strict';
var path = require('path');
var VarSet = require('./VarSet');
function prologueGlobals (globals) {
return function (deps, mod, from) {
var prologue = generatePrologue(deps, mod, from, globals);
if (!prologue) {
console.error('ERROR: a loader is detected in', from, '- but some dependencies are unknown - skipping.');
return null;
}
return prologue;
};
}
function generatePrologue (deps, mod, name, globals) {
// normalize dependencies
deps = deps.map(function (name) {
if (name === 'module' || name.charAt(0) !== '.') {
return name;
}
var norm = path.join(path.dirname(mod), name);
if (!/^\.\//.test(norm)) {
norm = './' + norm;
}
return norm;
});
// prepare global variables
var variables = new VarSet(), needModule = false, g;
for (var i = 0; i < deps.length; ++i) {
if (deps[i] !== 'module') {
g = globals.getGlobalByModule(deps[i]);
if (!g) {
return '';
}
variables.add(g);
} else {
needModule = true;
}
}
g = globals.getGlobalByModule(mod);
if (!g) {
return '';
}
var assignment = variables.buildSetter(g),
modulePart = needModule ? 'm={};m.id=m.filename=' + JSON.stringify(name) + ';' : '';
var prologue = '(function(_,f';
if (/^g=/.test(assignment)) {
prologue += ',g';
}
if (modulePart) {
prologue += ',m';
}
return prologue + '){' + modulePart + assignment + 'f(' +
deps.map(function (path) {
return path === 'module' ? 'm' : 'window' + variables.buildGetter(globals.getGlobalByModule(path, true));
}).join(',') + ');})';
}
module.exports = prologueGlobals;