Socket
Socket
Sign inDemoInstall

scandirectory

Package Overview
Dependencies
Maintainers
2
Versions
80
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

scandirectory - npm Package Compare versions

Comparing version 3.0.1 to 4.0.0

.dependabot/config.yml

20

HISTORY.md
# History
## v4.0.0 2019 November 13
- Updated dependencies, [base files](https://github.com/bevry/base), and [editions](https://editions.bevry.me) using [boundation](https://github.com/bevry/boundation)
- Minimum required node version changed from `node: >=0.8` to `node: >=0.12` to keep up with mandatory ecosystem changes
## v3.0.1 2016 October 20
- Repackaged
- Repackaged
## v3.0.0 2016 October 20
- Simplified and now powered by [readdir-cluster](https://github.com/bevry/readdir-cluster)
- Converted from CoffeeScript to JavaScript
- Backwards compatibility breaks:
- Action callbacks now accept different arguments than before
- Simplified and now powered by [readdir-cluster](https://github.com/bevry/readdir-cluster)
- Converted from CoffeeScript to JavaScript
## v2.5.0 2014 December 17
- Extracted from [balupton/bal-util](https://github.com/balupton/bal-util)
- Changed accepted arguments
- Extracted from [balupton/bal-util](https://github.com/balupton/bal-util)
- Changed accepted arguments

@@ -1,3 +0,4 @@

// 2016 March 8
// https://github.com/bevry/editions
'use strict'
/** @type {typeof import("./source/index.js") } */
module.exports = require('editions').requirePackage(__dirname, require)

@@ -19,3 +19,3 @@ <!-- LICENSEFILE/ -->

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software.

@@ -22,0 +22,0 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

{
"name": "scandirectory",
"version": "3.0.1",
"version": "4.0.0",
"description": "Scan a directory recursively with a lot of control and power",

@@ -25,20 +25,24 @@ "homepage": "https://github.com/bevry/scandirectory",

"---",
"slackin",
"patreon",
"gratipay",
"flattr",
"liberapay",
"buymeacoffee",
"opencollective",
"crypto",
"paypal",
"bitcoin",
"wishlist"
],
"config": {
"buymeacoffeeUsername": "balupton",
"cryptoURL": "https://bevry.me/crypto",
"flattrUsername": "balupton",
"liberapayUsername": "bevry",
"opencollectiveUsername": "bevry",
"patreonUsername": "bevry",
"gratipayUsername": "bevry",
"flattrUsername": "balupton",
"paypalURL": "https://bevry.me/paypal",
"bitcoinURL": "https://bevry.me/bitcoin",
"wishlistURL": "https://bevry.me/wishlist",
"slackinURL": "https://slack.bevry.me"
"travisTLD": "com"
}
},
"funding": "https://bevry.me/fund",
"author": "2011+ Benjamin Lupton <b@lupton.cc> (http://balupton.com), 2014+ Bevry Pty Ltd <us@bevry.me> (http://bevry.me)",

@@ -50,3 +54,4 @@ "maintainers": [

"Benjamin Lupton <b@lupton.cc> (http://balupton.com)",
"Sean Fridman <mail@seanfridman.com> (http://seanfridman.com)"
"Sean Fridman <mail@seanfridman.com> (http://seanfridman.com)",
"Bogdan Lysenko <lysenkobv@gmail.com> (http://www.linkedin.com/in/lysenkobv)"
],

@@ -61,59 +66,106 @@ "bugs": {

"engines": {
"node": ">=0.8"
"node": ">=0.12"
},
"editions": [
{
"description": "Source + ESNext + Require",
"description": "esnext source code with require for modules",
"directory": "source",
"entry": "index.js",
"directory": "source",
"syntaxes": [
"tags": [
"javascript",
"esnext",
"require",
"const",
"let"
]
"require"
],
"engines": {
"node": "6 || 8 || 10 || 12 || 13",
"browsers": false
}
},
{
"description": "Babel Compiled + ES2015 + Require",
"description": "esnext compiled for node.js with require for modules",
"directory": "edition-node-0.12",
"entry": "index.js",
"directory": "es2015",
"syntaxes": [
"tags": [
"javascript",
"es2015",
"require"
]
],
"engines": {
"node": "0.12 || 4 || 6 || 8 || 10 || 12 || 13",
"browsers": false
}
}
],
"main": "index.js",
"scripts": {
"setup": "npm install",
"clean": "rm -Rf ./docs ./es2015",
"compile": "npm run compile:es2015",
"compile:es2015": "babel ./source --out-dir ./es2015 --presets es2015",
"meta": "npm run meta:projectz",
"meta:projectz": "projectz compile",
"prepare": "npm run compile && npm run test && npm run meta",
"release": "npm run prepare && npm run release:publish && npm run release:tag && npm run release:push",
"release:publish": "npm publish",
"release:tag": "git tag v$npm_package_version -a",
"release:push": "git push origin master && git push origin --tags",
"pretest": "npm run test:eslint",
"test:eslint": "eslint ./source",
"test": "node --harmony ./test.js"
},
"dependencies": {
"editions": "^1.3.1",
"ignorefs": "^1.1.1",
"editions": "^2.2.0",
"ignorefs": "^1.3.0",
"readdir-cluster": "^1.1.0"
},
"devDependencies": {
"assert-helpers": "^4.4.0",
"babel-cli": "^6.16.0",
"babel-preset-es2015": "^6.16.0",
"eslint": "^2.3.0",
"joe": "^1.8.0",
"joe-reporter-console": "^1.2.1",
"projectz": "^1.3.0"
"@babel/cli": "^7.7.0",
"@babel/core": "^7.7.2",
"@babel/plugin-proposal-object-rest-spread": "^7.6.2",
"@babel/preset-env": "^7.7.1",
"assert-helpers": "4.10.0",
"eslint": "^6.6.0",
"eslint-config-bevry": "^1.2.1",
"eslint-config-prettier": "^6.5.0",
"eslint-plugin-prettier": "^3.1.1",
"kava": "^3.2.0",
"prettier": "^1.19.1",
"projectz": "^1.9.0",
"valid-directory": "^1.0.0"
},
"scripts": {
"our:clean": "rm -Rf ./docs ./edition* ./es2015 ./es5 ./out ./.next",
"our:compile": "npm run our:compile:edition-node-0.12",
"our:compile:edition-node-0.12": "env BABEL_ENV=edition-node-0.12 babel --out-dir ./edition-node-0.12 ./source",
"our:deploy": "echo no need for this project",
"our:meta": "npm run our:meta:projectz",
"our:meta:projectz": "projectz compile",
"our:release": "npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push",
"our:release:check-changelog": "cat ./HISTORY.md | grep v$npm_package_version || (echo add a changelog entry for v$npm_package_version && exit -1)",
"our:release:check-dirty": "git diff --exit-code",
"our:release:prepare": "npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta",
"our:release:push": "git push origin master && git push origin --tags",
"our:release:tag": "export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (echo 'proper changelog entry not found' && exit -1) && git tag v$npm_package_version -am \"$MESSAGE\"",
"our:setup": "npm run our:setup:install",
"our:setup:install": "npm install",
"our:test": "npm run our:verify && npm test",
"our:verify": "npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier",
"our:verify:directory": "npx valid-directory",
"our:verify:eslint": "eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source",
"our:verify:prettier": "prettier --write ./source/**",
"test": "node ./test.js"
},
"eslintConfig": {
"extends": [
"bevry"
]
},
"prettier": {
"semi": false,
"singleQuote": true
},
"babel": {
"env": {
"edition-node-0.12": {
"sourceType": "script",
"presets": [
[
"@babel/preset-env",
{
"targets": {
"node": 0.12
},
"modules": "commonjs"
}
]
],
"plugins": [
"@babel/proposal-object-rest-spread"
]
}
}
}
}

@@ -10,3 +10,3 @@ <!-- TITLE/ -->

<span class="badge-travisci"><a href="http://travis-ci.org/bevry/scandirectory" title="Check this project's build status on TravisCI"><img src="https://img.shields.io/travis/bevry/scandirectory/master.svg" alt="Travis CI Build Status" /></a></span>
<span class="badge-travisci"><a href="http://travis-ci.com/bevry/scandirectory" title="Check this project's build status on TravisCI"><img src="https://img.shields.io/travis/com/bevry/scandirectory/master.svg" alt="Travis CI Build Status" /></a></span>
<span class="badge-npmversion"><a href="https://npmjs.org/package/scandirectory" title="View this project on NPM"><img src="https://img.shields.io/npm/v/scandirectory.svg" alt="NPM version" /></a></span>

@@ -17,8 +17,9 @@ <span class="badge-npmdownloads"><a href="https://npmjs.org/package/scandirectory" title="View this project on NPM"><img src="https://img.shields.io/npm/dm/scandirectory.svg" alt="NPM downloads" /></a></span>

<br class="badge-separator" />
<span class="badge-slackin"><a href="https://slack.bevry.me" title="Join this project's slack community"><img src="https://slack.bevry.me/badge.svg" alt="Slack community badge" /></a></span>
<span class="badge-patreon"><a href="http://patreon.com/bevry" title="Donate to this project using Patreon"><img src="https://img.shields.io/badge/patreon-donate-yellow.svg" alt="Patreon donate button" /></a></span>
<span class="badge-gratipay"><a href="https://www.gratipay.com/bevry" title="Donate weekly to this project using Gratipay"><img src="https://img.shields.io/badge/gratipay-donate-yellow.svg" alt="Gratipay donate button" /></a></span>
<span class="badge-patreon"><a href="https://patreon.com/bevry" title="Donate to this project using Patreon"><img src="https://img.shields.io/badge/patreon-donate-yellow.svg" alt="Patreon donate button" /></a></span>
<span class="badge-flattr"><a href="https://flattr.com/profile/balupton" title="Donate to this project using Flattr"><img src="https://img.shields.io/badge/flattr-donate-yellow.svg" alt="Flattr donate button" /></a></span>
<span class="badge-liberapay"><a href="https://liberapay.com/bevry" title="Donate to this project using Liberapay"><img src="https://img.shields.io/badge/liberapay-donate-yellow.svg" alt="Liberapay donate button" /></a></span>
<span class="badge-buymeacoffee"><a href="https://buymeacoffee.com/balupton" title="Donate to this project using Buy Me A Coffee"><img src="https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg" alt="Buy Me A Coffee donate button" /></a></span>
<span class="badge-opencollective"><a href="https://opencollective.com/bevry" title="Donate to this project using Open Collective"><img src="https://img.shields.io/badge/open%20collective-donate-yellow.svg" alt="Open Collective donate button" /></a></span>
<span class="badge-crypto"><a href="https://bevry.me/crypto" title="Donate to this project using Cryptocurrency"><img src="https://img.shields.io/badge/crypto-donate-yellow.svg" alt="crypto donate button" /></a></span>
<span class="badge-paypal"><a href="https://bevry.me/paypal" title="Donate to this project using Paypal"><img src="https://img.shields.io/badge/paypal-donate-yellow.svg" alt="PayPal donate button" /></a></span>
<span class="badge-bitcoin"><a href="https://bevry.me/bitcoin" title="Donate once-off to this project using Bitcoin"><img src="https://img.shields.io/badge/bitcoin-donate-yellow.svg" alt="Bitcoin donate button" /></a></span>
<span class="badge-wishlist"><a href="https://bevry.me/wishlist" title="Buy an item on our wishlist for us"><img src="https://img.shields.io/badge/wishlist-donate-yellow.svg" alt="Wishlist browse button" /></a></span>

@@ -40,16 +41,16 @@

<a href="https://npmjs.com" title="npm is a package manager for javascript"><h3>NPM</h3></a><ul>
<a href="https://npmjs.com" title="npm is a package manager for javascript"><h3>npm</h3></a>
<ul>
<li>Install: <code>npm install --save scandirectory</code></li>
<li>Module: <code>require('scandirectory')</code></li></ul>
<li>Require: <code>require('scandirectory')</code></li>
</ul>
<h3><a href="https://github.com/bevry/editions" title="Editions are the best way to produce and consume packages you care about.">Editions</a></h3>
<h3><a href="https://editions.bevry.me" title="Editions are the best way to produce and consume packages you care about.">Editions</a></h3>
<p>This package is published with the following editions:</p>
<ul><li><code>scandirectory</code> aliases <code>scandirectory/index.js</code> which uses <a href="https://github.com/bevry/editions" title="Editions are the best way to produce and consume packages you care about.">Editions</a> to automatically select the correct edition for the consumers environment</li>
<li><code>scandirectory/source/index.js</code> is Source + <a href="https://babeljs.io/docs/learn-es2015/" title="ECMAScript Next">ESNext</a> + <a href="https://nodejs.org/dist/latest-v5.x/docs/api/modules.html" title="Node/CJS Modules">Require</a></li>
<li><code>scandirectory/es2015/index.js</code> is <a href="https://babeljs.io" title="The compiler for writing next generation JavaScript">Babel</a> Compiled + <a href="http://babeljs.io/docs/plugins/preset-es2015/" title="ECMAScript 2015">ES2015</a> + <a href="https://nodejs.org/dist/latest-v5.x/docs/api/modules.html" title="Node/CJS Modules">Require</a></li></ul>
<ul><li><code>scandirectory</code> aliases <code>scandirectory/index.js</code> which uses <a href="https://editions.bevry.me" title="Editions are the best way to produce and consume packages you care about.">Editions</a> to automatically select the correct edition for the consumers environment</li>
<li><code>scandirectory/source/index.js</code> is esnext source code with require for modules</li>
<li><code>scandirectory/edition-node-0.12/index.js</code> is esnext compiled for node.js with require for modules</li></ul>
<p>Older environments may need <a href="https://babeljs.io/docs/usage/polyfill/" title="A polyfill that emulates missing ECMAScript environment features">Babel's Polyfill</a> or something similar.</p>
<!-- /INSTALL -->

@@ -92,9 +93,9 @@

- `action` - (default null) can be `null` or a function to use for both the fileAction and dirAction
- `fileAction` - (default null) can be `null`, `false`, or a function to be the action callback
- `dirAction` - (default null) can be `null`, `false`, or a function to the action callback
- `recurse` - (default true) can be `null` or a boolean for whether or not to scan subdirectories too
- `readFiles` - (default false) can be `null` or a boolean for whether or not we should read the file contents
- `action` - (default `null`) can be `null` or a function to use for both the fileAction and dirAction
- `fileAction` - (default `null`) can be `null`, `false`, or a function to be the action callback
- `dirAction` - (default `null`) can be `null`, `false`, or a function to the action callback
- `recurse` - (default `true`) can be `null` or a boolean for whether or not to scan subdirectories too
- `readFiles` - (default `false`) can be `null` or a boolean for whether or not we should read the file contents
The options object is also sent to [ignorepatterns](https://github.com/bevry/ignorepatterns) so you can use its options too
The options object is also sent to [ignorefs](https://github.com/bevry/ignorefs) so you can use its options too

@@ -154,7 +155,9 @@ The completion callback accepts the following arguments:

<span class="badge-patreon"><a href="http://patreon.com/bevry" title="Donate to this project using Patreon"><img src="https://img.shields.io/badge/patreon-donate-yellow.svg" alt="Patreon donate button" /></a></span>
<span class="badge-gratipay"><a href="https://www.gratipay.com/bevry" title="Donate weekly to this project using Gratipay"><img src="https://img.shields.io/badge/gratipay-donate-yellow.svg" alt="Gratipay donate button" /></a></span>
<span class="badge-patreon"><a href="https://patreon.com/bevry" title="Donate to this project using Patreon"><img src="https://img.shields.io/badge/patreon-donate-yellow.svg" alt="Patreon donate button" /></a></span>
<span class="badge-flattr"><a href="https://flattr.com/profile/balupton" title="Donate to this project using Flattr"><img src="https://img.shields.io/badge/flattr-donate-yellow.svg" alt="Flattr donate button" /></a></span>
<span class="badge-liberapay"><a href="https://liberapay.com/bevry" title="Donate to this project using Liberapay"><img src="https://img.shields.io/badge/liberapay-donate-yellow.svg" alt="Liberapay donate button" /></a></span>
<span class="badge-buymeacoffee"><a href="https://buymeacoffee.com/balupton" title="Donate to this project using Buy Me A Coffee"><img src="https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg" alt="Buy Me A Coffee donate button" /></a></span>
<span class="badge-opencollective"><a href="https://opencollective.com/bevry" title="Donate to this project using Open Collective"><img src="https://img.shields.io/badge/open%20collective-donate-yellow.svg" alt="Open Collective donate button" /></a></span>
<span class="badge-crypto"><a href="https://bevry.me/crypto" title="Donate to this project using Cryptocurrency"><img src="https://img.shields.io/badge/crypto-donate-yellow.svg" alt="crypto donate button" /></a></span>
<span class="badge-paypal"><a href="https://bevry.me/paypal" title="Donate to this project using Paypal"><img src="https://img.shields.io/badge/paypal-donate-yellow.svg" alt="PayPal donate button" /></a></span>
<span class="badge-bitcoin"><a href="https://bevry.me/bitcoin" title="Donate once-off to this project using Bitcoin"><img src="https://img.shields.io/badge/bitcoin-donate-yellow.svg" alt="Bitcoin donate button" /></a></span>
<span class="badge-wishlist"><a href="https://bevry.me/wishlist" title="Buy an item on our wishlist for us"><img src="https://img.shields.io/badge/wishlist-donate-yellow.svg" alt="Wishlist browse button" /></a></span>

@@ -167,3 +170,4 @@

<ul><li><a href="http://balupton.com">Benjamin Lupton</a> — <a href="https://github.com/bevry/scandirectory/commits?author=balupton" title="View the GitHub contributions of Benjamin Lupton on repository bevry/scandirectory">view contributions</a></li>
<li><a href="http://seanfridman.com">Sean Fridman</a> — <a href="https://github.com/bevry/scandirectory/commits?author=sfrdmn" title="View the GitHub contributions of Sean Fridman on repository bevry/scandirectory">view contributions</a></li></ul>
<li><a href="http://seanfridman.com">Sean Fridman</a> — <a href="https://github.com/bevry/scandirectory/commits?author=sfrdmn" title="View the GitHub contributions of Sean Fridman on repository bevry/scandirectory">view contributions</a></li>
<li><a href="http://www.linkedin.com/in/lysenkobv">Bogdan Lysenko</a> — <a href="https://github.com/bevry/scandirectory/commits?author=lysenkobv" title="View the GitHub contributions of Bogdan Lysenko on repository bevry/scandirectory">view contributions</a></li></ul>

@@ -170,0 +174,0 @@ <a href="https://github.com/bevry/scandirectory/blob/master/CONTRIBUTING.md#files">Discover how you can contribute by heading on over to the <code>CONTRIBUTING.md</code> file.</a>

/* eslint no-inner-declarations:0 */
'use strict'
// Import
const {relative, join} = require('path')
const {readFileSync} = require('fs')
const { relative, join } = require('path')
const { readFileSync } = require('fs')
const readdir = require('readdir-cluster')

@@ -10,3 +11,3 @@ const ignorefs = require('ignorefs')

// Scan a directory recursively
function scandirectory (...args) {
function scandirectory(...args) {
// Prepare

@@ -19,4 +20,4 @@ const list = {}

const opts = {}
args.forEach(function (arg) {
switch ( typeof arg ) {
args.forEach(function(arg) {
switch (typeof arg) {
case 'string':

@@ -29,3 +30,3 @@ opts.path = arg

case 'object':
Object.keys(arg).forEach(function (key) {
Object.keys(arg).forEach(function(key) {
opts[key] = arg[key]

@@ -40,19 +41,21 @@ })

// Prepare defaults
if ( opts.recurse == null ) opts.recurse = true
if ( opts.readFiles == null ) opts.readFiles = false
if ( opts.next == null ) opts.next = function (err) { if ( err ) throw err }
if (opts.recurse == null) opts.recurse = true
if (opts.readFiles == null) opts.readFiles = false
if (opts.next == null)
opts.next = function(err) {
if (err) throw err
}
const next = opts.next
// Action
if ( opts.action != null ) {
if ( opts.fileAction == null ) opts.fileAction = opts.action
if ( opts.dirAction == null ) opts.dirAction = opts.action
if (opts.action != null) {
if (opts.fileAction == null) opts.fileAction = opts.action
if (opts.dirAction == null) opts.dirAction = opts.action
}
// Check needed
if ( !opts.path ) {
if ( opts.parentPath ) {
if (!opts.path) {
if (opts.parentPath) {
opts.path = opts.parentPath
}
else {
} else {
const err = new Error('scandirectory: path is needed')

@@ -64,4 +67,6 @@ return next(err)

// Check
if ( opts.readFiles && next.length < 2 ) {
const err = new Error('scandirectory: readFiles is set but not enough completion callback arguments to receive the data')
if (opts.readFiles && next.length < 2) {
const err = new Error(
'scandirectory: readFiles is set but not enough completion callback arguments to receive the data'
)
return next(err)

@@ -71,6 +76,6 @@ }

// Iterator
function iterator (fullPath, filename, stat) {
function iterator(fullPath, filename, stat) {
// Prepare
const relativePath = relative(opts.path, fullPath)
if ( next.length >= 2 ) {
if (next.length >= 2) {
files[relativePath] = filename

@@ -80,3 +85,3 @@ }

// Check
if ( ignorefs.isIgnoredPath(fullPath, opts) ) {
if (ignorefs.isIgnoredPath(fullPath, opts)) {
return false

@@ -86,11 +91,14 @@ }

// Directory
if ( stat.directory ) {
if (stat.directory) {
// Skip?
const skip = opts.dirAction === false || opts.dirAction && opts.dirAction(fullPath, relativePath, filename, stat) === false
if ( skip ) return false
const skip =
opts.dirAction === false ||
(opts.dirAction &&
opts.dirAction(fullPath, relativePath, filename, stat) === false)
if (skip) return false
// Append
if ( next.length >= 2 ) {
if (next.length >= 2) {
list[relativePath] = 'dir'
if ( next.length === 3 ) {
if (next.length === 3) {
trees[relativePath] = {}

@@ -101,3 +109,3 @@ }

// No Recurse
if ( !opts.recurse ) return false
if (!opts.recurse) return false
}

@@ -108,20 +116,22 @@

// Skip?
const skip = opts.fileAction === false || opts.fileAction && opts.fileAction(fullPath, relativePath, filename, stat) === false
if ( skip ) return false
const skip =
opts.fileAction === false ||
(opts.fileAction &&
opts.fileAction(fullPath, relativePath, filename, stat) === false)
if (skip) return false
// Append
if ( opts.readFiles ) {
if (opts.readFiles) {
// Read file
let data = readFileSync(fullPath)
if ( opts.readFiles !== 'binary' ) {
if (opts.readFiles !== 'binary') {
data = data.toString()
}
list[relativePath] = data
if ( next.length === 3 ) {
if (next.length === 3) {
trees[relativePath] = data
}
}
else if ( next.length >= 2 ) {
} else if (next.length >= 2) {
list[relativePath] = 'file'
if ( next.length === 3 ) {
if (next.length === 3) {
trees[relativePath] = true

@@ -134,25 +144,23 @@ }

// Read
readdir(opts.path, iterator, function (err) {
if ( err ) {
readdir(opts.path, iterator, function(err) {
if (err) {
next(err)
}
else if ( next.length <= 1 ) {
} else if (next.length <= 1) {
next(null)
}
else if ( next.length === 2 ) {
} else if (next.length === 2) {
next(null, list)
}
else {
} else {
const tree = {}
Object.keys(list).sort().forEach(function (relativePath) {
const filename = files[relativePath]
// root?
if ( relativePath === filename ) {
tree[relativePath] = trees[relativePath]
}
else {
const parent = join(relativePath, '..')
trees[parent][filename] = trees[relativePath]
}
})
Object.keys(list)
.sort()
.forEach(function(relativePath) {
const filename = files[relativePath]
// root?
if (relativePath === filename) {
tree[relativePath] = trees[relativePath]
} else {
const parent = join(relativePath, '..')
trees[parent][filename] = trees[relativePath]
}
})
next(null, list, tree)

@@ -159,0 +167,0 @@ }

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc