UNPKG

@dpkit/table

Version:

Data Package implementation in TypeScript.

93 lines 12.8 kB
import { DataFrame } from "nodejs-polars"; import { describe, expect, it } from "vitest"; import { processTable } from "../../table/index.js"; describe("parseGeopointField", () => { describe("default format", () => { it.each([ // Valid geopoints in default format (lon,lat) ["90.50,45.50", [90.5, 45.5]], ["0,0", [0, 0]], //["-122.40, 37.78", [-122.4, 37.78]], //["-180.0,-90.0", [-180.0, -90.0]], //["180.0, 90.0", [180.0, 90.0]], // With whitespace //[" 90.50, 45.50 ", [90.5, 45.5]], // Invalid formats //["not a geopoint", null], //["", null], //["90.50", null], //["90.50,lat", null], //["lon,45.50", null], //["90.50,45.50,0", null], ])("%s -> %s", async (cell, value) => { const table = DataFrame({ name: [cell] }).lazy(); const schema = { fields: [{ name: "name", type: "geopoint" }], }; const ldf = await processTable(table, { schema }); const df = await ldf.collect(); expect(df.toRecords()[0]?.name).toEqual(value); }); }); describe.skip("array format", () => { it.each([ // Valid geopoints in array format ["[90.50, 45.50]", [90.5, 45.5]], ["[0, 0]", [0, 0]], ["[-122.40, 37.78]", [-122.4, 37.78]], ["[-180.0, -90.0]", [-180.0, -90.0]], ["[180.0, 90.0]", [180.0, 90.0]], // With whitespace [" [90.50, 45.50] ", [90.5, 45.5]], // Invalid formats ["not a geopoint", null], ["", null], ["[90.50]", null], ["[90.50, 45.50, 0]", null], ["['lon', 'lat']", null], ])("%s -> %s", async (cell, value) => { const table = DataFrame({ name: [cell] }).lazy(); const schema = { fields: [ { name: "name", type: "geopoint", format: "array" }, ], }; const ldf = await processTable(table, { schema }); const df = await ldf.collect(); expect(df.getColumn("name").get(0)).toEqual(value); }); }); describe.skip("object format", () => { it.each([ // Valid geopoints in object format ['{"lon": 90.50, "lat": 45.50}', [90.5, 45.5]], ['{"lon": 0, "lat": 0}', [0, 0]], ['{"lon": -122.40, "lat": 37.78}', [-122.4, 37.78]], ['{"lon": -180.0, "lat": -90.0}', [-180.0, -90.0]], ['{"lon": 180.0, "lat": 90.0}', [180.0, 90.0]], // With whitespace [' {"lon": 90.50, "lat": 45.50} ', [90.5, 45.5]], // Invalid formats ["not a geopoint", null], ["", null], ['{"longitude": 90.50, "latitude": 45.50}', null], ['{"lon": 90.50}', null], ['{"lat": 45.50}', null], ])("%s -> %s", async (cell, value) => { const table = DataFrame({ name: [cell] }).lazy(); const schema = { fields: [ { name: "name", type: "geopoint", format: "object", }, ], }; const ldf = await processTable(table, { schema }); const df = await ldf.collect(); expect(df.getColumn("name").get(0)).toEqual(value); }); }); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvcG9pbnQuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2ZpZWxkL3R5cGVzL2dlb3BvaW50LnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBRW5ELFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUU7SUFDbEMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsRUFBRTtRQUM5QixFQUFFLENBQUMsSUFBSSxDQUFDO1lBQ04sOENBQThDO1lBQzlDLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzdCLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2Ysc0NBQXNDO1lBQ3RDLG9DQUFvQztZQUNwQyxpQ0FBaUM7WUFFakMsa0JBQWtCO1lBQ2xCLG1DQUFtQztZQUVuQyxrQkFBa0I7WUFDbEIsMkJBQTJCO1lBQzNCLGFBQWE7WUFDYixrQkFBa0I7WUFDbEIsc0JBQXNCO1lBQ3RCLHNCQUFzQjtZQUN0QiwwQkFBMEI7U0FDM0IsQ0FBQyxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ25DLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtZQUNoRCxNQUFNLE1BQU0sR0FBRztnQkFDYixNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQW1CLEVBQUUsQ0FBQzthQUN0RCxDQUFBO1lBRUQsTUFBTSxHQUFHLEdBQUcsTUFBTSxZQUFZLENBQUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQTtZQUNqRCxNQUFNLEVBQUUsR0FBRyxNQUFNLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtZQUU5QixNQUFNLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNoRCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FBQyxDQUFBO0lBRUYsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFO1FBQ2pDLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDTixrQ0FBa0M7WUFDbEMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNoQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNsQixDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDckMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEMsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFFaEMsa0JBQWtCO1lBQ2xCLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFFbEMsa0JBQWtCO1lBQ2xCLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDO1lBQ3hCLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQztZQUNWLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQztZQUNqQixDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQztZQUMzQixDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQztTQUN6QixDQUFDLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDbkMsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO1lBQ2hELE1BQU0sTUFBTSxHQUFHO2dCQUNiLE1BQU0sRUFBRTtvQkFDTixFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQW1CLEVBQUUsTUFBTSxFQUFFLE9BQWdCLEVBQUU7aUJBQ3RFO2FBQ0YsQ0FBQTtZQUVELE1BQU0sR0FBRyxHQUFHLE1BQU0sWUFBWSxDQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUE7WUFDakQsTUFBTSxFQUFFLEdBQUcsTUFBTSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUE7WUFFOUIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3BELENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFDLENBQUE7SUFFRixRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUU7UUFDbEMsRUFBRSxDQUFDLElBQUksQ0FBQztZQUNOLG1DQUFtQztZQUNuQyxDQUFDLDhCQUE4QixFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzlDLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDaEMsQ0FBQyxnQ0FBZ0MsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ25ELENBQUMsK0JBQStCLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xELENBQUMsNkJBQTZCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFFOUMsa0JBQWtCO1lBQ2xCLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFFaEQsa0JBQWtCO1lBQ2xCLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDO1lBQ3hCLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQztZQUNWLENBQUMseUNBQXlDLEVBQUUsSUFBSSxDQUFDO1lBQ2pELENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDO1lBQ3hCLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDO1NBQ3pCLENBQUMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNuQyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUE7WUFDaEQsTUFBTSxNQUFNLEdBQUc7Z0JBQ2IsTUFBTSxFQUFFO29CQUNOO3dCQUNFLElBQUksRUFBRSxNQUFNO3dCQUNaLElBQUksRUFBRSxVQUFtQjt3QkFDekIsTUFBTSxFQUFFLFFBQWlCO3FCQUMxQjtpQkFDRjthQUNGLENBQUE7WUFFRCxNQUFNLEdBQUcsR0FBRyxNQUFNLFlBQVksQ0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFBO1lBQ2pELE1BQU0sRUFBRSxHQUFHLE1BQU0sR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFBO1lBRTlCLE1BQU0sQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNwRCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRhRnJhbWUgfSBmcm9tIFwibm9kZWpzLXBvbGFyc1wiXG5pbXBvcnQgeyBkZXNjcmliZSwgZXhwZWN0LCBpdCB9IGZyb20gXCJ2aXRlc3RcIlxuaW1wb3J0IHsgcHJvY2Vzc1RhYmxlIH0gZnJvbSBcIi4uLy4uL3RhYmxlL2luZGV4LnRzXCJcblxuZGVzY3JpYmUoXCJwYXJzZUdlb3BvaW50RmllbGRcIiwgKCkgPT4ge1xuICBkZXNjcmliZShcImRlZmF1bHQgZm9ybWF0XCIsICgpID0+IHtcbiAgICBpdC5lYWNoKFtcbiAgICAgIC8vIFZhbGlkIGdlb3BvaW50cyBpbiBkZWZhdWx0IGZvcm1hdCAobG9uLGxhdClcbiAgICAgIFtcIjkwLjUwLDQ1LjUwXCIsIFs5MC41LCA0NS41XV0sXG4gICAgICBbXCIwLDBcIiwgWzAsIDBdXSxcbiAgICAgIC8vW1wiLTEyMi40MCwgMzcuNzhcIiwgWy0xMjIuNCwgMzcuNzhdXSxcbiAgICAgIC8vW1wiLTE4MC4wLC05MC4wXCIsIFstMTgwLjAsIC05MC4wXV0sXG4gICAgICAvL1tcIjE4MC4wLCA5MC4wXCIsIFsxODAuMCwgOTAuMF1dLFxuXG4gICAgICAvLyBXaXRoIHdoaXRlc3BhY2VcbiAgICAgIC8vW1wiIDkwLjUwLCA0NS41MCBcIiwgWzkwLjUsIDQ1LjVdXSxcblxuICAgICAgLy8gSW52YWxpZCBmb3JtYXRzXG4gICAgICAvL1tcIm5vdCBhIGdlb3BvaW50XCIsIG51bGxdLFxuICAgICAgLy9bXCJcIiwgbnVsbF0sXG4gICAgICAvL1tcIjkwLjUwXCIsIG51bGxdLFxuICAgICAgLy9bXCI5MC41MCxsYXRcIiwgbnVsbF0sXG4gICAgICAvL1tcImxvbiw0NS41MFwiLCBudWxsXSxcbiAgICAgIC8vW1wiOTAuNTAsNDUuNTAsMFwiLCBudWxsXSxcbiAgICBdKShcIiVzIC0+ICVzXCIsIGFzeW5jIChjZWxsLCB2YWx1ZSkgPT4ge1xuICAgICAgY29uc3QgdGFibGUgPSBEYXRhRnJhbWUoeyBuYW1lOiBbY2VsbF0gfSkubGF6eSgpXG4gICAgICBjb25zdCBzY2hlbWEgPSB7XG4gICAgICAgIGZpZWxkczogW3sgbmFtZTogXCJuYW1lXCIsIHR5cGU6IFwiZ2VvcG9pbnRcIiBhcyBjb25zdCB9XSxcbiAgICAgIH1cblxuICAgICAgY29uc3QgbGRmID0gYXdhaXQgcHJvY2Vzc1RhYmxlKHRhYmxlLCB7IHNjaGVtYSB9KVxuICAgICAgY29uc3QgZGYgPSBhd2FpdCBsZGYuY29sbGVjdCgpXG5cbiAgICAgIGV4cGVjdChkZi50b1JlY29yZHMoKVswXT8ubmFtZSkudG9FcXVhbCh2YWx1ZSlcbiAgICB9KVxuICB9KVxuXG4gIGRlc2NyaWJlLnNraXAoXCJhcnJheSBmb3JtYXRcIiwgKCkgPT4ge1xuICAgIGl0LmVhY2goW1xuICAgICAgLy8gVmFsaWQgZ2VvcG9pbnRzIGluIGFycmF5IGZvcm1hdFxuICAgICAgW1wiWzkwLjUwLCA0NS41MF1cIiwgWzkwLjUsIDQ1LjVdXSxcbiAgICAgIFtcIlswLCAwXVwiLCBbMCwgMF1dLFxuICAgICAgW1wiWy0xMjIuNDAsIDM3Ljc4XVwiLCBbLTEyMi40LCAzNy43OF1dLFxuICAgICAgW1wiWy0xODAuMCwgLTkwLjBdXCIsIFstMTgwLjAsIC05MC4wXV0sXG4gICAgICBbXCJbMTgwLjAsIDkwLjBdXCIsIFsxODAuMCwgOTAuMF1dLFxuXG4gICAgICAvLyBXaXRoIHdoaXRlc3BhY2VcbiAgICAgIFtcIiBbOTAuNTAsIDQ1LjUwXSBcIiwgWzkwLjUsIDQ1LjVdXSxcblxuICAgICAgLy8gSW52YWxpZCBmb3JtYXRzXG4gICAgICBbXCJub3QgYSBnZW9wb2ludFwiLCBudWxsXSxcbiAgICAgIFtcIlwiLCBudWxsXSxcbiAgICAgIFtcIls5MC41MF1cIiwgbnVsbF0sXG4gICAgICBbXCJbOTAuNTAsIDQ1LjUwLCAwXVwiLCBudWxsXSxcbiAgICAgIFtcIlsnbG9uJywgJ2xhdCddXCIsIG51bGxdLFxuICAgIF0pKFwiJXMgLT4gJXNcIiwgYXN5bmMgKGNlbGwsIHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCB0YWJsZSA9IERhdGFGcmFtZSh7IG5hbWU6IFtjZWxsXSB9KS5sYXp5KClcbiAgICAgIGNvbnN0IHNjaGVtYSA9IHtcbiAgICAgICAgZmllbGRzOiBbXG4gICAgICAgICAgeyBuYW1lOiBcIm5hbWVcIiwgdHlwZTogXCJnZW9wb2ludFwiIGFzIGNvbnN0LCBmb3JtYXQ6IFwiYXJyYXlcIiBhcyBjb25zdCB9LFxuICAgICAgICBdLFxuICAgICAgfVxuXG4gICAgICBjb25zdCBsZGYgPSBhd2FpdCBwcm9jZXNzVGFibGUodGFibGUsIHsgc2NoZW1hIH0pXG4gICAgICBjb25zdCBkZiA9IGF3YWl0IGxkZi5jb2xsZWN0KClcblxuICAgICAgZXhwZWN0KGRmLmdldENvbHVtbihcIm5hbWVcIikuZ2V0KDApKS50b0VxdWFsKHZhbHVlKVxuICAgIH0pXG4gIH0pXG5cbiAgZGVzY3JpYmUuc2tpcChcIm9iamVjdCBmb3JtYXRcIiwgKCkgPT4ge1xuICAgIGl0LmVhY2goW1xuICAgICAgLy8gVmFsaWQgZ2VvcG9pbnRzIGluIG9iamVjdCBmb3JtYXRcbiAgICAgIFsne1wibG9uXCI6IDkwLjUwLCBcImxhdFwiOiA0NS41MH0nLCBbOTAuNSwgNDUuNV1dLFxuICAgICAgWyd7XCJsb25cIjogMCwgXCJsYXRcIjogMH0nLCBbMCwgMF1dLFxuICAgICAgWyd7XCJsb25cIjogLTEyMi40MCwgXCJsYXRcIjogMzcuNzh9JywgWy0xMjIuNCwgMzcuNzhdXSxcbiAgICAgIFsne1wibG9uXCI6IC0xODAuMCwgXCJsYXRcIjogLTkwLjB9JywgWy0xODAuMCwgLTkwLjBdXSxcbiAgICAgIFsne1wibG9uXCI6IDE4MC4wLCBcImxhdFwiOiA5MC4wfScsIFsxODAuMCwgOTAuMF1dLFxuXG4gICAgICAvLyBXaXRoIHdoaXRlc3BhY2VcbiAgICAgIFsnIHtcImxvblwiOiA5MC41MCwgXCJsYXRcIjogNDUuNTB9ICcsIFs5MC41LCA0NS41XV0sXG5cbiAgICAgIC8vIEludmFsaWQgZm9ybWF0c1xuICAgICAgW1wibm90IGEgZ2VvcG9pbnRcIiwgbnVsbF0sXG4gICAgICBbXCJcIiwgbnVsbF0sXG4gICAgICBbJ3tcImxvbmdpdHVkZVwiOiA5MC41MCwgXCJsYXRpdHVkZVwiOiA0NS41MH0nLCBudWxsXSxcbiAgICAgIFsne1wibG9uXCI6IDkwLjUwfScsIG51bGxdLFxuICAgICAgWyd7XCJsYXRcIjogNDUuNTB9JywgbnVsbF0sXG4gICAgXSkoXCIlcyAtPiAlc1wiLCBhc3luYyAoY2VsbCwgdmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IHRhYmxlID0gRGF0YUZyYW1lKHsgbmFtZTogW2NlbGxdIH0pLmxhenkoKVxuICAgICAgY29uc3Qgc2NoZW1hID0ge1xuICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIm5hbWVcIixcbiAgICAgICAgICAgIHR5cGU6IFwiZ2VvcG9pbnRcIiBhcyBjb25zdCxcbiAgICAgICAgICAgIGZvcm1hdDogXCJvYmplY3RcIiBhcyBjb25zdCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfVxuXG4gICAgICBjb25zdCBsZGYgPSBhd2FpdCBwcm9jZXNzVGFibGUodGFibGUsIHsgc2NoZW1hIH0pXG4gICAgICBjb25zdCBkZiA9IGF3YWl0IGxkZi5jb2xsZWN0KClcblxuICAgICAgZXhwZWN0KGRmLmdldENvbHVtbihcIm5hbWVcIikuZ2V0KDApKS50b0VxdWFsKHZhbHVlKVxuICAgIH0pXG4gIH0pXG59KVxuIl19