@dpkit/core
Version:
Fast TypeScript data management framework built on top of the Data Package standard and Polars DataFrames
46 lines • 7.22 kB
JavaScript
import path from "node:path";
import { afterEach, describe, expect, it, vi } from "vitest";
import { loadDescriptor } from "./load.js";
describe("loadDescriptor", () => {
const getFixturePath = (name) => path.relative(process.cwd(), path.join(import.meta.dirname, "fixtures", name ?? ""));
const expectedDescriptor = {
fields: [
{
name: "id",
type: "integer",
},
{
name: "name",
type: "string",
},
],
};
const originalFetch = globalThis.fetch;
afterEach(() => {
globalThis.fetch = originalFetch;
vi.resetAllMocks();
});
it("loads a local descriptor from a file path", async () => {
const { basepath, descriptor } = await loadDescriptor(getFixturePath("schema.json"));
expect(basepath).toEqual(getFixturePath());
expect(descriptor).toEqual(expectedDescriptor);
});
it("loads a remote descriptor from a URL", async () => {
const testUrl = "https://example.com/schema.json";
globalThis.fetch = vi.fn().mockResolvedValue({
json: () => Promise.resolve(expectedDescriptor),
});
const { basepath, descriptor } = await loadDescriptor(testUrl);
expect(basepath).toEqual("https://example.com");
expect(descriptor).toEqual(expectedDescriptor);
expect(fetch).toHaveBeenCalledWith(testUrl);
});
it("throws error for unsupported URL protocol", async () => {
const testUrl = "file:///path/to/schema.json";
await expect(loadDescriptor(testUrl)).rejects.toThrow("Unsupported remote protocol: file:");
});
it("throws error when onlyRemote is true but path is local", async () => {
await expect(loadDescriptor(getFixturePath("schema.json"), { onlyRemote: true })).rejects.toThrow("Cannot load descriptor for security reasons");
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZ2VuZXJhbC9kZXNjcmlwdG9yL2xvYWQuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSxXQUFXLENBQUE7QUFDNUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUUxQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFO0lBQzlCLE1BQU0sY0FBYyxHQUFHLENBQUMsSUFBYSxFQUFFLEVBQUUsQ0FDdkMsSUFBSSxDQUFDLFFBQVEsQ0FDWCxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUN2RCxDQUFBO0lBRUgsTUFBTSxrQkFBa0IsR0FBRztRQUN6QixNQUFNLEVBQUU7WUFDTjtnQkFDRSxJQUFJLEVBQUUsSUFBSTtnQkFDVixJQUFJLEVBQUUsU0FBUzthQUNoQjtZQUNEO2dCQUNFLElBQUksRUFBRSxNQUFNO2dCQUNaLElBQUksRUFBRSxRQUFRO2FBQ2Y7U0FDRjtLQUNGLENBQUE7SUFFRCxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFBO0lBQ3RDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixVQUFVLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQTtRQUNoQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUE7SUFDcEIsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsMkNBQTJDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDekQsTUFBTSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsR0FBRyxNQUFNLGNBQWMsQ0FDbkQsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUM5QixDQUFBO1FBRUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFBO1FBQzFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtJQUNoRCxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyxzQ0FBc0MsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNwRCxNQUFNLE9BQU8sR0FBRyxpQ0FBaUMsQ0FBQTtRQUVqRCxVQUFVLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztZQUMzQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztTQUNoRCxDQUFDLENBQUE7UUFFRixNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBRTlELE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsQ0FBQTtRQUMvQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUE7UUFDOUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQzdDLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLDJDQUEyQyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3pELE1BQU0sT0FBTyxHQUFHLDZCQUE2QixDQUFBO1FBRTdDLE1BQU0sTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQ25ELG9DQUFvQyxDQUNyQyxDQUFBO0lBQ0gsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsd0RBQXdELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDdEUsTUFBTSxNQUFNLENBQ1YsY0FBYyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUNwRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsNkNBQTZDLENBQUMsQ0FBQTtJQUNsRSxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiXG5pbXBvcnQgeyBhZnRlckVhY2gsIGRlc2NyaWJlLCBleHBlY3QsIGl0LCB2aSB9IGZyb20gXCJ2aXRlc3RcIlxuaW1wb3J0IHsgbG9hZERlc2NyaXB0b3IgfSBmcm9tIFwiLi9sb2FkLmpzXCJcblxuZGVzY3JpYmUoXCJsb2FkRGVzY3JpcHRvclwiLCAoKSA9PiB7XG4gIGNvbnN0IGdldEZpeHR1cmVQYXRoID0gKG5hbWU/OiBzdHJpbmcpID0+XG4gICAgcGF0aC5yZWxhdGl2ZShcbiAgICAgIHByb2Nlc3MuY3dkKCksXG4gICAgICBwYXRoLmpvaW4oaW1wb3J0Lm1ldGEuZGlybmFtZSwgXCJmaXh0dXJlc1wiLCBuYW1lID8/IFwiXCIpLFxuICAgIClcblxuICBjb25zdCBleHBlY3RlZERlc2NyaXB0b3IgPSB7XG4gICAgZmllbGRzOiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6IFwiaWRcIixcbiAgICAgICAgdHlwZTogXCJpbnRlZ2VyXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiBcIm5hbWVcIixcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgfVxuXG4gIGNvbnN0IG9yaWdpbmFsRmV0Y2ggPSBnbG9iYWxUaGlzLmZldGNoXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgZ2xvYmFsVGhpcy5mZXRjaCA9IG9yaWdpbmFsRmV0Y2hcbiAgICB2aS5yZXNldEFsbE1vY2tzKClcbiAgfSlcblxuICBpdChcImxvYWRzIGEgbG9jYWwgZGVzY3JpcHRvciBmcm9tIGEgZmlsZSBwYXRoXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IGJhc2VwYXRoLCBkZXNjcmlwdG9yIH0gPSBhd2FpdCBsb2FkRGVzY3JpcHRvcihcbiAgICAgIGdldEZpeHR1cmVQYXRoKFwic2NoZW1hLmpzb25cIiksXG4gICAgKVxuXG4gICAgZXhwZWN0KGJhc2VwYXRoKS50b0VxdWFsKGdldEZpeHR1cmVQYXRoKCkpXG4gICAgZXhwZWN0KGRlc2NyaXB0b3IpLnRvRXF1YWwoZXhwZWN0ZWREZXNjcmlwdG9yKVxuICB9KVxuXG4gIGl0KFwibG9hZHMgYSByZW1vdGUgZGVzY3JpcHRvciBmcm9tIGEgVVJMXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0ZXN0VXJsID0gXCJodHRwczovL2V4YW1wbGUuY29tL3NjaGVtYS5qc29uXCJcblxuICAgIGdsb2JhbFRoaXMuZmV0Y2ggPSB2aS5mbigpLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgIGpzb246ICgpID0+IFByb21pc2UucmVzb2x2ZShleHBlY3RlZERlc2NyaXB0b3IpLFxuICAgIH0pXG5cbiAgICBjb25zdCB7IGJhc2VwYXRoLCBkZXNjcmlwdG9yIH0gPSBhd2FpdCBsb2FkRGVzY3JpcHRvcih0ZXN0VXJsKVxuXG4gICAgZXhwZWN0KGJhc2VwYXRoKS50b0VxdWFsKFwiaHR0cHM6Ly9leGFtcGxlLmNvbVwiKVxuICAgIGV4cGVjdChkZXNjcmlwdG9yKS50b0VxdWFsKGV4cGVjdGVkRGVzY3JpcHRvcilcbiAgICBleHBlY3QoZmV0Y2gpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHRlc3RVcmwpXG4gIH0pXG5cbiAgaXQoXCJ0aHJvd3MgZXJyb3IgZm9yIHVuc3VwcG9ydGVkIFVSTCBwcm90b2NvbFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdGVzdFVybCA9IFwiZmlsZTovLy9wYXRoL3RvL3NjaGVtYS5qc29uXCJcblxuICAgIGF3YWl0IGV4cGVjdChsb2FkRGVzY3JpcHRvcih0ZXN0VXJsKSkucmVqZWN0cy50b1Rocm93KFxuICAgICAgXCJVbnN1cHBvcnRlZCByZW1vdGUgcHJvdG9jb2w6IGZpbGU6XCIsXG4gICAgKVxuICB9KVxuXG4gIGl0KFwidGhyb3dzIGVycm9yIHdoZW4gb25seVJlbW90ZSBpcyB0cnVlIGJ1dCBwYXRoIGlzIGxvY2FsXCIsIGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBsb2FkRGVzY3JpcHRvcihnZXRGaXh0dXJlUGF0aChcInNjaGVtYS5qc29uXCIpLCB7IG9ubHlSZW1vdGU6IHRydWUgfSksXG4gICAgKS5yZWplY3RzLnRvVGhyb3coXCJDYW5ub3QgbG9hZCBkZXNjcmlwdG9yIGZvciBzZWN1cml0eSByZWFzb25zXCIpXG4gIH0pXG59KVxuIl19