UNPKG

1.48 kBJavaScriptView Raw
1var getAst = require("./get_ast");
2var traverse = require('./traverse');
3var comparify = require('comparify');
4var optionsNormalize = require('./options_normalize');
5
6/**
7 *
8 * @param {Object} load
9 * @param {Object} options
10 *
11 * @option {Boolean} [namedDefines=false] Inserts a named define.
12 */
13module.exports = function(load, options){
14 var ast = getAst(load);
15 var transformOptions = options || {};
16
17 traverse(ast, function(obj){
18 if( comparify(obj,{
19 "type": "CallExpression",
20 "callee": {
21 "type": "Identifier",
22 "name": "define"
23 }
24 }) ) {
25 var args = obj.arguments,
26 arg = args[0];
27
28 if( transformOptions.namedDefines && arg.type !== "Literal" ) {
29 args.unshift({
30 type: "Literal",
31 value: optionsNormalize(options, load.name, load.name, load.address)
32 });
33 args[0].raw = args[0].value;
34 arg = args[1];
35 } else if(transformOptions.namedDefines && arg.type === "Literal" && load.name) {
36 // make sure the name is right
37 args[0].value = load.name;
38 args[0].raw = args[0].value;
39 arg = args[1];
40 }
41
42 // Perform normalization on the dependency names, if needed
43 if(arg.type === "ArrayExpression") {
44 var i = 0;
45 var element;
46
47 while(i < arg.elements.length) {
48 element = arg.elements[i];
49 element.value = optionsNormalize(options, element.value, load.name, load.address);
50 element.raw = '"' + element.value + '"';
51 i++;
52 }
53 }
54
55 return false;
56 }
57 });
58
59 return ast;
60};