@dpkit/file
Version:
Fast TypeScript data management framework built on top of the Data Package standard and Polars DataFrames
32 lines • 4.09 kB
JavaScript
import { prefetchFile } from "./fetch.js";
import { inferFileBytes, inferFileHash } from "./infer.js";
export async function validateFile(path, options) {
const errors = [];
const localPath = await prefetchFile(path);
if (options?.bytes) {
const bytes = await inferFileBytes(localPath);
if (bytes !== options.bytes) {
errors.push({
type: "file/bytes",
bytes: options.bytes,
actualBytes: bytes,
});
}
}
if (options?.hash) {
const [_hashValue, hashType = "md5"] = options.hash.split(":").toReversed();
// TODO: figure out how we should handle other hash types
// @ts-ignore
const hash = await inferFileHash(localPath, { hashType });
if (hash !== options.hash) {
errors.push({
type: "file/hash",
hash: options.hash,
actualHash: hash,
});
}
}
const valid = errors.length === 0;
return { valid, errors };
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9maWxlL3ZhbGlkYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDekMsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFMUQsTUFBTSxDQUFDLEtBQUssVUFBVSxZQUFZLENBQ2hDLElBQVksRUFDWixPQUEyQztJQUUzQyxNQUFNLE1BQU0sR0FBZ0IsRUFBRSxDQUFBO0lBQzlCLE1BQU0sU0FBUyxHQUFHLE1BQU0sWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBRTFDLElBQUksT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ25CLE1BQU0sS0FBSyxHQUFHLE1BQU0sY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQzdDLElBQUksS0FBSyxLQUFLLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM1QixNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUNWLElBQUksRUFBRSxZQUFZO2dCQUNsQixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7Z0JBQ3BCLFdBQVcsRUFBRSxLQUFLO2FBQ25CLENBQUMsQ0FBQTtRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDbEIsTUFBTSxDQUFDLFVBQVUsRUFBRSxRQUFRLEdBQUcsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUE7UUFDM0UseURBQXlEO1FBQ3pELGFBQWE7UUFDYixNQUFNLElBQUksR0FBRyxNQUFNLGFBQWEsQ0FBQyxTQUFTLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFBO1FBQ3pELElBQUksSUFBSSxLQUFLLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMxQixNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUNWLElBQUksRUFBRSxXQUFXO2dCQUNqQixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7Z0JBQ2xCLFVBQVUsRUFBRSxJQUFJO2FBQ2pCLENBQUMsQ0FBQTtRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUE7SUFDakMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQTtBQUMxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBGaWxlRXJyb3IgfSBmcm9tIFwiLi4vZXJyb3IvaW5kZXgudHNcIlxuaW1wb3J0IHsgcHJlZmV0Y2hGaWxlIH0gZnJvbSBcIi4vZmV0Y2gudHNcIlxuaW1wb3J0IHsgaW5mZXJGaWxlQnl0ZXMsIGluZmVyRmlsZUhhc2ggfSBmcm9tIFwiLi9pbmZlci50c1wiXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2YWxpZGF0ZUZpbGUoXG4gIHBhdGg6IHN0cmluZyxcbiAgb3B0aW9ucz86IHsgYnl0ZXM/OiBudW1iZXI7IGhhc2g/OiBzdHJpbmcgfSxcbikge1xuICBjb25zdCBlcnJvcnM6IEZpbGVFcnJvcltdID0gW11cbiAgY29uc3QgbG9jYWxQYXRoID0gYXdhaXQgcHJlZmV0Y2hGaWxlKHBhdGgpXG5cbiAgaWYgKG9wdGlvbnM/LmJ5dGVzKSB7XG4gICAgY29uc3QgYnl0ZXMgPSBhd2FpdCBpbmZlckZpbGVCeXRlcyhsb2NhbFBhdGgpXG4gICAgaWYgKGJ5dGVzICE9PSBvcHRpb25zLmJ5dGVzKSB7XG4gICAgICBlcnJvcnMucHVzaCh7XG4gICAgICAgIHR5cGU6IFwiZmlsZS9ieXRlc1wiLFxuICAgICAgICBieXRlczogb3B0aW9ucy5ieXRlcyxcbiAgICAgICAgYWN0dWFsQnl0ZXM6IGJ5dGVzLFxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBpZiAob3B0aW9ucz8uaGFzaCkge1xuICAgIGNvbnN0IFtfaGFzaFZhbHVlLCBoYXNoVHlwZSA9IFwibWQ1XCJdID0gb3B0aW9ucy5oYXNoLnNwbGl0KFwiOlwiKS50b1JldmVyc2VkKClcbiAgICAvLyBUT0RPOiBmaWd1cmUgb3V0IGhvdyB3ZSBzaG91bGQgaGFuZGxlIG90aGVyIGhhc2ggdHlwZXNcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgaGFzaCA9IGF3YWl0IGluZmVyRmlsZUhhc2gobG9jYWxQYXRoLCB7IGhhc2hUeXBlIH0pXG4gICAgaWYgKGhhc2ggIT09IG9wdGlvbnMuaGFzaCkge1xuICAgICAgZXJyb3JzLnB1c2goe1xuICAgICAgICB0eXBlOiBcImZpbGUvaGFzaFwiLFxuICAgICAgICBoYXNoOiBvcHRpb25zLmhhc2gsXG4gICAgICAgIGFjdHVhbEhhc2g6IGhhc2gsXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHZhbGlkID0gZXJyb3JzLmxlbmd0aCA9PT0gMFxuICByZXR1cm4geyB2YWxpZCwgZXJyb3JzIH1cbn1cbiJdfQ==