UNPKG

@dpkit/table

Version:

Data Package implementation in TypeScript.

54 lines 6.64 kB
import { DataFrame } from "nodejs-polars"; import { describe, expect, it } from "vitest"; import { inspectTable } from "../../table/index.js"; describe("inspectTable (cell/pattern)", () => { it("should not report errors for string values that match the pattern", async () => { const table = DataFrame({ email: ["john@example.com", "alice@domain.org", "test@test.io"], }).lazy(); const schema = { fields: [ { name: "email", type: "string", constraints: { pattern: "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$", }, }, ], }; const errors = await inspectTable(table, { schema }); expect(errors).toHaveLength(0); }); it("should report an error for strings that don't match the pattern", async () => { const table = DataFrame({ email: ["john@example.com", "alice@domain", "test.io", "valid@email.com"], }).lazy(); const schema = { fields: [ { name: "email", type: "string", constraints: { pattern: "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$", }, }, ], }; const errors = await inspectTable(table, { schema }); expect(errors.filter(e => e.type === "cell/pattern")).toHaveLength(2); expect(errors).toContainEqual({ type: "cell/pattern", fieldName: "email", rowNumber: 2, // Second row (alice@domain) cell: "alice@domain", }); expect(errors).toContainEqual({ type: "cell/pattern", fieldName: "email", rowNumber: 3, // Third row (test.io) cell: "test.io", }); }); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0dGVybi5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZmllbGQvY2hlY2tzL3BhdHRlcm4uc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ3pDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFFbkQsUUFBUSxDQUFDLDZCQUE2QixFQUFFLEdBQUcsRUFBRTtJQUMzQyxFQUFFLENBQUMsbUVBQW1FLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDakYsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDO1lBQ3RCLEtBQUssRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGNBQWMsQ0FBQztTQUNoRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUE7UUFFVCxNQUFNLE1BQU0sR0FBVztZQUNyQixNQUFNLEVBQUU7Z0JBQ047b0JBQ0UsSUFBSSxFQUFFLE9BQU87b0JBQ2IsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsV0FBVyxFQUFFO3dCQUNYLE9BQU8sRUFBRSxtREFBbUQ7cUJBQzdEO2lCQUNGO2FBQ0Y7U0FDRixDQUFBO1FBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxZQUFZLENBQUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQTtRQUNwRCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2hDLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLGlFQUFpRSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQy9FLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQztZQUN0QixLQUFLLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixDQUFDO1NBQzFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUVULE1BQU0sTUFBTSxHQUFXO1lBQ3JCLE1BQU0sRUFBRTtnQkFDTjtvQkFDRSxJQUFJLEVBQUUsT0FBTztvQkFDYixJQUFJLEVBQUUsUUFBUTtvQkFDZCxXQUFXLEVBQUU7d0JBQ1gsT0FBTyxFQUFFLG1EQUFtRDtxQkFDN0Q7aUJBQ0Y7YUFDRjtTQUNGLENBQUE7UUFFRCxNQUFNLE1BQU0sR0FBRyxNQUFNLFlBQVksQ0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFBO1FBQ3BELE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxjQUFjLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNyRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsY0FBYyxDQUFDO1lBQzVCLElBQUksRUFBRSxjQUFjO1lBQ3BCLFNBQVMsRUFBRSxPQUFPO1lBQ2xCLFNBQVMsRUFBRSxDQUFDLEVBQUUsNEJBQTRCO1lBQzFDLElBQUksRUFBRSxjQUFjO1NBQ3JCLENBQUMsQ0FBQTtRQUNGLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxjQUFjLENBQUM7WUFDNUIsSUFBSSxFQUFFLGNBQWM7WUFDcEIsU0FBUyxFQUFFLE9BQU87WUFDbEIsU0FBUyxFQUFFLENBQUMsRUFBRSxzQkFBc0I7WUFDcEMsSUFBSSxFQUFFLFNBQVM7U0FDaEIsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU2NoZW1hIH0gZnJvbSBcIkBkcGtpdC9jb3JlXCJcbmltcG9ydCB7IERhdGFGcmFtZSB9IGZyb20gXCJub2RlanMtcG9sYXJzXCJcbmltcG9ydCB7IGRlc2NyaWJlLCBleHBlY3QsIGl0IH0gZnJvbSBcInZpdGVzdFwiXG5pbXBvcnQgeyBpbnNwZWN0VGFibGUgfSBmcm9tIFwiLi4vLi4vdGFibGUvaW5kZXgudHNcIlxuXG5kZXNjcmliZShcImluc3BlY3RUYWJsZSAoY2VsbC9wYXR0ZXJuKVwiLCAoKSA9PiB7XG4gIGl0KFwic2hvdWxkIG5vdCByZXBvcnQgZXJyb3JzIGZvciBzdHJpbmcgdmFsdWVzIHRoYXQgbWF0Y2ggdGhlIHBhdHRlcm5cIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHRhYmxlID0gRGF0YUZyYW1lKHtcbiAgICAgIGVtYWlsOiBbXCJqb2huQGV4YW1wbGUuY29tXCIsIFwiYWxpY2VAZG9tYWluLm9yZ1wiLCBcInRlc3RAdGVzdC5pb1wiXSxcbiAgICB9KS5sYXp5KClcblxuICAgIGNvbnN0IHNjaGVtYTogU2NoZW1hID0ge1xuICAgICAgZmllbGRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImVtYWlsXCIsXG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICBjb25zdHJhaW50czoge1xuICAgICAgICAgICAgcGF0dGVybjogXCJeW2EtekEtWjAtOS5fJSstXStAW2EtekEtWjAtOS4tXStcXFxcLlthLXpBLVpdezIsfSRcIixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9XG5cbiAgICBjb25zdCBlcnJvcnMgPSBhd2FpdCBpbnNwZWN0VGFibGUodGFibGUsIHsgc2NoZW1hIH0pXG4gICAgZXhwZWN0KGVycm9ycykudG9IYXZlTGVuZ3RoKDApXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgcmVwb3J0IGFuIGVycm9yIGZvciBzdHJpbmdzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIHBhdHRlcm5cIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHRhYmxlID0gRGF0YUZyYW1lKHtcbiAgICAgIGVtYWlsOiBbXCJqb2huQGV4YW1wbGUuY29tXCIsIFwiYWxpY2VAZG9tYWluXCIsIFwidGVzdC5pb1wiLCBcInZhbGlkQGVtYWlsLmNvbVwiXSxcbiAgICB9KS5sYXp5KClcblxuICAgIGNvbnN0IHNjaGVtYTogU2NoZW1hID0ge1xuICAgICAgZmllbGRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImVtYWlsXCIsXG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICBjb25zdHJhaW50czoge1xuICAgICAgICAgICAgcGF0dGVybjogXCJeW2EtekEtWjAtOS5fJSstXStAW2EtekEtWjAtOS4tXStcXFxcLlthLXpBLVpdezIsfSRcIixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9XG5cbiAgICBjb25zdCBlcnJvcnMgPSBhd2FpdCBpbnNwZWN0VGFibGUodGFibGUsIHsgc2NoZW1hIH0pXG4gICAgZXhwZWN0KGVycm9ycy5maWx0ZXIoZSA9PiBlLnR5cGUgPT09IFwiY2VsbC9wYXR0ZXJuXCIpKS50b0hhdmVMZW5ndGgoMilcbiAgICBleHBlY3QoZXJyb3JzKS50b0NvbnRhaW5FcXVhbCh7XG4gICAgICB0eXBlOiBcImNlbGwvcGF0dGVyblwiLFxuICAgICAgZmllbGROYW1lOiBcImVtYWlsXCIsXG4gICAgICByb3dOdW1iZXI6IDIsIC8vIFNlY29uZCByb3cgKGFsaWNlQGRvbWFpbilcbiAgICAgIGNlbGw6IFwiYWxpY2VAZG9tYWluXCIsXG4gICAgfSlcbiAgICBleHBlY3QoZXJyb3JzKS50b0NvbnRhaW5FcXVhbCh7XG4gICAgICB0eXBlOiBcImNlbGwvcGF0dGVyblwiLFxuICAgICAgZmllbGROYW1lOiBcImVtYWlsXCIsXG4gICAgICByb3dOdW1iZXI6IDMsIC8vIFRoaXJkIHJvdyAodGVzdC5pbylcbiAgICAgIGNlbGw6IFwidGVzdC5pb1wiLFxuICAgIH0pXG4gIH0pXG59KVxuIl19