@dpkit/file
Version:
Fast TypeScript data management framework built on top of the Data Package standard and Polars DataFrames
27 lines • 3.81 kB
JavaScript
import { createReadStream } from "node:fs";
import { Readable } from "node:stream";
import { isRemotePath } from "@dpkit/core";
export async function readFileStream(pathOrPaths, options) {
const index = options?.index ?? 0;
const paths = Array.isArray(pathOrPaths) ? pathOrPaths : [pathOrPaths];
const path = paths[index];
if (!path) {
throw new Error(`Cannot stream resource ${path} at index ${index}`);
}
const isRemote = isRemotePath(path);
const stream = isRemote
? await readRemoteFileStream(path)
: await readLocalFileStream(path);
return stream;
}
async function readRemoteFileStream(path) {
const response = await fetch(path);
if (!response.body) {
throw new Error(`Cannot stream remote resource: ${path}`);
}
return Readable.fromWeb(response.body);
}
async function readLocalFileStream(path) {
return createReadStream(path);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2dlbmVyYWwvc3RyZWFtL3JlYWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQzFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUUxQyxNQUFNLENBQUMsS0FBSyxVQUFVLGNBQWMsQ0FDbEMsV0FBOEIsRUFDOUIsT0FBNEI7SUFFNUIsTUFBTSxLQUFLLEdBQUcsT0FBTyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUE7SUFFakMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQ3RFLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUV6QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDVixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixJQUFJLGFBQWEsS0FBSyxFQUFFLENBQUMsQ0FBQTtJQUNyRSxDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ25DLE1BQU0sTUFBTSxHQUFHLFFBQVE7UUFDckIsQ0FBQyxDQUFDLE1BQU0sb0JBQW9CLENBQUMsSUFBSSxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxNQUFNLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFBO0lBRW5DLE9BQU8sTUFBTSxDQUFBO0FBQ2YsQ0FBQztBQUVELEtBQUssVUFBVSxvQkFBb0IsQ0FBQyxJQUFZO0lBQzlDLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUMzRCxDQUFDO0lBRUQsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtBQUN4QyxDQUFDO0FBRUQsS0FBSyxVQUFVLG1CQUFtQixDQUFDLElBQVk7SUFDN0MsT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQTtBQUMvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlUmVhZFN0cmVhbSB9IGZyb20gXCJub2RlOmZzXCJcbmltcG9ydCB7IFJlYWRhYmxlIH0gZnJvbSBcIm5vZGU6c3RyZWFtXCJcbmltcG9ydCB7IGlzUmVtb3RlUGF0aCB9IGZyb20gXCJAZHBraXQvY29yZVwiXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkRmlsZVN0cmVhbShcbiAgcGF0aE9yUGF0aHM6IHN0cmluZyB8IHN0cmluZ1tdLFxuICBvcHRpb25zPzogeyBpbmRleD86IG51bWJlciB9LFxuKSB7XG4gIGNvbnN0IGluZGV4ID0gb3B0aW9ucz8uaW5kZXggPz8gMFxuXG4gIGNvbnN0IHBhdGhzID0gQXJyYXkuaXNBcnJheShwYXRoT3JQYXRocykgPyBwYXRoT3JQYXRocyA6IFtwYXRoT3JQYXRoc11cbiAgY29uc3QgcGF0aCA9IHBhdGhzW2luZGV4XVxuXG4gIGlmICghcGF0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHN0cmVhbSByZXNvdXJjZSAke3BhdGh9IGF0IGluZGV4ICR7aW5kZXh9YClcbiAgfVxuXG4gIGNvbnN0IGlzUmVtb3RlID0gaXNSZW1vdGVQYXRoKHBhdGgpXG4gIGNvbnN0IHN0cmVhbSA9IGlzUmVtb3RlXG4gICAgPyBhd2FpdCByZWFkUmVtb3RlRmlsZVN0cmVhbShwYXRoKVxuICAgIDogYXdhaXQgcmVhZExvY2FsRmlsZVN0cmVhbShwYXRoKVxuXG4gIHJldHVybiBzdHJlYW1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZFJlbW90ZUZpbGVTdHJlYW0ocGF0aDogc3RyaW5nKSB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gocGF0aClcbiAgaWYgKCFyZXNwb25zZS5ib2R5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc3RyZWFtIHJlbW90ZSByZXNvdXJjZTogJHtwYXRofWApXG4gIH1cblxuICByZXR1cm4gUmVhZGFibGUuZnJvbVdlYihyZXNwb25zZS5ib2R5KVxufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkTG9jYWxGaWxlU3RyZWFtKHBhdGg6IHN0cmluZykge1xuICByZXR1cm4gY3JlYXRlUmVhZFN0cmVhbShwYXRoKVxufVxuIl19