fx43
TypeScript icon, indicating that this package has built-in type declarations

2.1.0 • Public • Published

fx43-node

MEAN Module Build Status npm version Node.js Version

Detecting changed files via caching file modification time.

Installation

# npm 
npm install --save fx43
 
# yarn 
yarn add fx43

Run tests:

# npm 
npm test
 
# yarn 
yarn test

Usage

Fx43 offers 3 ways to track files:

  • All files mode: all files are tracked.
  • Ignore file mode: like .gitignore, tracks files in respect to nested ignore files.
  • Custom mode: tracks files filtered by custom JavaScript functions.

All files mode

import { startAllFilesModeAsync } from 'fx43';
// ES5: const startAllFilesModeAsync = require('fx43').startAllFilesModeAsync;
 
startAllFilesModeAsync(
  rootDirectory: string,
  cacheDirectory: string,
  ignoreCache: boolean = false,
): Promise<string[]>;

Ignore file mode

import { startIgnoreFileModeAsync } from 'fx43';
// ES5: const startIgnoreFileModeAsync = require('fx43').startIgnoreFileModeAsync;
 
startIgnoreFileModeAsync(
  rootDirectory: string,
  ignoreFiles: string[],   // e.g. ['.myignore', '.gitignore']
  cacheDirectory: string,
  ignoreCache: boolean = false,
): Promise<string[]>;

Custom mode

import { startCustomModeAsync } from 'fx43';
// ES5: const startCustomModeAsync = require('fx43').startCustomModeAsync;
 
startCustomModeAsync(
  rootDirectory: string,
  cacheDirectory: string,
  ignoreCache: boolean = false,
  // use this to filter files
  fileFilter: ((fileName: string) => boolean) | null = null,
  // use this to filter directories
  dirFilter: ((dirName: string) => boolean) | null = null,
): Promise<string[]>;

Example

Suppose you have some files in a directory named data:

- data/
  index.html
  main.js
  style.css
  lib/
    lib.js

You need to track all changed .js files. In this case, you can use ignore file mode. Define an ignore file like .gitignore, for example, .myignore with the following contents:

# .myignore
# put this file to the root folder of the project

# ignore html and css files
*.html
*.css

Then call fx43 APIs like this:

import { startIgnoreFileModeAsync } from 'fx43';
 
async function printChangedFiles() {
  const files = await startIgnoreFileModeAsync('./data', ['.myignore'], './.cache');
  console.log(`${files.length} file(s) changed.\n${files}`);
}
 
(async () => {
  await printChangedFiles();
})();
# run the program 
node example.js
# output 
2 file(s) changed.
main.js
lib/lib.js
 
# run the program 
node example.js
# output 
0 file(s) changed.
 
# modify and create some files 
touch ./data/lib/lib.js
touch ./data/new.js
# run the program 
node example.js
# output 
2 file(s) changed.
lib/lib.js
new.js
 
# modify an irrelevant file 
touch ./data/style.css
# run the program 
node example.js
# output 
0 file(s) changed.

For more examples, see examples.

Package Sidebar

Install

npm i fx43

Weekly Downloads

17

Version

2.1.0

License

MIT

Unpacked Size

24.1 kB

Total Files

31

Last publish

Collaborators

  • mgenware