UNPKG

@dpkit/ckan

Version:

Fast TypeScript data management framework built on top of the Data Package standard and Polars DataFrames

53 lines 6.49 kB
/** * 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=