@dpkit/ckan
Version:
Fast TypeScript data management framework built on top of the Data Package standard and Polars DataFrames
53 lines • 6.49 kB
JavaScript
/**
* Normalizes a CKAN schema to a Table Schema format
* @param props Object containing the CKAN schema to normalize
* @returns A normalized Table Schema object
*/
export function normalizeCkanSchema(ckanSchema) {
const fields = ckanSchema.fields.map(normalizeCkanField);
return { fields };
}
function normalizeCkanField(ckanField) {
const { id, type, info } = ckanField;
const field = {
name: id,
};
// Add metadata from info if available
if (info) {
if (info.label)
field.title = info.label;
if (info.notes)
field.description = info.notes;
}
const fieldType = (info?.type_override || type).toLowerCase();
switch (fieldType) {
case "text":
case "string":
return { ...field, type: "string" };
case "int":
case "integer":
return { ...field, type: "integer" };
case "numeric":
case "number":
case "float":
return { ...field, type: "number" };
case "bool":
case "boolean":
return { ...field, type: "boolean" };
case "date":
return { ...field, type: "date" };
case "time":
return { ...field, type: "time" };
case "timestamp":
case "datetime":
return { ...field, type: "datetime" };
case "json":
case "object":
return { ...field, type: "object" };
case "array":
return { ...field, type: "array" };
default:
return { ...field, type: "any" };
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc2NoZW1hL3Byb2Nlc3Mvbm9ybWFsaXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWVBOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsVUFBc0I7SUFDeEQsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtJQUV4RCxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUE7QUFDbkIsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUMsU0FBb0I7SUFDOUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsU0FBUyxDQUFBO0lBRXBDLE1BQU0sS0FBSyxHQUFtQjtRQUM1QixJQUFJLEVBQUUsRUFBRTtLQUNULENBQUE7SUFFRCxzQ0FBc0M7SUFDdEMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNULElBQUksSUFBSSxDQUFDLEtBQUs7WUFBRSxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUE7UUFDeEMsSUFBSSxJQUFJLENBQUMsS0FBSztZQUFFLEtBQUssQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQTtJQUNoRCxDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFJLEVBQUUsYUFBYSxJQUFJLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFBO0lBQzdELFFBQVEsU0FBUyxFQUFFLENBQUM7UUFDbEIsS0FBSyxNQUFNLENBQUM7UUFDWixLQUFLLFFBQVE7WUFDWCxPQUFPLEVBQUUsR0FBRyxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBaUIsQ0FBQTtRQUNwRCxLQUFLLEtBQUssQ0FBQztRQUNYLEtBQUssU0FBUztZQUNaLE9BQU8sRUFBRSxHQUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFrQixDQUFBO1FBQ3RELEtBQUssU0FBUyxDQUFDO1FBQ2YsS0FBSyxRQUFRLENBQUM7UUFDZCxLQUFLLE9BQU87WUFDVixPQUFPLEVBQUUsR0FBRyxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBaUIsQ0FBQTtRQUNwRCxLQUFLLE1BQU0sQ0FBQztRQUNaLEtBQUssU0FBUztZQUNaLE9BQU8sRUFBRSxHQUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFrQixDQUFBO1FBQ3RELEtBQUssTUFBTTtZQUNULE9BQU8sRUFBRSxHQUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFlLENBQUE7UUFDaEQsS0FBSyxNQUFNO1lBQ1QsT0FBTyxFQUFFLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQWUsQ0FBQTtRQUNoRCxLQUFLLFdBQVcsQ0FBQztRQUNqQixLQUFLLFVBQVU7WUFDYixPQUFPLEVBQUUsR0FBRyxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBbUIsQ0FBQTtRQUN4RCxLQUFLLE1BQU0sQ0FBQztRQUNaLEtBQUssUUFBUTtZQUNYLE9BQU8sRUFBRSxHQUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFpQixDQUFBO1FBQ3BELEtBQUssT0FBTztZQUNWLE9BQU8sRUFBRSxHQUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFnQixDQUFBO1FBQ2xEO1lBQ0UsT0FBTyxFQUFFLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQVcsQ0FBQTtJQUM3QyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRmllbGQsIFNjaGVtYSB9IGZyb20gXCJAZHBraXQvY29yZVwiXG5pbXBvcnQgdHlwZSB7XG4gIEFycmF5RmllbGQsXG4gIEJvb2xlYW5GaWVsZCxcbiAgRGF0ZUZpZWxkLFxuICBEYXRldGltZUZpZWxkLFxuICBJbnRlZ2VyRmllbGQsXG4gIE51bWJlckZpZWxkLFxuICBPYmplY3RGaWVsZCxcbiAgU3RyaW5nRmllbGQsXG4gIFRpbWVGaWVsZCxcbn0gZnJvbSBcIkBkcGtpdC9jb3JlXCJcbmltcG9ydCB0eXBlIHsgQ2thbkZpZWxkIH0gZnJvbSBcIi4uL0ZpZWxkLmpzXCJcbmltcG9ydCB0eXBlIHsgQ2thblNjaGVtYSB9IGZyb20gXCIuLi9TY2hlbWEuanNcIlxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYSBDS0FOIHNjaGVtYSB0byBhIFRhYmxlIFNjaGVtYSBmb3JtYXRcbiAqIEBwYXJhbSBwcm9wcyBPYmplY3QgY29udGFpbmluZyB0aGUgQ0tBTiBzY2hlbWEgdG8gbm9ybWFsaXplXG4gKiBAcmV0dXJucyBBIG5vcm1hbGl6ZWQgVGFibGUgU2NoZW1hIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplQ2thblNjaGVtYShja2FuU2NoZW1hOiBDa2FuU2NoZW1hKTogU2NoZW1hIHtcbiAgY29uc3QgZmllbGRzID0gY2thblNjaGVtYS5maWVsZHMubWFwKG5vcm1hbGl6ZUNrYW5GaWVsZClcblxuICByZXR1cm4geyBmaWVsZHMgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVDa2FuRmllbGQoY2thbkZpZWxkOiBDa2FuRmllbGQpIHtcbiAgY29uc3QgeyBpZCwgdHlwZSwgaW5mbyB9ID0gY2thbkZpZWxkXG5cbiAgY29uc3QgZmllbGQ6IFBhcnRpYWw8RmllbGQ+ID0ge1xuICAgIG5hbWU6IGlkLFxuICB9XG5cbiAgLy8gQWRkIG1ldGFkYXRhIGZyb20gaW5mbyBpZiBhdmFpbGFibGVcbiAgaWYgKGluZm8pIHtcbiAgICBpZiAoaW5mby5sYWJlbCkgZmllbGQudGl0bGUgPSBpbmZvLmxhYmVsXG4gICAgaWYgKGluZm8ubm90ZXMpIGZpZWxkLmRlc2NyaXB0aW9uID0gaW5mby5ub3Rlc1xuICB9XG5cbiAgY29uc3QgZmllbGRUeXBlID0gKGluZm8/LnR5cGVfb3ZlcnJpZGUgfHwgdHlwZSkudG9Mb3dlckNhc2UoKVxuICBzd2l0Y2ggKGZpZWxkVHlwZSkge1xuICAgIGNhc2UgXCJ0ZXh0XCI6XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgcmV0dXJuIHsgLi4uZmllbGQsIHR5cGU6IFwic3RyaW5nXCIgfSBhcyBTdHJpbmdGaWVsZFxuICAgIGNhc2UgXCJpbnRcIjpcbiAgICBjYXNlIFwiaW50ZWdlclwiOlxuICAgICAgcmV0dXJuIHsgLi4uZmllbGQsIHR5cGU6IFwiaW50ZWdlclwiIH0gYXMgSW50ZWdlckZpZWxkXG4gICAgY2FzZSBcIm51bWVyaWNcIjpcbiAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgY2FzZSBcImZsb2F0XCI6XG4gICAgICByZXR1cm4geyAuLi5maWVsZCwgdHlwZTogXCJudW1iZXJcIiB9IGFzIE51bWJlckZpZWxkXG4gICAgY2FzZSBcImJvb2xcIjpcbiAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgcmV0dXJuIHsgLi4uZmllbGQsIHR5cGU6IFwiYm9vbGVhblwiIH0gYXMgQm9vbGVhbkZpZWxkXG4gICAgY2FzZSBcImRhdGVcIjpcbiAgICAgIHJldHVybiB7IC4uLmZpZWxkLCB0eXBlOiBcImRhdGVcIiB9IGFzIERhdGVGaWVsZFxuICAgIGNhc2UgXCJ0aW1lXCI6XG4gICAgICByZXR1cm4geyAuLi5maWVsZCwgdHlwZTogXCJ0aW1lXCIgfSBhcyBUaW1lRmllbGRcbiAgICBjYXNlIFwidGltZXN0YW1wXCI6XG4gICAgY2FzZSBcImRhdGV0aW1lXCI6XG4gICAgICByZXR1cm4geyAuLi5maWVsZCwgdHlwZTogXCJkYXRldGltZVwiIH0gYXMgRGF0ZXRpbWVGaWVsZFxuICAgIGNhc2UgXCJqc29uXCI6XG4gICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgcmV0dXJuIHsgLi4uZmllbGQsIHR5cGU6IFwib2JqZWN0XCIgfSBhcyBPYmplY3RGaWVsZFxuICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgcmV0dXJuIHsgLi4uZmllbGQsIHR5cGU6IFwiYXJyYXlcIiB9IGFzIEFycmF5RmllbGRcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHsgLi4uZmllbGQsIHR5cGU6IFwiYW55XCIgfSBhcyBGaWVsZFxuICB9XG59XG4iXX0=