UNPKG

@dpkit/core

Version:

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

58 lines 7.5 kB
import * as fs from "node:fs/promises"; import * as path from "node:path"; import { temporaryDirectory } from "tempy"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; import { saveSchema } from "./save.js"; describe("saveSchema", () => { const testSchema = { fields: [ { name: "id", type: "integer", }, { name: "name", type: "string", }, ], primaryKey: ["id"], }; let testDir; let testPath; beforeEach(() => { testDir = temporaryDirectory(); testPath = path.join(testDir, "schema.json"); }); afterEach(async () => { try { await fs.rm(testDir, { recursive: true, force: true }); } catch (error) { if (error instanceof Error && !error.message.includes("ENOENT")) { console.error(`Failed to clean up test directory: ${testDir}`, error); } } }); it("should save a schema to a file and maintain its structure", async () => { await saveSchema(testSchema, { path: testPath }); const fileExists = await fs .stat(testPath) .then(() => true) .catch(() => false); expect(fileExists).toBe(true); const content = await fs.readFile(testPath, "utf-8"); const parsedContent = JSON.parse(content); // Remove $schema property for test comparison const { $schema, ...schemaWithoutSchema } = parsedContent; expect(schemaWithoutSchema).toEqual(testSchema); expect($schema).toBe("https://datapackage.org/profiles/2.0/tableschema.json"); // Create expected format with $schema for comparison const expectedWithSchema = { ...testSchema, $schema: "https://datapackage.org/profiles/2.0/tableschema.json", }; const expectedFormat = JSON.stringify(expectedWithSchema, null, 2); expect(content).toEqual(expectedFormat); }); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc2NoZW1hL3NhdmUuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ3RDLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFBO0FBQ2pDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLE9BQU8sQ0FBQTtBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUVwRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBRXRDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFO0lBQzFCLE1BQU0sVUFBVSxHQUFXO1FBQ3pCLE1BQU0sRUFBRTtZQUNOO2dCQUNFLElBQUksRUFBRSxJQUFJO2dCQUNWLElBQUksRUFBRSxTQUFTO2FBQ2hCO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLE1BQU07Z0JBQ1osSUFBSSxFQUFFLFFBQVE7YUFDZjtTQUNGO1FBQ0QsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDO0tBQ25CLENBQUE7SUFFRCxJQUFJLE9BQWUsQ0FBQTtJQUNuQixJQUFJLFFBQWdCLENBQUE7SUFFcEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLE9BQU8sR0FBRyxrQkFBa0IsRUFBRSxDQUFBO1FBQzlCLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQTtJQUM5QyxDQUFDLENBQUMsQ0FBQTtJQUVGLFNBQVMsQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNuQixJQUFJLENBQUM7WUFDSCxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUN4RCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksS0FBSyxZQUFZLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hFLE9BQU8sQ0FBQyxLQUFLLENBQUMsc0NBQXNDLE9BQU8sRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFBO1lBQ3ZFLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsMkRBQTJELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDekUsTUFBTSxVQUFVLENBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUE7UUFFaEQsTUFBTSxVQUFVLEdBQUcsTUFBTSxFQUFFO2FBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUM7YUFDZCxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO2FBQ2hCLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNyQixNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBRTdCLE1BQU0sT0FBTyxHQUFHLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDcEQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUV6Qyw4Q0FBOEM7UUFDOUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLG1CQUFtQixFQUFFLEdBQUcsYUFBYSxDQUFBO1FBQ3pELE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUMvQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUNsQix1REFBdUQsQ0FDeEQsQ0FBQTtRQUVELHFEQUFxRDtRQUNyRCxNQUFNLGtCQUFrQixHQUFHO1lBQ3pCLEdBQUcsVUFBVTtZQUNiLE9BQU8sRUFBRSx1REFBdUQ7U0FDakUsQ0FBQTtRQUNELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQ2xFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUE7SUFDekMsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCJcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiXG5pbXBvcnQgeyB0ZW1wb3JhcnlEaXJlY3RvcnkgfSBmcm9tIFwidGVtcHlcIlxuaW1wb3J0IHsgYWZ0ZXJFYWNoLCBiZWZvcmVFYWNoLCBkZXNjcmliZSwgZXhwZWN0LCBpdCB9IGZyb20gXCJ2aXRlc3RcIlxuaW1wb3J0IHR5cGUgeyBTY2hlbWEgfSBmcm9tIFwiLi9TY2hlbWEudHNcIlxuaW1wb3J0IHsgc2F2ZVNjaGVtYSB9IGZyb20gXCIuL3NhdmUudHNcIlxuXG5kZXNjcmliZShcInNhdmVTY2hlbWFcIiwgKCkgPT4ge1xuICBjb25zdCB0ZXN0U2NoZW1hOiBTY2hlbWEgPSB7XG4gICAgZmllbGRzOiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6IFwiaWRcIixcbiAgICAgICAgdHlwZTogXCJpbnRlZ2VyXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiBcIm5hbWVcIixcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBwcmltYXJ5S2V5OiBbXCJpZFwiXSxcbiAgfVxuXG4gIGxldCB0ZXN0RGlyOiBzdHJpbmdcbiAgbGV0IHRlc3RQYXRoOiBzdHJpbmdcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICB0ZXN0RGlyID0gdGVtcG9yYXJ5RGlyZWN0b3J5KClcbiAgICB0ZXN0UGF0aCA9IHBhdGguam9pbih0ZXN0RGlyLCBcInNjaGVtYS5qc29uXCIpXG4gIH0pXG5cbiAgYWZ0ZXJFYWNoKGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMucm0odGVzdERpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmICFlcnJvci5tZXNzYWdlLmluY2x1ZGVzKFwiRU5PRU5UXCIpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBjbGVhbiB1cCB0ZXN0IGRpcmVjdG9yeTogJHt0ZXN0RGlyfWAsIGVycm9yKVxuICAgICAgfVxuICAgIH1cbiAgfSlcblxuICBpdChcInNob3VsZCBzYXZlIGEgc2NoZW1hIHRvIGEgZmlsZSBhbmQgbWFpbnRhaW4gaXRzIHN0cnVjdHVyZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgc2F2ZVNjaGVtYSh0ZXN0U2NoZW1hLCB7IHBhdGg6IHRlc3RQYXRoIH0pXG5cbiAgICBjb25zdCBmaWxlRXhpc3RzID0gYXdhaXQgZnNcbiAgICAgIC5zdGF0KHRlc3RQYXRoKVxuICAgICAgLnRoZW4oKCkgPT4gdHJ1ZSlcbiAgICAgIC5jYXRjaCgoKSA9PiBmYWxzZSlcbiAgICBleHBlY3QoZmlsZUV4aXN0cykudG9CZSh0cnVlKVxuXG4gICAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKHRlc3RQYXRoLCBcInV0Zi04XCIpXG4gICAgY29uc3QgcGFyc2VkQ29udGVudCA9IEpTT04ucGFyc2UoY29udGVudClcblxuICAgIC8vIFJlbW92ZSAkc2NoZW1hIHByb3BlcnR5IGZvciB0ZXN0IGNvbXBhcmlzb25cbiAgICBjb25zdCB7ICRzY2hlbWEsIC4uLnNjaGVtYVdpdGhvdXRTY2hlbWEgfSA9IHBhcnNlZENvbnRlbnRcbiAgICBleHBlY3Qoc2NoZW1hV2l0aG91dFNjaGVtYSkudG9FcXVhbCh0ZXN0U2NoZW1hKVxuICAgIGV4cGVjdCgkc2NoZW1hKS50b0JlKFxuICAgICAgXCJodHRwczovL2RhdGFwYWNrYWdlLm9yZy9wcm9maWxlcy8yLjAvdGFibGVzY2hlbWEuanNvblwiLFxuICAgIClcblxuICAgIC8vIENyZWF0ZSBleHBlY3RlZCBmb3JtYXQgd2l0aCAkc2NoZW1hIGZvciBjb21wYXJpc29uXG4gICAgY29uc3QgZXhwZWN0ZWRXaXRoU2NoZW1hID0ge1xuICAgICAgLi4udGVzdFNjaGVtYSxcbiAgICAgICRzY2hlbWE6IFwiaHR0cHM6Ly9kYXRhcGFja2FnZS5vcmcvcHJvZmlsZXMvMi4wL3RhYmxlc2NoZW1hLmpzb25cIixcbiAgICB9XG4gICAgY29uc3QgZXhwZWN0ZWRGb3JtYXQgPSBKU09OLnN0cmluZ2lmeShleHBlY3RlZFdpdGhTY2hlbWEsIG51bGwsIDIpXG4gICAgZXhwZWN0KGNvbnRlbnQpLnRvRXF1YWwoZXhwZWN0ZWRGb3JtYXQpXG4gIH0pXG59KVxuIl19