Skip to content

Commit

Permalink
Start adding more comments and tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Willyham committed Oct 27, 2014
1 parent aa03f13 commit b904cd5
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 95 deletions.
87 changes: 0 additions & 87 deletions examples/test

This file was deleted.

3 changes: 3 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,8 @@
"minimist": "~1.1.0",
"glob-all": "~3.0.1",
"traverse": "~0.6.6"
},
"devDependencies": {
"tape": "~3.0.1"
}
}
15 changes: 8 additions & 7 deletions src/amd-to-common.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,8 @@
var fs = require('fs');
var _ = require('underscore');
var esprima = require('esprima');
var escodegen = require('escodegen');
var traverse = require('traverse');
var requireNodes = require('./lib/require-nodes');
var requireDetection = require('./lib/require-detection');

var AMDToCommon = (function(){

Expand Down Expand Up @@ -36,15 +35,17 @@ var AMDToCommon = (function(){
* @param {String} content The source content
*/
_convert.prototype.analyseContent = function(content){
var code = esprima.parse(content, {loc: true});
var code = esprima.parse(content, {
loc: true,
range: true,
comment: true
});
traverse(code).forEach(function(node){
debugger;
if(!requireNodes.isAMDStyle(node)){
if(!requireDetection.isAMDStyle(node)){
return;
}
console.log('Found AMD style module definition');
var dependencyMap = requireNodes.getDependencyMap(node);
console.log(dependencyMap);
var dependencyMap = requireDetection.getDependencyMap(node);
});
};

Expand Down
34 changes: 33 additions & 1 deletion src/lib/require-nodes.js → src/lib/require-detection.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
var _ = require('underscore');

/**
* Determine whether a node represents a requireJS 'define' call.
* @param {Object} node AST node
* @returns {Boolean} true if define call, false otherwise
*/
var isDefine = function(node){
if(!node || !node.type || node.type !== 'ExpressionStatement'){
return false;
Expand All @@ -10,6 +15,15 @@ var isDefine = function(node){
return Boolean(node.expression.callee.name === 'define');
};

/**
* Determine whether a node is an AMD style define call
* This detects code in the format:
* define(['req1', 'req2'], function(Req1, Req1) {})
* But not:
* define(function(require, exports, module){})
* @param {Object} node AST Node
* @returns {boolean} true if AMD style, false otherwise
*/
var isAMDStyle = function(node){
if(!isDefine(node)){
return false;
Expand All @@ -21,25 +35,43 @@ var isAMDStyle = function(node){
return Boolean(defineArguments[1].type === 'FunctionExpression');
};

/**
* Given an AMD style define, get a map of dependencies
* For example,
* define(['req1', 'req2'], function(Req1, Req1) {})
* Produces:
* {'req1': Req1, 'req2': Req2}
* @param {Object} node AST Node
* @returns {Object} An object map of dependencies
*/
var getDependencyMap = function(node){
var arrayDependencies = getArrayDependencies(node);
var dependencyIdentifiers = getDependencyIdentifiers(node);
return _.object(_.zip(arrayDependencies, dependencyIdentifiers));
};

/**
* Get the dependencies from the array
* @param {Object} node AST Node
* @returns {String[]} A list of dependency strings
*/
var getArrayDependencies = function(node){
return _.map(node.expression.arguments[0].elements, function(element){
return element.raw;
});
};

/**
* Get the dependencies identifiers from the array
* @param {Object} node AST Node
* @returns {String[]} A list of dependency strings
*/
var getDependencyIdentifiers = function(node){
return _.map(node.expression.arguments[1].params, function(param){
return param.name;
});
};


module.exports = {
isDefine: isDefine,
isAMDStyle: isAMDStyle,
Expand Down
6 changes: 6 additions & 0 deletions test/lib/require-detection.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
var test = require('tape');
var requireDetection = require('../../src/lib/require-detection');

test('Should detect whether a node is a define call', function(t){

});

0 comments on commit b904cd5

Please sign in to comment.