# file-loop

> Loop some file names

Latest version **2.0.2** (published 2016-01-15) · MIT license · 0 weekly downloads

## Install

```sh
npm install file-loop
pnpm add file-loop
yarn add file-loop
bun add file-loop
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 2.0.2 |
| Published | 2016-01-15 |
| First published | 2015-12-04 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 2 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 0 |
| Author | Quentin Engles |
| Maintainers | hollowdoor |
| Keywords | fs, files |

## Links

- npm: https://www.npmjs.com/package/file-loop
- Repository: https://github.com/hollowdoor/file_loop
- Homepage: https://github.com/hollowdoor/file_loop#readme
- Issues: https://github.com/hollowdoor/file_loop/issues
- npm.io page: https://npm.io/package/file-loop

## Dependencies (2)

- [mime](https://npm.io/package/mime.md) ^1.3.4
- [multimatcher](https://npm.io/package/multimatcher.md) ^2.0.2

## Alternatives

- [unionfs](https://npm.io/package/unionfs.md) — 2.2M weekly downloads
- [path-starts-with](https://npm.io/package/path-starts-with.md) — 35.9K weekly downloads
- [redzip](https://npm.io/package/redzip.md) — 1.2K weekly downloads
- [vscode-anymatch](https://npm.io/package/vscode-anymatch.md) — 848 weekly downloads
- [@ledgerhq/coin-filecoin](https://npm.io/package/@ledgerhq/coin-filecoin.md) — 793 weekly downloads

## Recent versions

- 2.0.2 (latest) — 2016-01-15
- 2.0.1 — 2016-01-07
- 2.0.0 — 2016-01-06
- 1.1.2 — 2016-01-05
- 1.1.1 — 2015-12-04
- 1.0.1 — 2015-12-04
- 1.0.0 — 2015-12-04

## README

file-loop
=========

Install
-------

`npm install --save file-loop`

News
----

`file-loop` now finds directories, sub-directories, and files in those sub-directories.

There is also the new path fields, and root returned by the promise.

Other than that the api is basically the same.

Usage
-----

Copy a bunch of javascript files using [co](https://www.npmjs.com/package/co), and [cpr-omen](https://www.npmjs.com/package/cpr-omen):

```javascript
var finder = require('file-loop'),
    co = require('co'),
    copy = require('cpr-omen'),
    path = require('path');

co(function * (){
    var find = yield finder(['*.js']), file;

    while(file = yield find()){
        yield copy(file.path, path.join('dest', file.name));
    }
});
```

### Understanding the code

```javascript
co(function * (){
    //Calling finder returns a promise that resolves to a function
    //which is assigned to the variable find.
    var find = yield finder(['*.js']),
        file;

    //Calling find returns a promise that resolves to an object.
    while(file = yield find()){
        //The fields
        //file.name = the file name
        //file.path = the full path of the file
        //file.stats = the stats for the file
        //file.root = the cwd of the file
        yield copy(file.path, path.join('dest', file.name));
    }
});
```

Though these examples don't show it the lib `co` returns a promise.

API
---

### finder(array, options) -> promise

Returns a promise that resolves to a function.

The array passed to finder can be one of these string values:

-	file name
-	regular expression
-	glob string

### options

Options should be an object with these fields:

#### options.ignore = Array

An array of files to not include in the set of found files. These are the same value types as the first argument to the `finder` function.

#### options.cwd = String

The directory to **find** files in. The default is `process.cwd`.

Look at [multimatcher](https://www.npmjs.com/package/multimatcher) for more information.

### find() -> promise

Returns a promise that resolves to an object with these fields.

-	file.name = the basename of the file
-	file.path = the full path of the file
-	file.stats = the stats for the file
-	file.root = the cwd of the file

When there are no more files then the promise resolves to `null` which will stop a loop.

Possible Usage
--------------

If **async/await** is an option available to you then you can do this:

```javascript
var finder = require('file-loop'),
    co = require('co'),
    copy = require('cpr-omen'),
    path = require('path');

async function copyScripts (){
    let find = await finder(['*.js']);

    while(let file = await find()){
        await copy(file.path, path.join('dest', file.name));
    }
}

copyScripts();
```

Happy coding!

---
_Source: https://npm.io/package/file-loop · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
