@dpkit/table
Version:
Data Package implementation in TypeScript.
65 lines • 9.48 kB
JavaScript
import { col, lit, when } from "nodejs-polars";
import { parseArrayField } from "./types/array.js";
import { parseBooleanField } from "./types/boolean.js";
import { parseDateField } from "./types/date.js";
import { parseDatetimeField } from "./types/datetime.js";
import { parseDurationField } from "./types/duration.js";
import { parseGeojsonField } from "./types/geojson.js";
import { parseGeopointField } from "./types/geopoint.js";
import { parseIntegerField } from "./types/integer.js";
import { parseListField } from "./types/list.js";
import { parseNumberField } from "./types/number.js";
import { parseObjectField } from "./types/object.js";
import { parseStringField } from "./types/string.js";
import { parseTimeField } from "./types/time.js";
import { parseYearField } from "./types/year.js";
import { parseYearmonthField } from "./types/yearmonth.js";
const DEFAULT_MISSING_VALUES = [""];
export function parseField(field, options) {
let expr = options?.expr ?? col(field.name);
const missingValues = field.missingValues ??
options?.schema?.missingValues ??
DEFAULT_MISSING_VALUES;
const flattenMissingValues = missingValues.map(item => typeof item === "string" ? item : item.value);
if (flattenMissingValues.length) {
expr = when(expr.isIn(flattenMissingValues))
.then(lit(null))
.otherwise(expr)
.alias(field.name);
}
switch (field.type) {
case "string":
return parseStringField(field, expr);
case "integer":
return parseIntegerField(field, expr);
case "number":
return parseNumberField(field, expr);
case "boolean":
return parseBooleanField(field, expr);
case "date":
return parseDateField(field, expr);
case "datetime":
return parseDatetimeField(field, expr);
case "time":
return parseTimeField(field, expr);
case "year":
return parseYearField(field, expr);
case "yearmonth":
return parseYearmonthField(field, expr);
case "list":
return parseListField(field, expr);
case "array":
return parseArrayField(field, expr);
case "geopoint":
return parseGeopointField(field, expr);
case "object":
return parseObjectField(field, expr);
case "geojson":
return parseGeojsonField(field, expr);
case "duration":
return parseDurationField(field, expr);
default:
return expr;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9maWVsZC9wYXJzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFOUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ2xELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUNoRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUN0RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUN0RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDaEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ2hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUNoRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUUxRCxNQUFNLHNCQUFzQixHQUFHLENBQUMsRUFBRSxDQUFDLENBQUE7QUFFbkMsTUFBTSxVQUFVLFVBQVUsQ0FDeEIsS0FBWSxFQUNaLE9BQTBDO0lBRTFDLElBQUksSUFBSSxHQUFHLE9BQU8sRUFBRSxJQUFJLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUUzQyxNQUFNLGFBQWEsR0FDakIsS0FBSyxDQUFDLGFBQWE7UUFDbkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxhQUFhO1FBQzlCLHNCQUFzQixDQUFBO0lBRXhCLE1BQU0sb0JBQW9CLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUNwRCxPQUFPLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FDN0MsQ0FBQTtJQUVELElBQUksb0JBQW9CLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDaEMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7YUFDekMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNmLFNBQVMsQ0FBQyxJQUFJLENBQUM7YUFDZixLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3RCLENBQUM7SUFFRCxRQUFRLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNuQixLQUFLLFFBQVE7WUFDWCxPQUFPLGdCQUFnQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUN0QyxLQUFLLFNBQVM7WUFDWixPQUFPLGlCQUFpQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUN2QyxLQUFLLFFBQVE7WUFDWCxPQUFPLGdCQUFnQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUN0QyxLQUFLLFNBQVM7WUFDWixPQUFPLGlCQUFpQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUN2QyxLQUFLLE1BQU07WUFDVCxPQUFPLGNBQWMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDcEMsS0FBSyxVQUFVO1lBQ2IsT0FBTyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDeEMsS0FBSyxNQUFNO1lBQ1QsT0FBTyxjQUFjLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQ3BDLEtBQUssTUFBTTtZQUNULE9BQU8sY0FBYyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUNwQyxLQUFLLFdBQVc7WUFDZCxPQUFPLG1CQUFtQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUN6QyxLQUFLLE1BQU07WUFDVCxPQUFPLGNBQWMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDcEMsS0FBSyxPQUFPO1lBQ1YsT0FBTyxlQUFlLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQ3JDLEtBQUssVUFBVTtZQUNiLE9BQU8sa0JBQWtCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQ3hDLEtBQUssUUFBUTtZQUNYLE9BQU8sZ0JBQWdCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQ3RDLEtBQUssU0FBUztZQUNaLE9BQU8saUJBQWlCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQ3ZDLEtBQUssVUFBVTtZQUNiLE9BQU8sa0JBQWtCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQ3hDO1lBQ0UsT0FBTyxJQUFJLENBQUE7SUFDZixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRmllbGQsIFNjaGVtYSB9IGZyb20gXCJAZHBraXQvY29yZVwiXG5pbXBvcnQgeyBjb2wsIGxpdCwgd2hlbiB9IGZyb20gXCJub2RlanMtcG9sYXJzXCJcbmltcG9ydCB0eXBlIHsgRXhwciB9IGZyb20gXCJub2RlanMtcG9sYXJzXCJcbmltcG9ydCB7IHBhcnNlQXJyYXlGaWVsZCB9IGZyb20gXCIuL3R5cGVzL2FycmF5LnRzXCJcbmltcG9ydCB7IHBhcnNlQm9vbGVhbkZpZWxkIH0gZnJvbSBcIi4vdHlwZXMvYm9vbGVhbi50c1wiXG5pbXBvcnQgeyBwYXJzZURhdGVGaWVsZCB9IGZyb20gXCIuL3R5cGVzL2RhdGUudHNcIlxuaW1wb3J0IHsgcGFyc2VEYXRldGltZUZpZWxkIH0gZnJvbSBcIi4vdHlwZXMvZGF0ZXRpbWUudHNcIlxuaW1wb3J0IHsgcGFyc2VEdXJhdGlvbkZpZWxkIH0gZnJvbSBcIi4vdHlwZXMvZHVyYXRpb24udHNcIlxuaW1wb3J0IHsgcGFyc2VHZW9qc29uRmllbGQgfSBmcm9tIFwiLi90eXBlcy9nZW9qc29uLnRzXCJcbmltcG9ydCB7IHBhcnNlR2VvcG9pbnRGaWVsZCB9IGZyb20gXCIuL3R5cGVzL2dlb3BvaW50LnRzXCJcbmltcG9ydCB7IHBhcnNlSW50ZWdlckZpZWxkIH0gZnJvbSBcIi4vdHlwZXMvaW50ZWdlci50c1wiXG5pbXBvcnQgeyBwYXJzZUxpc3RGaWVsZCB9IGZyb20gXCIuL3R5cGVzL2xpc3QudHNcIlxuaW1wb3J0IHsgcGFyc2VOdW1iZXJGaWVsZCB9IGZyb20gXCIuL3R5cGVzL251bWJlci50c1wiXG5pbXBvcnQgeyBwYXJzZU9iamVjdEZpZWxkIH0gZnJvbSBcIi4vdHlwZXMvb2JqZWN0LnRzXCJcbmltcG9ydCB7IHBhcnNlU3RyaW5nRmllbGQgfSBmcm9tIFwiLi90eXBlcy9zdHJpbmcudHNcIlxuaW1wb3J0IHsgcGFyc2VUaW1lRmllbGQgfSBmcm9tIFwiLi90eXBlcy90aW1lLnRzXCJcbmltcG9ydCB7IHBhcnNlWWVhckZpZWxkIH0gZnJvbSBcIi4vdHlwZXMveWVhci50c1wiXG5pbXBvcnQgeyBwYXJzZVllYXJtb250aEZpZWxkIH0gZnJvbSBcIi4vdHlwZXMveWVhcm1vbnRoLnRzXCJcblxuY29uc3QgREVGQVVMVF9NSVNTSU5HX1ZBTFVFUyA9IFtcIlwiXVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGaWVsZChcbiAgZmllbGQ6IEZpZWxkLFxuICBvcHRpb25zPzogeyBleHByPzogRXhwcjsgc2NoZW1hPzogU2NoZW1hIH0sXG4pIHtcbiAgbGV0IGV4cHIgPSBvcHRpb25zPy5leHByID8/IGNvbChmaWVsZC5uYW1lKVxuXG4gIGNvbnN0IG1pc3NpbmdWYWx1ZXMgPVxuICAgIGZpZWxkLm1pc3NpbmdWYWx1ZXMgPz9cbiAgICBvcHRpb25zPy5zY2hlbWE/Lm1pc3NpbmdWYWx1ZXMgPz9cbiAgICBERUZBVUxUX01JU1NJTkdfVkFMVUVTXG5cbiAgY29uc3QgZmxhdHRlbk1pc3NpbmdWYWx1ZXMgPSBtaXNzaW5nVmFsdWVzLm1hcChpdGVtID0+XG4gICAgdHlwZW9mIGl0ZW0gPT09IFwic3RyaW5nXCIgPyBpdGVtIDogaXRlbS52YWx1ZSxcbiAgKVxuXG4gIGlmIChmbGF0dGVuTWlzc2luZ1ZhbHVlcy5sZW5ndGgpIHtcbiAgICBleHByID0gd2hlbihleHByLmlzSW4oZmxhdHRlbk1pc3NpbmdWYWx1ZXMpKVxuICAgICAgLnRoZW4obGl0KG51bGwpKVxuICAgICAgLm90aGVyd2lzZShleHByKVxuICAgICAgLmFsaWFzKGZpZWxkLm5hbWUpXG4gIH1cblxuICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICByZXR1cm4gcGFyc2VTdHJpbmdGaWVsZChmaWVsZCwgZXhwcilcbiAgICBjYXNlIFwiaW50ZWdlclwiOlxuICAgICAgcmV0dXJuIHBhcnNlSW50ZWdlckZpZWxkKGZpZWxkLCBleHByKVxuICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgIHJldHVybiBwYXJzZU51bWJlckZpZWxkKGZpZWxkLCBleHByKVxuICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICByZXR1cm4gcGFyc2VCb29sZWFuRmllbGQoZmllbGQsIGV4cHIpXG4gICAgY2FzZSBcImRhdGVcIjpcbiAgICAgIHJldHVybiBwYXJzZURhdGVGaWVsZChmaWVsZCwgZXhwcilcbiAgICBjYXNlIFwiZGF0ZXRpbWVcIjpcbiAgICAgIHJldHVybiBwYXJzZURhdGV0aW1lRmllbGQoZmllbGQsIGV4cHIpXG4gICAgY2FzZSBcInRpbWVcIjpcbiAgICAgIHJldHVybiBwYXJzZVRpbWVGaWVsZChmaWVsZCwgZXhwcilcbiAgICBjYXNlIFwieWVhclwiOlxuICAgICAgcmV0dXJuIHBhcnNlWWVhckZpZWxkKGZpZWxkLCBleHByKVxuICAgIGNhc2UgXCJ5ZWFybW9udGhcIjpcbiAgICAgIHJldHVybiBwYXJzZVllYXJtb250aEZpZWxkKGZpZWxkLCBleHByKVxuICAgIGNhc2UgXCJsaXN0XCI6XG4gICAgICByZXR1cm4gcGFyc2VMaXN0RmllbGQoZmllbGQsIGV4cHIpXG4gICAgY2FzZSBcImFycmF5XCI6XG4gICAgICByZXR1cm4gcGFyc2VBcnJheUZpZWxkKGZpZWxkLCBleHByKVxuICAgIGNhc2UgXCJnZW9wb2ludFwiOlxuICAgICAgcmV0dXJuIHBhcnNlR2VvcG9pbnRGaWVsZChmaWVsZCwgZXhwcilcbiAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICByZXR1cm4gcGFyc2VPYmplY3RGaWVsZChmaWVsZCwgZXhwcilcbiAgICBjYXNlIFwiZ2VvanNvblwiOlxuICAgICAgcmV0dXJuIHBhcnNlR2VvanNvbkZpZWxkKGZpZWxkLCBleHByKVxuICAgIGNhc2UgXCJkdXJhdGlvblwiOlxuICAgICAgcmV0dXJuIHBhcnNlRHVyYXRpb25GaWVsZChmaWVsZCwgZXhwcilcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGV4cHJcbiAgfVxufVxuIl19