@dpkit/ckan
Version:
Fast TypeScript data management framework built on top of the Data Package standard and Polars DataFrames
59 lines • 5.65 kB
JavaScript
/**
* Denormalizes a Table Schema to a CKAN schema format
* @param props Object containing the Table Schema to denormalize
* @returns A denormalized CKAN Schema object
*/
export function denormalizeCkanSchema(schema) {
const fields = schema.fields.map(denormalizeCkanField);
return { fields };
}
function denormalizeCkanField(field) {
const { name, title, description, type } = field;
const ckanField = {
id: name,
type: mapTypeToCkan(type),
};
if (title || description) {
const fieldInfo = {};
if (title)
fieldInfo.label = title;
if (description)
fieldInfo.notes = description;
// Add type override if necessary
fieldInfo.type_override = mapTypeToCkan(type);
ckanField.info = fieldInfo;
}
return ckanField;
}
/**
* Maps Table Schema types to CKAN field types
*/
function mapTypeToCkan(type) {
switch (type) {
case "string":
return "text";
case "integer":
return "int";
case "number":
return "numeric";
case "boolean":
return "bool";
case "date":
return "date";
case "time":
return "time";
case "datetime":
return "timestamp";
case "object":
return "json";
case "array":
return "array";
case "geopoint":
return "geopoint";
case "geojson":
return "geojson";
default:
return "text";
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVub3JtYWxpemUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zY2hlbWEvcHJvY2Vzcy9kZW5vcm1hbGl6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQTs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLE1BQWM7SUFDbEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtJQUV0RCxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUE7QUFDbkIsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQUMsS0FBWTtJQUN4QyxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFBO0lBRWhELE1BQU0sU0FBUyxHQUFjO1FBQzNCLEVBQUUsRUFBRSxJQUFJO1FBQ1IsSUFBSSxFQUFFLGFBQWEsQ0FBQyxJQUFJLENBQUM7S0FDMUIsQ0FBQTtJQUVELElBQUksS0FBSyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sU0FBUyxHQUFrQixFQUFtQixDQUFBO1FBRXBELElBQUksS0FBSztZQUFFLFNBQVMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1FBQ2xDLElBQUksV0FBVztZQUFFLFNBQVMsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFBO1FBRTlDLGlDQUFpQztRQUNqQyxTQUFTLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUU3QyxTQUFTLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQTtJQUM1QixDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUE7QUFDbEIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxhQUFhLENBQUMsSUFBYTtJQUNsQyxRQUFRLElBQUksRUFBRSxDQUFDO1FBQ2IsS0FBSyxRQUFRO1lBQ1gsT0FBTyxNQUFNLENBQUE7UUFDZixLQUFLLFNBQVM7WUFDWixPQUFPLEtBQUssQ0FBQTtRQUNkLEtBQUssUUFBUTtZQUNYLE9BQU8sU0FBUyxDQUFBO1FBQ2xCLEtBQUssU0FBUztZQUNaLE9BQU8sTUFBTSxDQUFBO1FBQ2YsS0FBSyxNQUFNO1lBQ1QsT0FBTyxNQUFNLENBQUE7UUFDZixLQUFLLE1BQU07WUFDVCxPQUFPLE1BQU0sQ0FBQTtRQUNmLEtBQUssVUFBVTtZQUNiLE9BQU8sV0FBVyxDQUFBO1FBQ3BCLEtBQUssUUFBUTtZQUNYLE9BQU8sTUFBTSxDQUFBO1FBQ2YsS0FBSyxPQUFPO1lBQ1YsT0FBTyxPQUFPLENBQUE7UUFDaEIsS0FBSyxVQUFVO1lBQ2IsT0FBTyxVQUFVLENBQUE7UUFDbkIsS0FBSyxTQUFTO1lBQ1osT0FBTyxTQUFTLENBQUE7UUFDbEI7WUFDRSxPQUFPLE1BQU0sQ0FBQTtJQUNqQixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRmllbGQsIFNjaGVtYSB9IGZyb20gXCJAZHBraXQvY29yZVwiXG5pbXBvcnQgdHlwZSB7IENrYW5GaWVsZCwgQ2thbkZpZWxkSW5mbyB9IGZyb20gXCIuLi9GaWVsZC5qc1wiXG5pbXBvcnQgdHlwZSB7IENrYW5TY2hlbWEgfSBmcm9tIFwiLi4vU2NoZW1hLmpzXCJcblxuLyoqXG4gKiBEZW5vcm1hbGl6ZXMgYSBUYWJsZSBTY2hlbWEgdG8gYSBDS0FOIHNjaGVtYSBmb3JtYXRcbiAqIEBwYXJhbSBwcm9wcyBPYmplY3QgY29udGFpbmluZyB0aGUgVGFibGUgU2NoZW1hIHRvIGRlbm9ybWFsaXplXG4gKiBAcmV0dXJucyBBIGRlbm9ybWFsaXplZCBDS0FOIFNjaGVtYSBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbm9ybWFsaXplQ2thblNjaGVtYShzY2hlbWE6IFNjaGVtYSk6IENrYW5TY2hlbWEge1xuICBjb25zdCBmaWVsZHMgPSBzY2hlbWEuZmllbGRzLm1hcChkZW5vcm1hbGl6ZUNrYW5GaWVsZClcblxuICByZXR1cm4geyBmaWVsZHMgfVxufVxuXG5mdW5jdGlvbiBkZW5vcm1hbGl6ZUNrYW5GaWVsZChmaWVsZDogRmllbGQpOiBDa2FuRmllbGQge1xuICBjb25zdCB7IG5hbWUsIHRpdGxlLCBkZXNjcmlwdGlvbiwgdHlwZSB9ID0gZmllbGRcblxuICBjb25zdCBja2FuRmllbGQ6IENrYW5GaWVsZCA9IHtcbiAgICBpZDogbmFtZSxcbiAgICB0eXBlOiBtYXBUeXBlVG9Da2FuKHR5cGUpLFxuICB9XG5cbiAgaWYgKHRpdGxlIHx8IGRlc2NyaXB0aW9uKSB7XG4gICAgY29uc3QgZmllbGRJbmZvOiBDa2FuRmllbGRJbmZvID0ge30gYXMgQ2thbkZpZWxkSW5mb1xuXG4gICAgaWYgKHRpdGxlKSBmaWVsZEluZm8ubGFiZWwgPSB0aXRsZVxuICAgIGlmIChkZXNjcmlwdGlvbikgZmllbGRJbmZvLm5vdGVzID0gZGVzY3JpcHRpb25cblxuICAgIC8vIEFkZCB0eXBlIG92ZXJyaWRlIGlmIG5lY2Vzc2FyeVxuICAgIGZpZWxkSW5mby50eXBlX292ZXJyaWRlID0gbWFwVHlwZVRvQ2thbih0eXBlKVxuXG4gICAgY2thbkZpZWxkLmluZm8gPSBmaWVsZEluZm9cbiAgfVxuXG4gIHJldHVybiBja2FuRmllbGRcbn1cblxuLyoqXG4gKiBNYXBzIFRhYmxlIFNjaGVtYSB0eXBlcyB0byBDS0FOIGZpZWxkIHR5cGVzXG4gKi9cbmZ1bmN0aW9uIG1hcFR5cGVUb0NrYW4odHlwZT86IHN0cmluZyk6IHN0cmluZyB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgIHJldHVybiBcInRleHRcIlxuICAgIGNhc2UgXCJpbnRlZ2VyXCI6XG4gICAgICByZXR1cm4gXCJpbnRcIlxuICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgIHJldHVybiBcIm51bWVyaWNcIlxuICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICByZXR1cm4gXCJib29sXCJcbiAgICBjYXNlIFwiZGF0ZVwiOlxuICAgICAgcmV0dXJuIFwiZGF0ZVwiXG4gICAgY2FzZSBcInRpbWVcIjpcbiAgICAgIHJldHVybiBcInRpbWVcIlxuICAgIGNhc2UgXCJkYXRldGltZVwiOlxuICAgICAgcmV0dXJuIFwidGltZXN0YW1wXCJcbiAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICByZXR1cm4gXCJqc29uXCJcbiAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgIHJldHVybiBcImFycmF5XCJcbiAgICBjYXNlIFwiZ2VvcG9pbnRcIjpcbiAgICAgIHJldHVybiBcImdlb3BvaW50XCJcbiAgICBjYXNlIFwiZ2VvanNvblwiOlxuICAgICAgcmV0dXJuIFwiZ2VvanNvblwiXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBcInRleHRcIlxuICB9XG59XG4iXX0=