UNPKG

1.84 kBJavaScriptView Raw
1var getAst = require("./get_ast");
2var types = require("ast-types");
3var optionsNormalize = require("./options_normalize");
4
5var b = types.builders;
6var n = types.namedTypes;
7
8/**
9 * @param {Object} load
10 * @param {Object} options
11 *
12 * @option {Boolean} [namedDefines=false] Inserts a named define.
13 */
14module.exports = function transpileAmdToAmd(load, options) {
15 var ast = getAst(load);
16 var transformOptions = options || {};
17
18 if (!load.name) {
19 return ast;
20 }
21
22 types.visit(ast, {
23 visitCallExpression: function visitCallExpression(path) {
24 if (!this.isDefineExpression(path)) {
25 return this.traverse(path);
26 }
27
28 var node = path.node;
29 var defineArgs = node.arguments;
30 var insertModuleName = transformOptions.namedDefines;
31
32 // make sure the module is named appropiately
33 if (insertModuleName) {
34 var isAnonymousModule = !n.Literal.check(defineArgs[0]);
35 var normalized = optionsNormalize(
36 options,
37 load.name,
38 load.name,
39 load.address
40 );
41 if (isAnonymousModule) {
42 defineArgs.unshift(b.literal(normalized));
43 } else {
44 defineArgs[0] = b.literal(normalized);
45 }
46 }
47
48 // define(name, dependencies?, factory?)
49 // normalize the module dependencies if any
50 var maybeDependencies = defineArgs[1];
51 if (n.ArrayExpression.check(maybeDependencies)) {
52 var normalizedArgs = maybeDependencies.elements.map(
53 function eachArg(arg) {
54 return b.literal(
55 optionsNormalize(
56 options,
57 arg.value,
58 load.name,
59 load.address
60 )
61 );
62 }
63 );
64 maybeDependencies.elements = normalizedArgs;
65 }
66
67 this.abort(path);
68 },
69
70 isDefineExpression: function isDefineExpression(path) {
71 return (
72 n.Identifier.check(path.node.callee) &&
73 path.node.callee.name === "define"
74 );
75 }
76 });
77
78 return ast;
79};