-
Notifications
You must be signed in to change notification settings - Fork 40
/
amd.js
109 lines (86 loc) · 2.5 KB
/
amd.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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
(function(context) {
loadrunner(function(using, provide) {
function makeArray(o) {
return Array.prototype.slice.call(o);
}
var isArray = Array.isArray || function(obj) {
return obj.constructor == Array;
}
function indexOf(arr, thing) {
for (var i=0, item; item = arr[i]; i++) {
if (thing == item) {
return i;
}
}
return -1;
}
function resolve(id, mod) {
// replace the './' on the id with the dir taken from the mod id.
var from = mod.id || '';
var parts = from.split('/'); parts.pop();
var dir = parts.join('/');
return id.replace(/^\./, dir);
}
function mapArgs(args, mod) {
var mapped = [];
function require(id) {
return loadrunner.Module.exports[resolve(id.replace(/^.+!/, ''), mod)];
}
for (var i=0, len = args.length; i < len; i++) {
if (args[i] == 'require') {
mapped.push(require);
continue;
}
if (args[i] == 'exports') {
mod.exports = mod.exports || {};
mapped.push(mod.exports);
continue;
}
if (args[i] == 'module') {
mapped.push(mod);
continue;
}
mapped.push(require(args[i]));
}
return mapped;
}
function define() {
var args = makeArray(arguments), dependencies = [], id, factory;
if (typeof args[0] == 'string') {
id = args.shift();
}
if (isArray(args[0])) {
dependencies = args.shift();
}
factory = args.shift();
var def = new loadrunner.Definition(id, function(exports) {
var mods = [], thisDef = this;
function executeAMD() {
var args = mapArgs(makeArray(dependencies), thisDef), exported;
if (typeof factory == 'function') {
exported = factory.apply(thisDef, args);
} else {
exported = factory;
}
if (typeof exported == 'undefined') {
exported = thisDef.exports;
}
exports(exported);
}
for (var i=0, len=dependencies.length; i < len; i++) {
var d = dependencies[i];
if (indexOf(['require', 'exports', 'module'], d) == -1) {
mods.push(resolve(d, thisDef));
}
}
if (mods.length > 0) {
using.apply(this, mods.concat(executeAMD));
} else {
executeAMD();
}
});
return def;
}
context.define = define;
});
}(this));