run: function (deferred, v, namedArgs, target) { var depends = namedArgs.depends, exports = namedArgs.exports || '', noConflict = namedArgs.noConflict, completeMessage = '', jsFiles; if (depends) { depends = depends.split(',').map(function (value) { return "'" + value + "'"; }); } else { depends = []; } //Convert the depends to a string. depends = depends.join(','); if (fs.statSync(target).isDirectory()) { //Find all the .js files in the directory and convert them. jsFiles = file.getFilteredFileList(target, /\.js$/); jsFiles.forEach(function (file) { var msg = main.util.convert(file, depends, exports, noConflict); if (msg) { completeMessage += (completeMessage ? '\n' : '') + msg; } }); return deferred.resolve(completeMessage); } else { return deferred.resolve(main.util.convert(target, depends, exports, noConflict)); } },
deferred.resolve(q.call(function () { var parsed = parseDepends(depends), promise = q.call(function () {}); depends = parsed.depends; varNames = parsed.varNames; if (fs.statSync(target).isDirectory()) { //Find all the .js files in the directory and convert them. jsFiles = file.getFilteredFileList(target, /\.js$/); jsFiles.forEach(function (file) { promise = promise.then(function (msg) { if (msg) { completeMessage += (completeMessage ? '\n' : '') + msg; } return main.api.convert(file, depends, varNames, exports, { v: v, noConflict: noConflict, noprompt: namedArgs.noprompt }); }); }); //Catch the final conversion message return promise.then(function (msg) { if (msg) { completeMessage += (completeMessage ? '\n' : '') + msg; } return completeMessage; }); } else { return main.api.convert(target, depends, varNames, exports, { v: v, noConflict: noConflict, noprompt: namedArgs.noprompt }); } }));
getFilteredFileList: function (startDir, regExpInclude, regExpExclude, dirRegExpExclude) { return file.getFilteredFileList(resolve(startDir), regExpInclude, regExpExclude, dirRegExpExclude); },
run: function (d, v, namedArgs, targetDir) { targetDir = path.resolve(targetDir).replace(/\\/g, '/'); var registry = {}, promise = q.call(function () {}), pkg, prop, pkgPath, targetId, lastSegment; //Include the targetDir in the registry. targetId = targetDir.split('/'); targetId = targetId[targetId.length - 1]; registry[targetId] = targetDir; //Find all the the packages in the node_modules getNodePackages(targetDir, registry); //For each package, make sure there is a top level adapter module //that bridges to the main module. for (prop in registry) { if (registry.hasOwnProperty(prop)) { //Clean directories/files not needed. Do this before //converting modules to reduce the amount of directories //and unnecessary work. add.api.discard(registry[prop]); } } //Now find all JS files to scan for dependencies and convert. file.getFilteredFileList(targetDir, /\.js$/).forEach(function (file) { var contents = v.read(file); //Convert dependencies to be relative ones. contents = contents.replace(requireRegExp, function (match, id) { //Remove any trailing ".js" on the ID because that does //not work for AMD. id = id.replace(/\.js$/, ''); var parts = id.split('/'), prefix = parts[0]; if (registry[prefix]) { parts[0] = relativize(registry[prefix], file); return "require('" + parts.join('/') + "')"; } else { return "require('" + id + "')"; } }); v.write(file, contents); //Convert the module to AMD, but do not freak if it fails, //probably malformed JS anyway. promise = promise.then(function (msg) { var dconvert = q.defer(); try { amdConvert(file).then(function () { dconvert.resolve(); }, function (err) { //Do not care if it errors out, probably //malformed to start. dconvert.resolve(); }); } catch (e) { dconvert.resolve(); } return dconvert.promise; }); }); //For each package, make sure there is a top level adapter module //that bridges to the main module. for (prop in registry) { if (registry.hasOwnProperty(prop)) { pkgPath = registry[prop]; pkg = packageJson(pkgPath); lastSegment = pkgPath.split('/'); lastSegment = lastSegment[lastSegment.length - 1]; if (pkg && pkg.data && pkg.data.main) { makeMainAmdAdapter(pkg.data.main, './' + lastSegment, pkgPath + '.js'); } } } d.resolve(promise); }