-
Notifications
You must be signed in to change notification settings - Fork 10
/
amd_amd.js
79 lines (69 loc) · 1.79 KB
/
amd_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
var getAst = require("./get_ast");
var types = require("ast-types");
var optionsNormalize = require("./options_normalize");
var b = types.builders;
var n = types.namedTypes;
/**
* @param {Object} load
* @param {Object} options
*
* @option {Boolean} [namedDefines=false] Inserts a named define.
*/
module.exports = function transpileAmdToAmd(load, options) {
var ast = getAst(load);
var transformOptions = options || {};
if (!load.name) {
return ast;
}
types.visit(ast, {
visitCallExpression: function visitCallExpression(path) {
if (!this.isDefineExpression(path)) {
return this.traverse(path);
}
var node = path.node;
var defineArgs = node.arguments;
var insertModuleName = transformOptions.namedDefines;
// make sure the module is named appropiately
if (insertModuleName) {
var isAnonymousModule = !n.Literal.check(defineArgs[0]);
var normalized = optionsNormalize(
options,
load.name,
load.name,
load.address
);
if (isAnonymousModule) {
defineArgs.unshift(b.literal(normalized));
} else {
defineArgs[0] = b.literal(normalized);
}
}
// define(name, dependencies?, factory?)
// normalize the module dependencies if any
var maybeDependencies = defineArgs[1];
if (n.ArrayExpression.check(maybeDependencies)) {
var normalizedArgs = maybeDependencies.elements.map(
function eachArg(arg) {
return b.literal(
optionsNormalize(
options,
arg.value,
load.name,
load.address
)
);
}
);
maybeDependencies.elements = normalizedArgs;
}
this.abort(path);
},
isDefineExpression: function isDefineExpression(path) {
return (
n.Identifier.check(path.node.callee) &&
path.node.callee.name === "define"
);
}
});
return ast;
};