@file-cache/core
Version:
A cache for file metadata or file content.
115 lines (98 loc) • 2.39 kB
Markdown
# @file-cache/core
A cache for file metadata or file content.
## Installation
```
npm install @file-cache/core
```
## Usage
```js
import { createCache } from '@file-cache/core';
// use metadata starategy to detect changes
const cache = await createCache({
name: "your-tool-name",
keys: [
() => "test",
() => "custom"
],
mode: "metadata"
});
const filePath = path.resolve(__dirname, "./fixtures/f1.txt");
const result = await cache.getAndUpdateCache(filePath);
assert.deepStrictEqual(result, {
changed: true,
error: undefined
});
// write the updates to cache file
await cache.reconcile();
// re-get the file status
const result2 = await cache.getAndUpdateCache(filePath);
assert.deepStrictEqual(result2, {
changed: false,
error: undefined
});
```
You can disable cache by `noCache` options.
```js
import { createCache } from '@file-cache/core';
// use metadata starategy to detect changes
const cache = await createCache({
name: "your-tool-name",
keys: [
() => "test",
() => "custom"
],
mode: "metadata",
noCache: true,
});
const filePath = path.resolve(__dirname, "./fixtures/f1.txt");
const result = await cache.getAndUpdateCache(filePath);
assert.deepStrictEqual(result, {
changed: true,
error: undefined
});
await cache.reconcile();
// always, the result.changed is true
const result2 = await cache.getAndUpdateCache(filePath);
assert.deepStrictEqual(result2, {
changed: true,
error: undefined
});
```
### Options
```ts
export type CreateCacheOptions = {
/**
* The name of your tool
*/
name: string;
/**
* - content: Using the hash value of file content
* - Slow but accurate
* - metadata: Using the metadata of file
* - Fast but not accurate
* - It can not be used in CI env
*/
mode: "content" | "metadata";
/**
* The key generators for cache file
*/
keys: CreateCacheKeyGenerator[];
/**
* Custom cache directory.
* Default: node_modules/.cache/<pkg-name>
*/
cacheDirectory?: string;
};
```
## Tests
```
npm test
```
## Contributing
1. Fork it!
2. Create your feature branch: `git checkout -b my-new-feature`
3. Commit your changes: `git commit -am 'Add some feature'`
4. Push to the branch: `git push origin my-new-feature`
5. Submit a pull request :D
## License
MIT