Save equal files only once, avoid duplicates.
NPM
npm install uniquer
Yarn
yarn add uniquer
Synchronously
import Uniquer from 'uniquer';
const fileName = Uniquer.writeSync('./output/', '.txt', 'Hello, world!');
// 315f5bdb...5894edd3.txt
console.log(fileName);
Asynchronously
import Uniquer from 'uniquer';
const fileName = await Uniquer.write('./output/', '.txt', 'Hello, world!');
// 315f5bdb...5894edd3.txt
console.log(fileName);
This may be all you need to use Uniquer. For advanced usage, see API
No duplicates, more storage.
Only write a file if it doesn't exist.
No need to think of a creative file name.
No duplicates, less files, cleaner.
The concept is that simple:
- Create the SHA256 hash of the passed data.
- Get the file name by appending the file extension.
- Check if a file with this name already exists. If...
- ...not, create it.
- ...yes, do nothing.
This means: Same data, same file name. So, if you try to write the same data multiple times, it will:
- write the data only once.
- only create a single file.
There is no need to worry that there could be a duplicate file name, as there wasn't any collision with SHA256 ever. More here.
Write data to a unique file synchronously.
Calling multiple times with the exact same data,
will result in the same file name.
directory |
String |
Path to the output directory |
extension |
String |
File extension |
data |
String | ArrayBufferView |
The file's data |
[options ] |
String | WriteFileOptions |
Encoding or WriteFileOptions |
returns | String |
File name of created file |
Example
import Uniquer from 'uniquer';
// 315f5bdb...5894edd3.txt
const fileName = Uniquer.writeSync('./output/', '.txt', 'Hello, world!');
Write data to a unique file asynchronously.
Calling multiple times with the exact same data,
will result in the same file name.
directory |
String |
Path to the output directory |
extension |
String |
File extension |
data |
String | ArrayBufferView |
The file's data |
[options ] |
String | WriteFileOptions |
Encoding or WriteFileOptions |
returns | Promise<String> |
File name of created file |
Example
import Uniquer from 'uniquer';
// 315f5bdb...5894edd3.txt
const fileName = await Uniquer.write('./output/', '.txt', 'Hello, world!');
Resolve the unique file path, based on the file hash + extension.
extension |
String |
File extension |
data |
String | ArrayBufferView |
The file's data |
returns | String |
Resolved file name |
Example
import Uniquer from 'uniquer';
// 315f5bdb...5894edd3.txt
const fileName = Uniquer.getFileName('.txt', 'Hello, world!');
Resolve the unique file path, based on the file hash + extension.
directory |
String |
Path to the output directory |
extension |
String |
File extension |
data |
String | ArrayBufferView |
The file's data |
returns | String |
Resolved file path |
Example
import Uniquer from 'uniquer';
// /home/user/output/315f5bdb...5894edd3.txt
const filePath = Uniquer.getFilePath('/home/user/output/', '.txt', 'Hello, world!');
Get the SHA256 hash of the data, converted to hex format.
data |
String | ArrayBufferView |
The file's data |
returns | String |
SHA256 file hash |
Example
import Uniquer from 'uniquer';
const hash = Uniquer.getFileHash('Hello, world!');
// 315f5bdb...5894edd3
console.log(hash);