@dpkit/core
Version:
Fast TypeScript data management framework built on top of the Data Package standard and Polars DataFrames
52 lines • 7.26 kB
JavaScript
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 { saveDialect } from "./save.js";
describe("saveDialect", () => {
const testDialect = {
delimiter: ";",
header: true,
quoteChar: '"',
doubleQuote: true,
};
let testDir;
let testPath;
beforeEach(() => {
testDir = temporaryDirectory();
testPath = path.join(testDir, "dialect.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 dialect to a file and maintain its structure", async () => {
await saveDialect(testDialect, { 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, ...dialectWithoutSchema } = parsedContent;
expect(dialectWithoutSchema).toEqual(testDialect);
expect($schema).toBe("https://datapackage.org/profiles/2.0/tabledialect.json");
// Create expected format with $schema for comparison
const expectedWithSchema = {
...testDialect,
$schema: "https://datapackage.org/profiles/2.0/tabledialect.json",
};
// Verify the pretty formatting
const expectedFormat = JSON.stringify(expectedWithSchema, null, 2);
expect(content).toEqual(expectedFormat);
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vZGlhbGVjdC9zYXZlLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN0QyxPQUFPLEtBQUssSUFBSSxNQUFNLFdBQVcsQ0FBQTtBQUNqQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxPQUFPLENBQUE7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFFcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUV2QyxRQUFRLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRTtJQUMzQixNQUFNLFdBQVcsR0FBWTtRQUMzQixTQUFTLEVBQUUsR0FBRztRQUNkLE1BQU0sRUFBRSxJQUFJO1FBQ1osU0FBUyxFQUFFLEdBQUc7UUFDZCxXQUFXLEVBQUUsSUFBSTtLQUNsQixDQUFBO0lBRUQsSUFBSSxPQUFlLENBQUE7SUFDbkIsSUFBSSxRQUFnQixDQUFBO0lBRXBCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxPQUFPLEdBQUcsa0JBQWtCLEVBQUUsQ0FBQTtRQUM5QixRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUE7SUFDL0MsQ0FBQyxDQUFDLENBQUE7SUFFRixTQUFTLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDbkIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7UUFDeEQsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLEtBQUssWUFBWSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUNoRSxPQUFPLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxPQUFPLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUN2RSxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLDREQUE0RCxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzFFLE1BQU0sV0FBVyxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFBO1FBRWxELE1BQU0sVUFBVSxHQUFHLE1BQU0sRUFBRTthQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDO2FBQ2QsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQzthQUNoQixLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDckIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUU3QixNQUFNLE9BQU8sR0FBRyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQ3BELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFekMsOENBQThDO1FBQzlDLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxvQkFBb0IsRUFBRSxHQUFHLGFBQWEsQ0FBQTtRQUMxRCxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDakQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDbEIsd0RBQXdELENBQ3pELENBQUE7UUFFRCxxREFBcUQ7UUFDckQsTUFBTSxrQkFBa0IsR0FBRztZQUN6QixHQUFHLFdBQVc7WUFDZCxPQUFPLEVBQUUsd0RBQXdEO1NBQ2xFLENBQUE7UUFDRCwrQkFBK0I7UUFDL0IsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDbEUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQUN6QyxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIlxuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCB7IHRlbXBvcmFyeURpcmVjdG9yeSB9IGZyb20gXCJ0ZW1weVwiXG5pbXBvcnQgeyBhZnRlckVhY2gsIGJlZm9yZUVhY2gsIGRlc2NyaWJlLCBleHBlY3QsIGl0IH0gZnJvbSBcInZpdGVzdFwiXG5pbXBvcnQgdHlwZSB7IERpYWxlY3QgfSBmcm9tIFwiLi9EaWFsZWN0LnRzXCJcbmltcG9ydCB7IHNhdmVEaWFsZWN0IH0gZnJvbSBcIi4vc2F2ZS50c1wiXG5cbmRlc2NyaWJlKFwic2F2ZURpYWxlY3RcIiwgKCkgPT4ge1xuICBjb25zdCB0ZXN0RGlhbGVjdDogRGlhbGVjdCA9IHtcbiAgICBkZWxpbWl0ZXI6IFwiO1wiLFxuICAgIGhlYWRlcjogdHJ1ZSxcbiAgICBxdW90ZUNoYXI6ICdcIicsXG4gICAgZG91YmxlUXVvdGU6IHRydWUsXG4gIH1cblxuICBsZXQgdGVzdERpcjogc3RyaW5nXG4gIGxldCB0ZXN0UGF0aDogc3RyaW5nXG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgdGVzdERpciA9IHRlbXBvcmFyeURpcmVjdG9yeSgpXG4gICAgdGVzdFBhdGggPSBwYXRoLmpvaW4odGVzdERpciwgXCJkaWFsZWN0Lmpzb25cIilcbiAgfSlcblxuICBhZnRlckVhY2goYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmcy5ybSh0ZXN0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgIWVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoXCJFTk9FTlRcIikpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGNsZWFuIHVwIHRlc3QgZGlyZWN0b3J5OiAke3Rlc3REaXJ9YCwgZXJyb3IpXG4gICAgICB9XG4gICAgfVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIHNhdmUgYSBkaWFsZWN0IHRvIGEgZmlsZSBhbmQgbWFpbnRhaW4gaXRzIHN0cnVjdHVyZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgc2F2ZURpYWxlY3QodGVzdERpYWxlY3QsIHsgcGF0aDogdGVzdFBhdGggfSlcblxuICAgIGNvbnN0IGZpbGVFeGlzdHMgPSBhd2FpdCBmc1xuICAgICAgLnN0YXQodGVzdFBhdGgpXG4gICAgICAudGhlbigoKSA9PiB0cnVlKVxuICAgICAgLmNhdGNoKCgpID0+IGZhbHNlKVxuICAgIGV4cGVjdChmaWxlRXhpc3RzKS50b0JlKHRydWUpXG5cbiAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUodGVzdFBhdGgsIFwidXRmLThcIilcbiAgICBjb25zdCBwYXJzZWRDb250ZW50ID0gSlNPTi5wYXJzZShjb250ZW50KVxuXG4gICAgLy8gUmVtb3ZlICRzY2hlbWEgcHJvcGVydHkgZm9yIHRlc3QgY29tcGFyaXNvblxuICAgIGNvbnN0IHsgJHNjaGVtYSwgLi4uZGlhbGVjdFdpdGhvdXRTY2hlbWEgfSA9IHBhcnNlZENvbnRlbnRcbiAgICBleHBlY3QoZGlhbGVjdFdpdGhvdXRTY2hlbWEpLnRvRXF1YWwodGVzdERpYWxlY3QpXG4gICAgZXhwZWN0KCRzY2hlbWEpLnRvQmUoXG4gICAgICBcImh0dHBzOi8vZGF0YXBhY2thZ2Uub3JnL3Byb2ZpbGVzLzIuMC90YWJsZWRpYWxlY3QuanNvblwiLFxuICAgIClcblxuICAgIC8vIENyZWF0ZSBleHBlY3RlZCBmb3JtYXQgd2l0aCAkc2NoZW1hIGZvciBjb21wYXJpc29uXG4gICAgY29uc3QgZXhwZWN0ZWRXaXRoU2NoZW1hID0ge1xuICAgICAgLi4udGVzdERpYWxlY3QsXG4gICAgICAkc2NoZW1hOiBcImh0dHBzOi8vZGF0YXBhY2thZ2Uub3JnL3Byb2ZpbGVzLzIuMC90YWJsZWRpYWxlY3QuanNvblwiLFxuICAgIH1cbiAgICAvLyBWZXJpZnkgdGhlIHByZXR0eSBmb3JtYXR0aW5nXG4gICAgY29uc3QgZXhwZWN0ZWRGb3JtYXQgPSBKU09OLnN0cmluZ2lmeShleHBlY3RlZFdpdGhTY2hlbWEsIG51bGwsIDIpXG4gICAgZXhwZWN0KGNvbnRlbnQpLnRvRXF1YWwoZXhwZWN0ZWRGb3JtYXQpXG4gIH0pXG59KVxuIl19