@dpkit/table
Version:
Data Package implementation in TypeScript.
34 lines • 4.96 kB
JavaScript
import { DataFrame } from "nodejs-polars";
import { describe, expect, it } from "vitest";
import { processTable } from "../../table/index.js";
describe("parseGeojsonField", () => {
it.each([
// Valid JSON objects
['{"name":"John","age":30}', { name: "John", age: 30 }],
['{"numbers":[1,2,3]}', { numbers: [1, 2, 3] }],
['{"nested":{"prop":"value"}}', { nested: { prop: "value" } }],
["{}", {}],
// JSON but not an object
["[1,2,3]", null],
['["a","b","c"]', null],
// Trimming whitespace
//[' {"name":"John"} ', { name: "John" }],
//['\t{"name":"John"}\n', { name: "John" }],
// Invalid JSON
//["{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: "geojson" }],
};
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvanNvbi5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZmllbGQvdHlwZXMvZ2VvanNvbi5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDekMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUVuRCxRQUFRLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxFQUFFO0lBQ2pDLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDTixxQkFBcUI7UUFDckIsQ0FBQywwQkFBMEIsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ3ZELENBQUMscUJBQXFCLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDL0MsQ0FBQyw2QkFBNkIsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQzlELENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUVWLHlCQUF5QjtRQUN6QixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUM7UUFDakIsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDO1FBRXZCLHNCQUFzQjtRQUN0QiwwQ0FBMEM7UUFDMUMsNENBQTRDO1FBRTVDLGVBQWU7UUFDZixzQkFBc0I7UUFDdEIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDO1FBQ2xCLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQztRQUNWLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztRQUNkLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQztLQUNwQixDQUFDLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDbkMsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO1FBQ2hELE1BQU0sTUFBTSxHQUFHO1lBQ2IsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFrQixFQUFFLENBQUM7U0FDckQsQ0FBQTtRQUVELE1BQU0sR0FBRyxHQUFHLE1BQU0sWUFBWSxDQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUE7UUFDakQsTUFBTSxFQUFFLEdBQUcsTUFBTSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUE7UUFFOUIsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDdkMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3BELENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRhRnJhbWUgfSBmcm9tIFwibm9kZWpzLXBvbGFyc1wiXG5pbXBvcnQgeyBkZXNjcmliZSwgZXhwZWN0LCBpdCB9IGZyb20gXCJ2aXRlc3RcIlxuaW1wb3J0IHsgcHJvY2Vzc1RhYmxlIH0gZnJvbSBcIi4uLy4uL3RhYmxlL2luZGV4LnRzXCJcblxuZGVzY3JpYmUoXCJwYXJzZUdlb2pzb25GaWVsZFwiLCAoKSA9PiB7XG4gIGl0LmVhY2goW1xuICAgIC8vIFZhbGlkIEpTT04gb2JqZWN0c1xuICAgIFsne1wibmFtZVwiOlwiSm9oblwiLFwiYWdlXCI6MzB9JywgeyBuYW1lOiBcIkpvaG5cIiwgYWdlOiAzMCB9XSxcbiAgICBbJ3tcIm51bWJlcnNcIjpbMSwyLDNdfScsIHsgbnVtYmVyczogWzEsIDIsIDNdIH1dLFxuICAgIFsne1wibmVzdGVkXCI6e1wicHJvcFwiOlwidmFsdWVcIn19JywgeyBuZXN0ZWQ6IHsgcHJvcDogXCJ2YWx1ZVwiIH0gfV0sXG4gICAgW1wie31cIiwge31dLFxuXG4gICAgLy8gSlNPTiBidXQgbm90IGFuIG9iamVjdFxuICAgIFtcIlsxLDIsM11cIiwgbnVsbF0sXG4gICAgWydbXCJhXCIsXCJiXCIsXCJjXCJdJywgbnVsbF0sXG5cbiAgICAvLyBUcmltbWluZyB3aGl0ZXNwYWNlXG4gICAgLy9bJyB7XCJuYW1lXCI6XCJKb2huXCJ9ICcsIHsgbmFtZTogXCJKb2huXCIgfV0sXG4gICAgLy9bJ1xcdHtcIm5hbWVcIjpcIkpvaG5cIn1cXG4nLCB7IG5hbWU6IFwiSm9oblwiIH1dLFxuXG4gICAgLy8gSW52YWxpZCBKU09OXG4gICAgLy9bXCJ7aW52YWxpZH1cIiwgbnVsbF0sXG4gICAgW1wibm90IGpzb25cIiwgbnVsbF0sXG4gICAgW1wiXCIsIG51bGxdLFxuICAgIFtcIm51bGxcIiwgbnVsbF0sXG4gICAgW1widW5kZWZpbmVkXCIsIG51bGxdLFxuICBdKShcIiVzIC0+ICVzXCIsIGFzeW5jIChjZWxsLCB2YWx1ZSkgPT4ge1xuICAgIGNvbnN0IHRhYmxlID0gRGF0YUZyYW1lKHsgbmFtZTogW2NlbGxdIH0pLmxhenkoKVxuICAgIGNvbnN0IHNjaGVtYSA9IHtcbiAgICAgIGZpZWxkczogW3sgbmFtZTogXCJuYW1lXCIsIHR5cGU6IFwiZ2VvanNvblwiIGFzIGNvbnN0IH1dLFxuICAgIH1cblxuICAgIGNvbnN0IGxkZiA9IGF3YWl0IHByb2Nlc3NUYWJsZSh0YWJsZSwgeyBzY2hlbWEgfSlcbiAgICBjb25zdCBkZiA9IGF3YWl0IGxkZi5jb2xsZWN0KClcblxuICAgIGNvbnN0IHJlcyA9IGRmLmdldENvbHVtbihcIm5hbWVcIikuZ2V0KDApXG4gICAgZXhwZWN0KHJlcyA/IEpTT04ucGFyc2UocmVzKSA6IHJlcykudG9FcXVhbCh2YWx1ZSlcbiAgfSlcbn0pXG4iXX0=