UNPKG

@dpkit/file

Version:

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

32 lines 4.09 kB
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==