UNPKG

@dpkit/file

Version:

Fast TypeScript data management framework built on top of the Data Package standard and Polars DataFrames

33 lines 4.93 kB
import { stat } from "node:fs/promises"; import chardet from "chardet"; import { hashFile } from "hasha"; import { isBinaryFile } from "isbinaryfile"; import { prefetchFile } from "./fetch.js"; import { loadFile } from "./load.js"; export async function inferFileHash(path, options) { const localPath = await prefetchFile(path); const algorithm = options?.hashType ?? "sha256"; const result = await hashFile(localPath, { algorithm }); return `${algorithm}:${result}`; } export async function inferFileBytes(path) { const localPath = await prefetchFile(path); const result = await stat(localPath); return result.size; } export async function inferFileEncoding(path, options) { const maxBytes = options?.sampleBytes ?? 10_000; const confidencePercent = options?.confidencePercent ?? 75; const buffer = await loadFile(path, { maxBytes }); const isBinary = await isBinaryFile(buffer); if (!isBinary) { const matches = chardet.analyse(buffer); for (const match of matches) { if (match.confidence >= confidencePercent) { return match.name.toLowerCase(); } } } return undefined; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9maWxlL2luZmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN2QyxPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUE7QUFDN0IsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQTtBQUNoQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDekMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUlwQyxNQUFNLENBQUMsS0FBSyxVQUFVLGFBQWEsQ0FDakMsSUFBWSxFQUNaLE9BQWlDO0lBRWpDLE1BQU0sU0FBUyxHQUFHLE1BQU0sWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQzFDLE1BQU0sU0FBUyxHQUFHLE9BQU8sRUFBRSxRQUFRLElBQUksUUFBUSxDQUFBO0lBRS9DLE1BQU0sTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLFNBQVMsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUE7SUFDdkQsT0FBTyxHQUFHLFNBQVMsSUFBSSxNQUFNLEVBQUUsQ0FBQTtBQUNqQyxDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxjQUFjLENBQUMsSUFBWTtJQUMvQyxNQUFNLFNBQVMsR0FBRyxNQUFNLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUUxQyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUNwQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUE7QUFDcEIsQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsaUJBQWlCLENBQ3JDLElBQVksRUFDWixPQUE4RDtJQUU5RCxNQUFNLFFBQVEsR0FBRyxPQUFPLEVBQUUsV0FBVyxJQUFJLE1BQU0sQ0FBQTtJQUMvQyxNQUFNLGlCQUFpQixHQUFHLE9BQU8sRUFBRSxpQkFBaUIsSUFBSSxFQUFFLENBQUE7SUFFMUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQTtJQUNqRCxNQUFNLFFBQVEsR0FBRyxNQUFNLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUUzQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDZCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ3ZDLEtBQUssTUFBTSxLQUFLLElBQUksT0FBTyxFQUFFLENBQUM7WUFDNUIsSUFBSSxLQUFLLENBQUMsVUFBVSxJQUFJLGlCQUFpQixFQUFFLENBQUM7Z0JBQzFDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtZQUNqQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLFNBQVMsQ0FBQTtBQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3RhdCB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCJcbmltcG9ydCBjaGFyZGV0IGZyb20gXCJjaGFyZGV0XCJcbmltcG9ydCB7IGhhc2hGaWxlIH0gZnJvbSBcImhhc2hhXCJcbmltcG9ydCB7IGlzQmluYXJ5RmlsZSB9IGZyb20gXCJpc2JpbmFyeWZpbGVcIlxuaW1wb3J0IHsgcHJlZmV0Y2hGaWxlIH0gZnJvbSBcIi4vZmV0Y2gudHNcIlxuaW1wb3J0IHsgbG9hZEZpbGUgfSBmcm9tIFwiLi9sb2FkLnRzXCJcblxuZXhwb3J0IHR5cGUgSGFzaFR5cGUgPSBcIm1kNVwiIHwgXCJzaGExXCIgfCBcInNoYTI1NlwiIHwgXCJzaGE1MTJcIlxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5mZXJGaWxlSGFzaChcbiAgcGF0aDogc3RyaW5nLFxuICBvcHRpb25zPzogeyBoYXNoVHlwZT86IEhhc2hUeXBlIH0sXG4pIHtcbiAgY29uc3QgbG9jYWxQYXRoID0gYXdhaXQgcHJlZmV0Y2hGaWxlKHBhdGgpXG4gIGNvbnN0IGFsZ29yaXRobSA9IG9wdGlvbnM/Lmhhc2hUeXBlID8/IFwic2hhMjU2XCJcblxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYXNoRmlsZShsb2NhbFBhdGgsIHsgYWxnb3JpdGhtIH0pXG4gIHJldHVybiBgJHthbGdvcml0aG19OiR7cmVzdWx0fWBcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluZmVyRmlsZUJ5dGVzKHBhdGg6IHN0cmluZykge1xuICBjb25zdCBsb2NhbFBhdGggPSBhd2FpdCBwcmVmZXRjaEZpbGUocGF0aClcblxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdGF0KGxvY2FsUGF0aClcbiAgcmV0dXJuIHJlc3VsdC5zaXplXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbmZlckZpbGVFbmNvZGluZyhcbiAgcGF0aDogc3RyaW5nLFxuICBvcHRpb25zPzogeyBzYW1wbGVCeXRlcz86IG51bWJlcjsgY29uZmlkZW5jZVBlcmNlbnQ/OiBudW1iZXIgfSxcbikge1xuICBjb25zdCBtYXhCeXRlcyA9IG9wdGlvbnM/LnNhbXBsZUJ5dGVzID8/IDEwXzAwMFxuICBjb25zdCBjb25maWRlbmNlUGVyY2VudCA9IG9wdGlvbnM/LmNvbmZpZGVuY2VQZXJjZW50ID8/IDc1XG5cbiAgY29uc3QgYnVmZmVyID0gYXdhaXQgbG9hZEZpbGUocGF0aCwgeyBtYXhCeXRlcyB9KVxuICBjb25zdCBpc0JpbmFyeSA9IGF3YWl0IGlzQmluYXJ5RmlsZShidWZmZXIpXG5cbiAgaWYgKCFpc0JpbmFyeSkge1xuICAgIGNvbnN0IG1hdGNoZXMgPSBjaGFyZGV0LmFuYWx5c2UoYnVmZmVyKVxuICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgbWF0Y2hlcykge1xuICAgICAgaWYgKG1hdGNoLmNvbmZpZGVuY2UgPj0gY29uZmlkZW5jZVBlcmNlbnQpIHtcbiAgICAgICAgcmV0dXJuIG1hdGNoLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWRcbn1cbiJdfQ==