UNPKG

@dpkit/table

Version:

Data Package implementation in TypeScript.

28 lines 5.32 kB
import { col, lit } from "nodejs-polars"; import { stringifyField } from "../field/index.js"; import { getPolarsSchema } from "../schema/index.js"; const HEAD_ROWS = 100; export async function denormalizeTable(table, schema, options) { const head = await table.head(HEAD_ROWS).collect(); const polarsSchema = getPolarsSchema(head.schema); return table.select(Object.values(denormalizeFields(schema, polarsSchema, options))); } export function denormalizeFields(schema, polarsSchema, options) { const { nativeTypes } = options ?? {}; const exprs = {}; for (const field of schema.fields) { const polarsField = polarsSchema.fields.find(f => f.name === field.name); let expr = lit(null).alias(field.name); if (polarsField) { expr = col(polarsField.name).alias(field.name); if (!nativeTypes?.includes(field.type ?? "any")) { const missingValues = field.missingValues ?? schema.missingValues; const mergedField = { ...field, missingValues }; expr = stringifyField(mergedField, expr); } } exprs[field.name] = expr; } return exprs; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVub3JtYWxpemUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90YWJsZS9kZW5vcm1hbGl6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUV4QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFFbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBR3BELE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQTtBQU1yQixNQUFNLENBQUMsS0FBSyxVQUFVLGdCQUFnQixDQUNwQyxLQUFZLEVBQ1osTUFBYyxFQUNkLE9BQWlDO0lBRWpDLE1BQU0sSUFBSSxHQUFHLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUNsRCxNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBRWpELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FDakIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQ2hFLENBQUE7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixNQUFjLEVBQ2QsWUFBMEIsRUFDMUIsT0FBaUM7SUFFakMsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUE7SUFDckMsTUFBTSxLQUFLLEdBQXlCLEVBQUUsQ0FBQTtJQUV0QyxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNsQyxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3hFLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBRXRDLElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUU5QyxJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2hELE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLElBQUksTUFBTSxDQUFDLGFBQWEsQ0FBQTtnQkFDakUsTUFBTSxXQUFXLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxhQUFhLEVBQUUsQ0FBQTtnQkFDL0MsSUFBSSxHQUFHLGNBQWMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUE7WUFDMUMsQ0FBQztRQUNILENBQUM7UUFFRCxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQTtJQUMxQixDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBGaWVsZCwgU2NoZW1hIH0gZnJvbSBcIkBkcGtpdC9jb3JlXCJcbmltcG9ydCB7IGNvbCwgbGl0IH0gZnJvbSBcIm5vZGVqcy1wb2xhcnNcIlxuaW1wb3J0IHR5cGUgeyBFeHByIH0gZnJvbSBcIm5vZGVqcy1wb2xhcnNcIlxuaW1wb3J0IHsgc3RyaW5naWZ5RmllbGQgfSBmcm9tIFwiLi4vZmllbGQvaW5kZXgudHNcIlxuaW1wb3J0IHR5cGUgeyBQb2xhcnNTY2hlbWEgfSBmcm9tIFwiLi4vc2NoZW1hL2luZGV4LnRzXCJcbmltcG9ydCB7IGdldFBvbGFyc1NjaGVtYSB9IGZyb20gXCIuLi9zY2hlbWEvaW5kZXgudHNcIlxuaW1wb3J0IHR5cGUgeyBUYWJsZSB9IGZyb20gXCIuL1RhYmxlLnRzXCJcblxuY29uc3QgSEVBRF9ST1dTID0gMTAwXG5cbnR5cGUgRGVub3JtYWxpemVUYWJsZU9wdGlvbnMgPSB7XG4gIG5hdGl2ZVR5cGVzPzogRXhjbHVkZTxGaWVsZFtcInR5cGVcIl0sIHVuZGVmaW5lZD5bXVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVub3JtYWxpemVUYWJsZShcbiAgdGFibGU6IFRhYmxlLFxuICBzY2hlbWE6IFNjaGVtYSxcbiAgb3B0aW9ucz86IERlbm9ybWFsaXplVGFibGVPcHRpb25zLFxuKSB7XG4gIGNvbnN0IGhlYWQgPSBhd2FpdCB0YWJsZS5oZWFkKEhFQURfUk9XUykuY29sbGVjdCgpXG4gIGNvbnN0IHBvbGFyc1NjaGVtYSA9IGdldFBvbGFyc1NjaGVtYShoZWFkLnNjaGVtYSlcblxuICByZXR1cm4gdGFibGUuc2VsZWN0KFxuICAgIE9iamVjdC52YWx1ZXMoZGVub3JtYWxpemVGaWVsZHMoc2NoZW1hLCBwb2xhcnNTY2hlbWEsIG9wdGlvbnMpKSxcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVub3JtYWxpemVGaWVsZHMoXG4gIHNjaGVtYTogU2NoZW1hLFxuICBwb2xhcnNTY2hlbWE6IFBvbGFyc1NjaGVtYSxcbiAgb3B0aW9ucz86IERlbm9ybWFsaXplVGFibGVPcHRpb25zLFxuKSB7XG4gIGNvbnN0IHsgbmF0aXZlVHlwZXMgfSA9IG9wdGlvbnMgPz8ge31cbiAgY29uc3QgZXhwcnM6IFJlY29yZDxzdHJpbmcsIEV4cHI+ID0ge31cblxuICBmb3IgKGNvbnN0IGZpZWxkIG9mIHNjaGVtYS5maWVsZHMpIHtcbiAgICBjb25zdCBwb2xhcnNGaWVsZCA9IHBvbGFyc1NjaGVtYS5maWVsZHMuZmluZChmID0+IGYubmFtZSA9PT0gZmllbGQubmFtZSlcbiAgICBsZXQgZXhwciA9IGxpdChudWxsKS5hbGlhcyhmaWVsZC5uYW1lKVxuXG4gICAgaWYgKHBvbGFyc0ZpZWxkKSB7XG4gICAgICBleHByID0gY29sKHBvbGFyc0ZpZWxkLm5hbWUpLmFsaWFzKGZpZWxkLm5hbWUpXG5cbiAgICAgIGlmICghbmF0aXZlVHlwZXM/LmluY2x1ZGVzKGZpZWxkLnR5cGUgPz8gXCJhbnlcIikpIHtcbiAgICAgICAgY29uc3QgbWlzc2luZ1ZhbHVlcyA9IGZpZWxkLm1pc3NpbmdWYWx1ZXMgPz8gc2NoZW1hLm1pc3NpbmdWYWx1ZXNcbiAgICAgICAgY29uc3QgbWVyZ2VkRmllbGQgPSB7IC4uLmZpZWxkLCBtaXNzaW5nVmFsdWVzIH1cbiAgICAgICAgZXhwciA9IHN0cmluZ2lmeUZpZWxkKG1lcmdlZEZpZWxkLCBleHByKVxuICAgICAgfVxuICAgIH1cblxuICAgIGV4cHJzW2ZpZWxkLm5hbWVdID0gZXhwclxuICB9XG5cbiAgcmV0dXJuIGV4cHJzXG59XG4iXX0=