Skip to content

Commit

Permalink
Converted to synchronous code using new synchronous grunt-lib-amd
Browse files Browse the repository at this point in the history
  • Loading branch information
zship committed Feb 25, 2013
1 parent 738dc16 commit 9f38996
Show file tree
Hide file tree
Showing 2 changed files with 94 additions and 154 deletions.
43 changes: 22 additions & 21 deletions package.json
@@ -1,23 +1,24 @@
{
"name": "grunt-amd-check",
"title": "grunt-amd-check",
"description": "Grunt task to check for broken AMD dependencies",
"version": "0.4.2",
"homepage": "https://github.com/zship/grunt-amd-check",
"author": "Zach Shipley <zach@zachshipley.com>",
"repository": {
"type": "git",
"url": "https://github.com/zship/grunt-amd-check"
},
"license": "MIT",
"dependencies": {
"grunt": "0.4.x",
"underscore": "1.4.x",
"mout": "0.3.x",
"deferreds": "0.2.x"
},
"keywords": [
"gruntplugin",
"amd"
"name": "grunt-amd-check",
"title": "grunt-amd-check",
"description": "Grunt task to check for broken AMD dependencies",
"version": "0.4.3",
"homepage": "https://github.com/zship/grunt-amd-check",
"author": "Zach Shipley <zach@zachshipley.com>",
"repository": {
"type": "git",
"url": "https://github.com/zship/grunt-amd-check"
},
"license": "MIT",
"dependencies": {
"grunt": "0.4.x",
"grunt-lib-amd": "0.1.x",
"underscore": "1.4.x",
"mout": "0.3.x",
"deferreds": "0.2.x"
},
"keywords": [
"gruntplugin",
"amd"
]
}
}
205 changes: 72 additions & 133 deletions tasks/amd-check.js
Expand Up @@ -2,91 +2,60 @@ module.exports = function(grunt) {
'use strict';

var path = require('path');
var Deferred = require('deferreds').Deferred;
var Deferreds = require('deferreds');
var parseDir = './lib/parse';
var libdir = path.resolve(__dirname + '/lib');
var util = require('./util.js');
var amd = require('grunt-lib-amd');
var _ = require('underscore');


grunt.registerMultiTask('amd-check', 'Checks for broken AMD dependencies', function() {
var files = this.filesSrc;
var done = this.async();

var requirejs = require(libdir + '/r.js');
requirejs.config({
baseUrl: __dirname,
nodeRequire: require
});

Deferreds.parallel(
util.loadConfig(grunt.config.get('requirejs')),
function() {
var deferred = new Deferred();
requirejs([parseDir], function(parse) {
deferred.resolve(parse);
var rjsconfig = amd.loadConfig(grunt.config.get('requirejs'));

grunt.verbose.writeln('Loaded RequireJS config:');
grunt.verbose.writeln(JSON.stringify(rjsconfig, false, 4));

var found = false;

grunt.log.writeln('Scanning ' + files.length + ' files for unresolved dependencies...');

files.forEach(function(file) {
file = path.resolve(process.cwd() + '/' + file);
var deps =
amd.getDeps(file)
.filter(function(depPath) {
//ignore special 'require' dependency
return depPath !== 'require';
})
.map(function(depPath) {
return {
declared: depPath,
resolved: amd.moduleToFileName(depPath, path.dirname(file), rjsconfig)
};
})
.filter(function(dep) {
return !dep.resolved;
});
return deferred.promise();
}
).then(function(rjsconfig, parse) {

grunt.verbose.writeln('Loaded RequireJS config:');
grunt.verbose.writeln(JSON.stringify(rjsconfig, false, 4));

var found = false;

grunt.log.writeln('Scanning ' + files.length + ' files for unresolved dependencies...');

files.forEach(function(file) {
file = path.resolve(process.cwd() + '/' + file);
var deps;
try {
deps = parse.findDependencies(file, grunt.file.read(file));
}
catch(e) {
deps = [];
}

deps = deps
.filter(function(depPath) {
//ignore special 'require' dependency
return depPath !== 'require';
})
.map(function(depPath) {
return {
declared: depPath,
resolved: util.moduleToFileName(depPath, path.dirname(file), rjsconfig)
};
})
.filter(function(dep) {
return !dep.resolved;
});

if (deps.length) {
found = true;
grunt.log.writeln('');
grunt.log.error();
grunt.log.writeln('Unresolved dependencies in ' + file + ':');
deps.forEach(function(dep) {
grunt.log.writeln('\t' + dep.declared);
});
}
});

if (!found) {
grunt.log.writeln('All dependencies resolved properly!');
if (deps.length) {
found = true;
grunt.log.writeln('');
grunt.log.error();
grunt.log.writeln('Unresolved dependencies in ' + file + ':');
deps.forEach(function(dep) {
grunt.log.writeln('\t' + dep.declared);
});
}

done();

});

if (!found) {
grunt.log.writeln('All dependencies resolved properly!');
}

});


grunt.registerTask('whatrequires', 'Traces which files depend on given js file', function(searchFile) {
searchFile = path.resolve(searchFile);
var rjsconfig = amd.loadConfig(grunt.config.get('requirejs'));

if (!grunt.file.exists(searchFile)) {
grunt.log.write(searchFile + ' does not exist! ').error();
Expand All @@ -96,78 +65,48 @@ module.exports = function(grunt) {
var config = grunt.config.get('amd-check');
var pool = grunt.task.normalizeMultiTaskFiles(config.files)[0].src;

var done = this.async();

var requirejs = require(libdir + '/r.js');
requirejs.config({
baseUrl: __dirname,
nodeRequire: require
});

Deferreds.parallel(
util.loadConfig(grunt.config.get('requirejs')),
function() {
var deferred = new Deferred();
requirejs([parseDir], function(parse) {
deferred.resolve(parse);
});
return deferred.promise();
}
).then(function(rjsconfig, parse) {

grunt.verbose.writeln('Loaded RequireJS config:');
grunt.verbose.writeln(JSON.stringify(rjsconfig, false, 4));
grunt.verbose.writeln('Loaded RequireJS config:');
grunt.verbose.writeln(JSON.stringify(rjsconfig, false, 4));

var matches = pool.filter(function(file) {
file = path.resolve(file);
var matches = pool.filter(function(file) {
file = path.resolve(file);

var deps;
try {
deps = parse.findDependencies(file, grunt.file.read(file));
}
catch(e) {
deps = [];
}

deps = _.map(deps, function(depPath) {
return util.moduleToFileName(depPath, path.dirname(file), rjsconfig);
});

var match = _.intersection(deps, [searchFile]);
if (match.length) {
return true;
}
return false;
var deps = _.map(amd.getDeps(file), function(depPath) {
return amd.moduleToFileName(depPath, path.dirname(file), rjsconfig);
});

switch (matches.length) {
case 0:
grunt.log.write('No files depend');
break;
case 1:
grunt.log.write('1 file depends');
break;
default:
grunt.log.write(matches.length + ' files depend');
break;
var match = _.intersection(deps, [searchFile]);
if (match.length) {
return true;
}
return false;
});

grunt.log.write(' on ' + searchFile);
switch (matches.length) {
case 0:
grunt.log.write('No files depend');
break;
case 1:
grunt.log.write('1 file depends');
break;
default:
grunt.log.write(matches.length + ' files depend');
break;
}

if (!matches.length) {
grunt.log.write('.\n');
}
else {
grunt.log.write(':\n');
grunt.log.writeln('-----------------------------------------------------------');
matches.forEach(function(file) {
grunt.log.writeln(file);
});
}
grunt.log.write(' on ' + searchFile);

done();
if (!matches.length) {
grunt.log.write('.\n');
}
else {
grunt.log.write(':\n');
grunt.log.writeln('-----------------------------------------------------------');
matches.forEach(function(file) {
grunt.log.writeln(file);
});
}

});
});

};

0 comments on commit 9f38996

Please sign in to comment.