123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- 'use strict'
- var path = require('path')
- var mm = require('micromatch')
- var fs
- try {
- fs = require('graceful-fs')
- } catch (e) {
- fs = require('fs')
- }
- function _procPath (dir, pathItem, opts, list) {
- var nestedPath
- var stat
- // here since dir already resolved, we use string concatenation
- // which showed faster performance than path.join() and path.resolve()
- if (path.sep === '/') {
- nestedPath = dir + '/' + pathItem
- } else {
- nestedPath = dir + '\\' + pathItem
- }
- stat = fs.lstatSync(nestedPath)
- if (stat.isDirectory()) {
- if (!opts.nodir) {
- list.push({path: nestedPath, stats: stat})
- }
- list = walkSync(nestedPath, opts, list)
- } else {
- if (!opts.nofile) {
- list.push({path: nestedPath, stats: stat})
- }
- }
- }
- function walkSync (dir, opts, list) {
- var files
- var ignore = []
- opts = opts || {}
- list = list || []
- dir = path.resolve(dir)
- try {
- files = fs.readdirSync(dir)
- if (opts.ignore) {
- ignore = mm(files, opts.ignore)
- }
- } catch (er) {
- throw er
- }
- for (var i = 0; i < files.length; i += 1) {
- var file = files[i]
- if (ignore.length > 0) {
- if (ignore.indexOf(file) === -1) _procPath(dir, file, opts, list)
- } else {
- _procPath(dir, file, opts, list)
- }
- }
- return list
- }
- module.exports = walkSync
|