@dpkit/table
Version:
Data Package implementation in TypeScript.
30 lines • 5.19 kB
JavaScript
import { DataType } from "nodejs-polars";
import { col, lit } from "nodejs-polars";
import { matchField } from "../field/index.js";
import { parseField } from "../field/index.js";
import { getPolarsSchema } from "../schema/index.js";
export async function processTable(table, options) {
const { schema, sampleSize = 100 } = options ?? {};
if (!schema) {
return table;
}
const sample = await table.head(sampleSize).collect();
const polarsSchema = getPolarsSchema(sample.schema);
return table.select(Object.values(processFields(schema, polarsSchema)));
}
export function processFields(schema, polarsSchema, options) {
const exprs = {};
for (const [index, field] of schema.fields.entries()) {
const polarsField = matchField(index, field, schema, polarsSchema);
let expr = lit(null).alias(field.name);
if (polarsField) {
expr = col(polarsField.name).alias(field.name);
if (!options?.dontParse && polarsField.type.equals(DataType.String)) {
expr = parseField(field, { expr, schema });
}
}
exprs[field.name] = expr;
}
return exprs;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RhYmxlL3Byb2Nlc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUN4QyxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRTlDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUdwRCxNQUFNLENBQUMsS0FBSyxVQUFVLFlBQVksQ0FDaEMsS0FBWSxFQUNaLE9BR0M7SUFFRCxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsR0FBRyxHQUFHLEVBQUUsR0FBRyxPQUFPLElBQUksRUFBRSxDQUFBO0lBRWxELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUNyRCxNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBRW5ELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ3pFLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUMzQixNQUFjLEVBQ2QsWUFBMEIsRUFDMUIsT0FBaUM7SUFFakMsTUFBTSxLQUFLLEdBQXlCLEVBQUUsQ0FBQTtJQUV0QyxLQUFLLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ3JELE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQTtRQUNsRSxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUV0QyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLElBQUksR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7WUFFOUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3BFLElBQUksR0FBRyxVQUFVLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUE7WUFDNUMsQ0FBQztRQUNILENBQUM7UUFFRCxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQTtJQUMxQixDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTY2hlbWEgfSBmcm9tIFwiQGRwa2l0L2NvcmVcIlxuaW1wb3J0IHR5cGUgeyBFeHByIH0gZnJvbSBcIm5vZGVqcy1wb2xhcnNcIlxuaW1wb3J0IHsgRGF0YVR5cGUgfSBmcm9tIFwibm9kZWpzLXBvbGFyc1wiXG5pbXBvcnQgeyBjb2wsIGxpdCB9IGZyb20gXCJub2RlanMtcG9sYXJzXCJcbmltcG9ydCB7IG1hdGNoRmllbGQgfSBmcm9tIFwiLi4vZmllbGQvaW5kZXgudHNcIlxuaW1wb3J0IHsgcGFyc2VGaWVsZCB9IGZyb20gXCIuLi9maWVsZC9pbmRleC50c1wiXG5pbXBvcnQgdHlwZSB7IFBvbGFyc1NjaGVtYSB9IGZyb20gXCIuLi9zY2hlbWEvaW5kZXgudHNcIlxuaW1wb3J0IHsgZ2V0UG9sYXJzU2NoZW1hIH0gZnJvbSBcIi4uL3NjaGVtYS9pbmRleC50c1wiXG5pbXBvcnQgdHlwZSB7IFRhYmxlIH0gZnJvbSBcIi4vVGFibGUudHNcIlxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1RhYmxlKFxuICB0YWJsZTogVGFibGUsXG4gIG9wdGlvbnM/OiB7XG4gICAgc2NoZW1hPzogU2NoZW1hXG4gICAgc2FtcGxlU2l6ZT86IG51bWJlclxuICB9LFxuKSB7XG4gIGNvbnN0IHsgc2NoZW1hLCBzYW1wbGVTaXplID0gMTAwIH0gPSBvcHRpb25zID8/IHt9XG5cbiAgaWYgKCFzY2hlbWEpIHtcbiAgICByZXR1cm4gdGFibGVcbiAgfVxuXG4gIGNvbnN0IHNhbXBsZSA9IGF3YWl0IHRhYmxlLmhlYWQoc2FtcGxlU2l6ZSkuY29sbGVjdCgpXG4gIGNvbnN0IHBvbGFyc1NjaGVtYSA9IGdldFBvbGFyc1NjaGVtYShzYW1wbGUuc2NoZW1hKVxuXG4gIHJldHVybiB0YWJsZS5zZWxlY3QoT2JqZWN0LnZhbHVlcyhwcm9jZXNzRmllbGRzKHNjaGVtYSwgcG9sYXJzU2NoZW1hKSkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRmllbGRzKFxuICBzY2hlbWE6IFNjaGVtYSxcbiAgcG9sYXJzU2NoZW1hOiBQb2xhcnNTY2hlbWEsXG4gIG9wdGlvbnM/OiB7IGRvbnRQYXJzZT86IGJvb2xlYW4gfSxcbikge1xuICBjb25zdCBleHByczogUmVjb3JkPHN0cmluZywgRXhwcj4gPSB7fVxuXG4gIGZvciAoY29uc3QgW2luZGV4LCBmaWVsZF0gb2Ygc2NoZW1hLmZpZWxkcy5lbnRyaWVzKCkpIHtcbiAgICBjb25zdCBwb2xhcnNGaWVsZCA9IG1hdGNoRmllbGQoaW5kZXgsIGZpZWxkLCBzY2hlbWEsIHBvbGFyc1NjaGVtYSlcbiAgICBsZXQgZXhwciA9IGxpdChudWxsKS5hbGlhcyhmaWVsZC5uYW1lKVxuXG4gICAgaWYgKHBvbGFyc0ZpZWxkKSB7XG4gICAgICBleHByID0gY29sKHBvbGFyc0ZpZWxkLm5hbWUpLmFsaWFzKGZpZWxkLm5hbWUpXG5cbiAgICAgIGlmICghb3B0aW9ucz8uZG9udFBhcnNlICYmIHBvbGFyc0ZpZWxkLnR5cGUuZXF1YWxzKERhdGFUeXBlLlN0cmluZykpIHtcbiAgICAgICAgZXhwciA9IHBhcnNlRmllbGQoZmllbGQsIHsgZXhwciwgc2NoZW1hIH0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgZXhwcnNbZmllbGQubmFtZV0gPSBleHByXG4gIH1cblxuICByZXR1cm4gZXhwcnNcbn1cbiJdfQ==