UNPKG

@dpkit/core

Version:

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

39 lines 5.77 kB
import { node } from "../node.js"; import { getBasepath, isRemotePath } from "../path.js"; import { parseDescriptor } from "./process/parse.js"; /** * Load a descriptor (JSON Object) from a file or URL * Uses dynamic imports to work in both Node.js and browser environments * Supports HTTP, HTTPS, FTP, and FTPS protocols */ export async function loadDescriptor(path, options) { const isRemote = isRemotePath(path); if (!isRemote && options?.onlyRemote) { throw new Error("Cannot load descriptor for security reasons"); } return isRemote ? await loadRemoteDescriptor(path) : await loadLocalDescriptor(path); } const ALLOWED_REMOTE_PROTOCOLS = ["http:", "https:", "ftp:", "ftps:"]; async function loadRemoteDescriptor(path) { const url = new URL(path); const protocol = url.protocol.toLowerCase(); if (!ALLOWED_REMOTE_PROTOCOLS.includes(protocol)) { throw new Error(`Unsupported remote protocol: ${protocol}`); } const response = await fetch(url.toString()); const descriptor = (await response.json()); const basepath = getBasepath(response.url ?? path); // supports redirects return { descriptor, basepath }; } async function loadLocalDescriptor(path) { if (!node) { throw new Error("File system is not supported in this environment"); } const text = await node.fs.readFile(path, "utf-8"); const descriptor = parseDescriptor(text); const basepath = getBasepath(path); return { descriptor, basepath }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2dlbmVyYWwvZGVzY3JpcHRvci9sb2FkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDakMsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBRXBEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGNBQWMsQ0FDbEMsSUFBWSxFQUNaLE9BRUM7SUFFRCxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDbkMsSUFBSSxDQUFDLFFBQVEsSUFBSSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUM7UUFDckMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFBO0lBQ2hFLENBQUM7SUFFRCxPQUFPLFFBQVE7UUFDYixDQUFDLENBQUMsTUFBTSxvQkFBb0IsQ0FBQyxJQUFJLENBQUM7UUFDbEMsQ0FBQyxDQUFDLE1BQU0sbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDckMsQ0FBQztBQUVELE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQTtBQUVyRSxLQUFLLFVBQVUsb0JBQW9CLENBQUMsSUFBWTtJQUM5QyxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUV6QixNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFBO0lBQzNDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNqRCxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBQzdELENBQUM7SUFFRCxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtJQUM1QyxNQUFNLFVBQVUsR0FBRyxDQUFDLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUF3QixDQUFBO0lBQ2pFLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFBLENBQUMscUJBQXFCO0lBRXhFLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLENBQUE7QUFDakMsQ0FBQztBQUVELEtBQUssVUFBVSxtQkFBbUIsQ0FBQyxJQUFZO0lBQzdDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsa0RBQWtELENBQUMsQ0FBQTtJQUNyRSxDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDbEQsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3hDLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUVsQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFBO0FBQ2pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBub2RlIH0gZnJvbSBcIi4uL25vZGUudHNcIlxuaW1wb3J0IHsgZ2V0QmFzZXBhdGgsIGlzUmVtb3RlUGF0aCB9IGZyb20gXCIuLi9wYXRoLnRzXCJcbmltcG9ydCB7IHBhcnNlRGVzY3JpcHRvciB9IGZyb20gXCIuL3Byb2Nlc3MvcGFyc2UudHNcIlxuXG4vKipcbiAqIExvYWQgYSBkZXNjcmlwdG9yIChKU09OIE9iamVjdCkgZnJvbSBhIGZpbGUgb3IgVVJMXG4gKiBVc2VzIGR5bmFtaWMgaW1wb3J0cyB0byB3b3JrIGluIGJvdGggTm9kZS5qcyBhbmQgYnJvd3NlciBlbnZpcm9ubWVudHNcbiAqIFN1cHBvcnRzIEhUVFAsIEhUVFBTLCBGVFAsIGFuZCBGVFBTIHByb3RvY29sc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZERlc2NyaXB0b3IoXG4gIHBhdGg6IHN0cmluZyxcbiAgb3B0aW9ucz86IHtcbiAgICBvbmx5UmVtb3RlPzogYm9vbGVhblxuICB9LFxuKSB7XG4gIGNvbnN0IGlzUmVtb3RlID0gaXNSZW1vdGVQYXRoKHBhdGgpXG4gIGlmICghaXNSZW1vdGUgJiYgb3B0aW9ucz8ub25seVJlbW90ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBsb2FkIGRlc2NyaXB0b3IgZm9yIHNlY3VyaXR5IHJlYXNvbnNcIilcbiAgfVxuXG4gIHJldHVybiBpc1JlbW90ZVxuICAgID8gYXdhaXQgbG9hZFJlbW90ZURlc2NyaXB0b3IocGF0aClcbiAgICA6IGF3YWl0IGxvYWRMb2NhbERlc2NyaXB0b3IocGF0aClcbn1cblxuY29uc3QgQUxMT1dFRF9SRU1PVEVfUFJPVE9DT0xTID0gW1wiaHR0cDpcIiwgXCJodHRwczpcIiwgXCJmdHA6XCIsIFwiZnRwczpcIl1cblxuYXN5bmMgZnVuY3Rpb24gbG9hZFJlbW90ZURlc2NyaXB0b3IocGF0aDogc3RyaW5nKSB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwocGF0aClcblxuICBjb25zdCBwcm90b2NvbCA9IHVybC5wcm90b2NvbC50b0xvd2VyQ2FzZSgpXG4gIGlmICghQUxMT1dFRF9SRU1PVEVfUFJPVE9DT0xTLmluY2x1ZGVzKHByb3RvY29sKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgcmVtb3RlIHByb3RvY29sOiAke3Byb3RvY29sfWApXG4gIH1cblxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybC50b1N0cmluZygpKVxuICBjb25zdCBkZXNjcmlwdG9yID0gKGF3YWl0IHJlc3BvbnNlLmpzb24oKSkgYXMgUmVjb3JkPHN0cmluZywgYW55PlxuICBjb25zdCBiYXNlcGF0aCA9IGdldEJhc2VwYXRoKHJlc3BvbnNlLnVybCA/PyBwYXRoKSAvLyBzdXBwb3J0cyByZWRpcmVjdHNcblxuICByZXR1cm4geyBkZXNjcmlwdG9yLCBiYXNlcGF0aCB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxvYWRMb2NhbERlc2NyaXB0b3IocGF0aDogc3RyaW5nKSB7XG4gIGlmICghbm9kZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkZpbGUgc3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBlbnZpcm9ubWVudFwiKVxuICB9XG5cbiAgY29uc3QgdGV4dCA9IGF3YWl0IG5vZGUuZnMucmVhZEZpbGUocGF0aCwgXCJ1dGYtOFwiKVxuICBjb25zdCBkZXNjcmlwdG9yID0gcGFyc2VEZXNjcmlwdG9yKHRleHQpXG4gIGNvbnN0IGJhc2VwYXRoID0gZ2V0QmFzZXBhdGgocGF0aClcblxuICByZXR1cm4geyBkZXNjcmlwdG9yLCBiYXNlcGF0aCB9XG59XG4iXX0=