UNPKG

tensorflow-helpers

Version:

Helper functions to use tensorflow in nodejs for transfer learning, image classification, and more

56 lines (55 loc) 2.11 kB
"use strict"; 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; }