tensorflow-helpers
Version:
Helper functions to use tensorflow in nodejs for transfer learning, image classification, and more
56 lines (55 loc) • 2.11 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.scanDir = scanDir;
exports.isContentHash = isContentHash;
exports.saveFile = saveFile;
exports.hashContent = hashContent;
exports.renameFileByContentHash = renameFileByContentHash;
const crypto_1 = require("crypto");
const fs_1 = require("@beenotung/tslib/fs");
const promises_1 = require("fs/promises");
const path_1 = require("path");
/**
* @description
* - rename filename to content hash + extname;
* - return list of (renamed) filenames
*/
async function scanDir(dir) {
let filenames = await (0, fs_1.getDirFilenames)(dir);
for (let i = 0; i < filenames.length; i++) {
let filename = filenames[i];
if (!isContentHash(filename)) {
filenames[i] = await renameFileByContentHash((0, path_1.join)(dir, filename));
}
}
return filenames;
}
function isContentHash(file_or_filename) {
let filename = (0, path_1.basename)(file_or_filename);
let ext = (0, path_1.extname)(filename);
let name = ext.length == 0 ? filename : filename.slice(0, -ext.length);
return name.length * 4 == 256 && Buffer.from(name, 'hex').length * 8 == 256;
}
async function saveFile(args) {
let ext = args.mimeType.split('/').pop().split(';')[0];
let filename = hashContent(args.content) + '.' + ext;
let file = (0, path_1.join)(args.dir, filename);
await (0, promises_1.writeFile)(file, args.content);
}
function hashContent(content, encoding = 'hex') {
let hash = (0, crypto_1.createHash)('sha256');
hash.write(content);
return hash.digest().toString(encoding);
}
/** @returns new filename with content hash and extname */
async function renameFileByContentHash(file) {
let dir = (0, path_1.dirname)(file);
let filename = (0, path_1.basename)(file);
let ext = (0, path_1.extname)(filename);
let content = await (0, promises_1.readFile)(file);
let hash = hashContent(content);
let newFilename = hash + ext;
let newFile = (0, path_1.join)(dir, newFilename);
await (0, promises_1.rename)(file, newFile);
return newFile;
}
;