react / react-0.13.3 / examples / basic-commonjs / node_modules / reactify / node_modules / react-tools / node_modules / commoner / lib / grep.js
81159 viewsvar assert = require("assert");1var path = require("path");2var Q = require("q");3var fs = require("graceful-fs");4var util = require("./util");5var readdir = Q.denodeify(fs.readdir);6var lstat = Q.denodeify(fs.lstat);78function processDirP(pattern, dir) {9return readdir(dir).then(function(files) {10return Q.all(files.map(function(file) {11file = path.join(dir, file);12return lstat(file).then(function(stat) {13return stat.isDirectory()14? processDirP(pattern, file)15: processFileP(pattern, file);16});17})).then(function(results) {18return util.flatten(results);19});20});21}2223function processFileP(pattern, file) {24return util.readFileP(file).then(function(contents) {25var result = new RegExp(pattern, 'g').exec(contents);26return result ? [{27path: file,28match: result[0]29}] : [];30});31}3233module.exports = function(pattern, sourceDir) {34assert.strictEqual(typeof pattern, "string");3536return processDirP(pattern, sourceDir).then(function(results) {37var pathToMatch = {};3839results.forEach(function(result) {40pathToMatch[path.relative(41sourceDir,42result.path43).split("\\").join("/")] = result.match;44});4546return pathToMatch;47});48};495051