@dpkit/table
Version:
Data Package implementation in TypeScript.
34 lines • 4.89 kB
JavaScript
import { DataFrame } from "nodejs-polars";
import { describe, expect, it } from "vitest";
import { processTable } from "../../table/index.js";
describe("parseArrayField", () => {
it.each([
// Valid JSON arrays
["[1,2,3]", [1, 2, 3]],
['["a","b","c"]', ["a", "b", "c"]],
['[{"name":"John"},{"name":"Jane"}]', [{ name: "John" }, { name: "Jane" }]],
["[]", []],
// JSON but not an array
['{"name":"John"}', null],
["{}", null],
// Trimming whitespace
//[" [1,2,3] ", [1, 2, 3]],
//['\t["a","b","c"]\n', ["a", "b", "c"]],
// Invalid JSON - skip test that's causing issues
// ["[invalid]", null],
["not json", null],
["", null],
["null", null],
["undefined", null],
])("%s -> %s", async (cell, value) => {
const table = DataFrame({ name: [cell] }).lazy();
const schema = {
fields: [{ name: "name", type: "array" }],
};
const ldf = await processTable(table, { schema });
const df = await ldf.collect();
const res = df.getColumn("name").get(0);
expect(res ? JSON.parse(res) : res).toEqual(value);
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXkuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2ZpZWxkL3R5cGVzL2FycmF5LnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBRW5ELFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUU7SUFDL0IsRUFBRSxDQUFDLElBQUksQ0FBQztRQUNOLG9CQUFvQjtRQUNwQixDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEIsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLENBQUMsbUNBQW1DLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUVWLHdCQUF3QjtRQUN4QixDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQztRQUN6QixDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7UUFFWixzQkFBc0I7UUFDdEIsMkJBQTJCO1FBQzNCLHlDQUF5QztRQUV6QyxpREFBaUQ7UUFDakQsdUJBQXVCO1FBQ3ZCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQztRQUNsQixDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUM7UUFDVixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7UUFDZCxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUM7S0FDcEIsQ0FBQyxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQ25DLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUNoRCxNQUFNLE1BQU0sR0FBRztZQUNiLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBZ0IsRUFBRSxDQUFDO1NBQ25ELENBQUE7UUFFRCxNQUFNLEdBQUcsR0FBRyxNQUFNLFlBQVksQ0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFBO1FBQ2pELE1BQU0sRUFBRSxHQUFHLE1BQU0sR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBRTlCLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3ZDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNwRCxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0YUZyYW1lIH0gZnJvbSBcIm5vZGVqcy1wb2xhcnNcIlxuaW1wb3J0IHsgZGVzY3JpYmUsIGV4cGVjdCwgaXQgfSBmcm9tIFwidml0ZXN0XCJcbmltcG9ydCB7IHByb2Nlc3NUYWJsZSB9IGZyb20gXCIuLi8uLi90YWJsZS9pbmRleC50c1wiXG5cbmRlc2NyaWJlKFwicGFyc2VBcnJheUZpZWxkXCIsICgpID0+IHtcbiAgaXQuZWFjaChbXG4gICAgLy8gVmFsaWQgSlNPTiBhcnJheXNcbiAgICBbXCJbMSwyLDNdXCIsIFsxLCAyLCAzXV0sXG4gICAgWydbXCJhXCIsXCJiXCIsXCJjXCJdJywgW1wiYVwiLCBcImJcIiwgXCJjXCJdXSxcbiAgICBbJ1t7XCJuYW1lXCI6XCJKb2huXCJ9LHtcIm5hbWVcIjpcIkphbmVcIn1dJywgW3sgbmFtZTogXCJKb2huXCIgfSwgeyBuYW1lOiBcIkphbmVcIiB9XV0sXG4gICAgW1wiW11cIiwgW11dLFxuXG4gICAgLy8gSlNPTiBidXQgbm90IGFuIGFycmF5XG4gICAgWyd7XCJuYW1lXCI6XCJKb2huXCJ9JywgbnVsbF0sXG4gICAgW1wie31cIiwgbnVsbF0sXG5cbiAgICAvLyBUcmltbWluZyB3aGl0ZXNwYWNlXG4gICAgLy9bXCIgWzEsMiwzXSBcIiwgWzEsIDIsIDNdXSxcbiAgICAvL1snXFx0W1wiYVwiLFwiYlwiLFwiY1wiXVxcbicsIFtcImFcIiwgXCJiXCIsIFwiY1wiXV0sXG5cbiAgICAvLyBJbnZhbGlkIEpTT04gLSBza2lwIHRlc3QgdGhhdCdzIGNhdXNpbmcgaXNzdWVzXG4gICAgLy8gW1wiW2ludmFsaWRdXCIsIG51bGxdLFxuICAgIFtcIm5vdCBqc29uXCIsIG51bGxdLFxuICAgIFtcIlwiLCBudWxsXSxcbiAgICBbXCJudWxsXCIsIG51bGxdLFxuICAgIFtcInVuZGVmaW5lZFwiLCBudWxsXSxcbiAgXSkoXCIlcyAtPiAlc1wiLCBhc3luYyAoY2VsbCwgdmFsdWUpID0+IHtcbiAgICBjb25zdCB0YWJsZSA9IERhdGFGcmFtZSh7IG5hbWU6IFtjZWxsXSB9KS5sYXp5KClcbiAgICBjb25zdCBzY2hlbWEgPSB7XG4gICAgICBmaWVsZHM6IFt7IG5hbWU6IFwibmFtZVwiLCB0eXBlOiBcImFycmF5XCIgYXMgY29uc3QgfV0sXG4gICAgfVxuXG4gICAgY29uc3QgbGRmID0gYXdhaXQgcHJvY2Vzc1RhYmxlKHRhYmxlLCB7IHNjaGVtYSB9KVxuICAgIGNvbnN0IGRmID0gYXdhaXQgbGRmLmNvbGxlY3QoKVxuXG4gICAgY29uc3QgcmVzID0gZGYuZ2V0Q29sdW1uKFwibmFtZVwiKS5nZXQoMClcbiAgICBleHBlY3QocmVzID8gSlNPTi5wYXJzZShyZXMpIDogcmVzKS50b0VxdWFsKHZhbHVlKVxuICB9KVxufSlcbiJdfQ==