UNPKG

@dpkit/ckan

Version:

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

73 lines 8.7 kB
import { normalizeCkanResource } from "../../resource/process/normalize.js"; /** * Normalizes a CKAN package to Frictionless Data package format * @param props Object containing the CKAN package to normalize * @returns Normalized Package object */ export function normalizeCkanPackage(ckanPackage) { const datapackage = { name: ckanPackage.name, resources: [], }; if (ckanPackage.title) { datapackage.title = ckanPackage.title; } if (ckanPackage.notes) { datapackage.description = ckanPackage.notes; } if (ckanPackage.version) { datapackage.version = ckanPackage.version; } // Process resources if (ckanPackage.resources && ckanPackage.resources.length > 0) { datapackage.resources = ckanPackage.resources.map(resource => normalizeCkanResource(resource)); } // Process license information if (ckanPackage.license_id) { const license = { name: ckanPackage.license_id, }; if (ckanPackage.license_title) { license.title = ckanPackage.license_title; } if (ckanPackage.license_url) { license.path = ckanPackage.license_url; } datapackage.licenses = [license]; } // Process contributors const contributors = []; // Add author if present if (ckanPackage.author) { const authorContributor = { title: ckanPackage.author, role: "author", }; if (ckanPackage.author_email) { authorContributor.email = ckanPackage.author_email; } contributors.push(authorContributor); } // Add maintainer if present if (ckanPackage.maintainer) { const maintainerContributor = { title: ckanPackage.maintainer, role: "maintainer", }; if (ckanPackage.maintainer_email) { maintainerContributor.email = ckanPackage.maintainer_email; } contributors.push(maintainerContributor); } if (contributors.length > 0) { datapackage.contributors = contributors; } if (ckanPackage.tags && ckanPackage.tags.length > 0) { datapackage.keywords = ckanPackage.tags.map(tag => tag.name); } if (ckanPackage.metadata_created) { datapackage.created = ckanPackage.metadata_created; } return datapackage; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZS9wcm9jZXNzL25vcm1hbGl6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQTtBQUczRTs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFdBQXdCO0lBQzNELE1BQU0sV0FBVyxHQUFZO1FBQzNCLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSTtRQUN0QixTQUFTLEVBQUUsRUFBRTtLQUNkLENBQUE7SUFFRCxJQUFJLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN0QixXQUFXLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUE7SUFDdkMsQ0FBQztJQUVELElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3RCLFdBQVcsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQTtJQUM3QyxDQUFDO0lBRUQsSUFBSSxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDeEIsV0FBVyxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFBO0lBQzNDLENBQUM7SUFFRCxvQkFBb0I7SUFDcEIsSUFBSSxXQUFXLENBQUMsU0FBUyxJQUFJLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzlELFdBQVcsQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FDM0QscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQ2hDLENBQUE7SUFDSCxDQUFDO0lBRUQsOEJBQThCO0lBQzlCLElBQUksV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzNCLE1BQU0sT0FBTyxHQUFZO1lBQ3ZCLElBQUksRUFBRSxXQUFXLENBQUMsVUFBVTtTQUM3QixDQUFBO1FBRUQsSUFBSSxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDOUIsT0FBTyxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFBO1FBQzNDLENBQUM7UUFFRCxJQUFJLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM1QixPQUFPLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUE7UUFDeEMsQ0FBQztRQUVELFdBQVcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBRUQsdUJBQXVCO0lBQ3ZCLE1BQU0sWUFBWSxHQUFrQixFQUFFLENBQUE7SUFFdEMsd0JBQXdCO0lBQ3hCLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLE1BQU0saUJBQWlCLEdBQWdCO1lBQ3JDLEtBQUssRUFBRSxXQUFXLENBQUMsTUFBTTtZQUN6QixJQUFJLEVBQUUsUUFBUTtTQUNmLENBQUE7UUFFRCxJQUFJLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM3QixpQkFBaUIsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQTtRQUNwRCxDQUFDO1FBRUQsWUFBWSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO0lBQ3RDLENBQUM7SUFFRCw0QkFBNEI7SUFDNUIsSUFBSSxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDM0IsTUFBTSxxQkFBcUIsR0FBZ0I7WUFDekMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxVQUFVO1lBQzdCLElBQUksRUFBRSxZQUFZO1NBQ25CLENBQUE7UUFFRCxJQUFJLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ2pDLHFCQUFxQixDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsZ0JBQWdCLENBQUE7UUFDNUQsQ0FBQztRQUVELFlBQVksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQTtJQUMxQyxDQUFDO0lBRUQsSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzVCLFdBQVcsQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFBO0lBQ3pDLENBQUM7SUFFRCxJQUFJLFdBQVcsQ0FBQyxJQUFJLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDcEQsV0FBVyxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUM5RCxDQUFDO0lBRUQsSUFBSSxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUNqQyxXQUFXLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQTtJQUNwRCxDQUFDO0lBRUQsT0FBTyxXQUFXLENBQUE7QUFDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29udHJpYnV0b3IsIFBhY2thZ2UgfSBmcm9tIFwiQGRwa2l0L2NvcmVcIlxuaW1wb3J0IHR5cGUgeyBMaWNlbnNlIH0gZnJvbSBcIkBkcGtpdC9jb3JlXCJcbmltcG9ydCB7IG5vcm1hbGl6ZUNrYW5SZXNvdXJjZSB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZS9wcm9jZXNzL25vcm1hbGl6ZS5qc1wiXG5pbXBvcnQgdHlwZSB7IENrYW5QYWNrYWdlIH0gZnJvbSBcIi4uL1BhY2thZ2UuanNcIlxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYSBDS0FOIHBhY2thZ2UgdG8gRnJpY3Rpb25sZXNzIERhdGEgcGFja2FnZSBmb3JtYXRcbiAqIEBwYXJhbSBwcm9wcyBPYmplY3QgY29udGFpbmluZyB0aGUgQ0tBTiBwYWNrYWdlIHRvIG5vcm1hbGl6ZVxuICogQHJldHVybnMgTm9ybWFsaXplZCBQYWNrYWdlIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplQ2thblBhY2thZ2UoY2thblBhY2thZ2U6IENrYW5QYWNrYWdlKTogUGFja2FnZSB7XG4gIGNvbnN0IGRhdGFwYWNrYWdlOiBQYWNrYWdlID0ge1xuICAgIG5hbWU6IGNrYW5QYWNrYWdlLm5hbWUsXG4gICAgcmVzb3VyY2VzOiBbXSxcbiAgfVxuXG4gIGlmIChja2FuUGFja2FnZS50aXRsZSkge1xuICAgIGRhdGFwYWNrYWdlLnRpdGxlID0gY2thblBhY2thZ2UudGl0bGVcbiAgfVxuXG4gIGlmIChja2FuUGFja2FnZS5ub3Rlcykge1xuICAgIGRhdGFwYWNrYWdlLmRlc2NyaXB0aW9uID0gY2thblBhY2thZ2Uubm90ZXNcbiAgfVxuXG4gIGlmIChja2FuUGFja2FnZS52ZXJzaW9uKSB7XG4gICAgZGF0YXBhY2thZ2UudmVyc2lvbiA9IGNrYW5QYWNrYWdlLnZlcnNpb25cbiAgfVxuXG4gIC8vIFByb2Nlc3MgcmVzb3VyY2VzXG4gIGlmIChja2FuUGFja2FnZS5yZXNvdXJjZXMgJiYgY2thblBhY2thZ2UucmVzb3VyY2VzLmxlbmd0aCA+IDApIHtcbiAgICBkYXRhcGFja2FnZS5yZXNvdXJjZXMgPSBja2FuUGFja2FnZS5yZXNvdXJjZXMubWFwKHJlc291cmNlID0+XG4gICAgICBub3JtYWxpemVDa2FuUmVzb3VyY2UocmVzb3VyY2UpLFxuICAgIClcbiAgfVxuXG4gIC8vIFByb2Nlc3MgbGljZW5zZSBpbmZvcm1hdGlvblxuICBpZiAoY2thblBhY2thZ2UubGljZW5zZV9pZCkge1xuICAgIGNvbnN0IGxpY2Vuc2U6IExpY2Vuc2UgPSB7XG4gICAgICBuYW1lOiBja2FuUGFja2FnZS5saWNlbnNlX2lkLFxuICAgIH1cblxuICAgIGlmIChja2FuUGFja2FnZS5saWNlbnNlX3RpdGxlKSB7XG4gICAgICBsaWNlbnNlLnRpdGxlID0gY2thblBhY2thZ2UubGljZW5zZV90aXRsZVxuICAgIH1cblxuICAgIGlmIChja2FuUGFja2FnZS5saWNlbnNlX3VybCkge1xuICAgICAgbGljZW5zZS5wYXRoID0gY2thblBhY2thZ2UubGljZW5zZV91cmxcbiAgICB9XG5cbiAgICBkYXRhcGFja2FnZS5saWNlbnNlcyA9IFtsaWNlbnNlXVxuICB9XG5cbiAgLy8gUHJvY2VzcyBjb250cmlidXRvcnNcbiAgY29uc3QgY29udHJpYnV0b3JzOiBDb250cmlidXRvcltdID0gW11cblxuICAvLyBBZGQgYXV0aG9yIGlmIHByZXNlbnRcbiAgaWYgKGNrYW5QYWNrYWdlLmF1dGhvcikge1xuICAgIGNvbnN0IGF1dGhvckNvbnRyaWJ1dG9yOiBDb250cmlidXRvciA9IHtcbiAgICAgIHRpdGxlOiBja2FuUGFja2FnZS5hdXRob3IsXG4gICAgICByb2xlOiBcImF1dGhvclwiLFxuICAgIH1cblxuICAgIGlmIChja2FuUGFja2FnZS5hdXRob3JfZW1haWwpIHtcbiAgICAgIGF1dGhvckNvbnRyaWJ1dG9yLmVtYWlsID0gY2thblBhY2thZ2UuYXV0aG9yX2VtYWlsXG4gICAgfVxuXG4gICAgY29udHJpYnV0b3JzLnB1c2goYXV0aG9yQ29udHJpYnV0b3IpXG4gIH1cblxuICAvLyBBZGQgbWFpbnRhaW5lciBpZiBwcmVzZW50XG4gIGlmIChja2FuUGFja2FnZS5tYWludGFpbmVyKSB7XG4gICAgY29uc3QgbWFpbnRhaW5lckNvbnRyaWJ1dG9yOiBDb250cmlidXRvciA9IHtcbiAgICAgIHRpdGxlOiBja2FuUGFja2FnZS5tYWludGFpbmVyLFxuICAgICAgcm9sZTogXCJtYWludGFpbmVyXCIsXG4gICAgfVxuXG4gICAgaWYgKGNrYW5QYWNrYWdlLm1haW50YWluZXJfZW1haWwpIHtcbiAgICAgIG1haW50YWluZXJDb250cmlidXRvci5lbWFpbCA9IGNrYW5QYWNrYWdlLm1haW50YWluZXJfZW1haWxcbiAgICB9XG5cbiAgICBjb250cmlidXRvcnMucHVzaChtYWludGFpbmVyQ29udHJpYnV0b3IpXG4gIH1cblxuICBpZiAoY29udHJpYnV0b3JzLmxlbmd0aCA+IDApIHtcbiAgICBkYXRhcGFja2FnZS5jb250cmlidXRvcnMgPSBjb250cmlidXRvcnNcbiAgfVxuXG4gIGlmIChja2FuUGFja2FnZS50YWdzICYmIGNrYW5QYWNrYWdlLnRhZ3MubGVuZ3RoID4gMCkge1xuICAgIGRhdGFwYWNrYWdlLmtleXdvcmRzID0gY2thblBhY2thZ2UudGFncy5tYXAodGFnID0+IHRhZy5uYW1lKVxuICB9XG5cbiAgaWYgKGNrYW5QYWNrYWdlLm1ldGFkYXRhX2NyZWF0ZWQpIHtcbiAgICBkYXRhcGFja2FnZS5jcmVhdGVkID0gY2thblBhY2thZ2UubWV0YWRhdGFfY3JlYXRlZFxuICB9XG5cbiAgcmV0dXJuIGRhdGFwYWNrYWdlXG59XG4iXX0=