UNPKG

@dpkit/zenodo

Version:

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

57 lines 7.32 kB
import { normalizeZenodoResource } from "../../resource/index.js"; /** * Normalizes a Zenodo deposit to Frictionless Data package format * @param props Object containing the Zenodo deposit to normalize * @returns Normalized Package object */ export function normalizeZenodoPackage(zenodoPackage) { const datapackage = { name: `record-${zenodoPackage.id}`, resources: [], }; const metadata = zenodoPackage.metadata; // Basic metadata datapackage.title = metadata.title; datapackage.description = metadata.description; if (metadata.version) { datapackage.version = metadata.version; } // Process files/resources if (zenodoPackage.files && zenodoPackage.files.length > 0) { datapackage.resources = zenodoPackage.files.map(zenodoResource => normalizeZenodoResource(zenodoResource)); } // Process license information if (metadata.license) { const license = { name: metadata.license, }; datapackage.licenses = [license]; } // Process contributors if (metadata.creators && metadata.creators.length > 0) { const contributors = metadata.creators.map(creator => { const contributor = { title: creator.name, role: "author", }; if (creator.affiliation) { // Store affiliation in path as there's no dedicated field contributor.path = creator.affiliation; } return contributor; }); datapackage.contributors = contributors; } // Process keywords if (metadata.keywords && metadata.keywords.length > 0) { datapackage.keywords = metadata.keywords; } // Store publication date as created date if (metadata.publication_date) { datapackage.created = metadata.publication_date; } // DOI can be stored as a metadata property, but we don't have a direct mapping in the Package type // For now, we'll skip storing the DOI in the normalized package return datapackage; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZS9wcm9jZXNzL25vcm1hbGl6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUdqRTs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUFDLGFBQTRCO0lBQ2pFLE1BQU0sV0FBVyxHQUFZO1FBQzNCLElBQUksRUFBRSxVQUFVLGFBQWEsQ0FBQyxFQUFFLEVBQUU7UUFDbEMsU0FBUyxFQUFFLEVBQUU7S0FDZCxDQUFBO0lBRUQsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQTtJQUV2QyxpQkFBaUI7SUFDakIsV0FBVyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFBO0lBQ2xDLFdBQVcsQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQTtJQUU5QyxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNyQixXQUFXLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUE7SUFDeEMsQ0FBQztJQUVELDBCQUEwQjtJQUMxQixJQUFJLGFBQWEsQ0FBQyxLQUFLLElBQUksYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDMUQsV0FBVyxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUMvRCx1QkFBdUIsQ0FBQyxjQUFjLENBQUMsQ0FDeEMsQ0FBQTtJQUNILENBQUM7SUFFRCw4QkFBOEI7SUFDOUIsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDckIsTUFBTSxPQUFPLEdBQVk7WUFDdkIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxPQUFPO1NBQ3ZCLENBQUE7UUFDRCxXQUFXLENBQUMsUUFBUSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVELHVCQUF1QjtJQUN2QixJQUFJLFFBQVEsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDdEQsTUFBTSxZQUFZLEdBQWtCLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ2xFLE1BQU0sV0FBVyxHQUFnQjtnQkFDL0IsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJO2dCQUNuQixJQUFJLEVBQUUsUUFBUTthQUNmLENBQUE7WUFFRCxJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDeEIsMERBQTBEO2dCQUMxRCxXQUFXLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUE7WUFDeEMsQ0FBQztZQUVELE9BQU8sV0FBVyxDQUFBO1FBQ3BCLENBQUMsQ0FBQyxDQUFBO1FBRUYsV0FBVyxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUE7SUFDekMsQ0FBQztJQUVELG1CQUFtQjtJQUNuQixJQUFJLFFBQVEsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDdEQsV0FBVyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFBO0lBQzFDLENBQUM7SUFFRCx5Q0FBeUM7SUFDekMsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM5QixXQUFXLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQTtJQUNqRCxDQUFDO0lBRUQsbUdBQW1HO0lBQ25HLGdFQUFnRTtJQUVoRSxPQUFPLFdBQVcsQ0FBQTtBQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb250cmlidXRvciwgTGljZW5zZSwgUGFja2FnZSB9IGZyb20gXCJAZHBraXQvY29yZVwiXG5pbXBvcnQgeyBub3JtYWxpemVaZW5vZG9SZXNvdXJjZSB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZS9pbmRleC50c1wiXG5pbXBvcnQgdHlwZSB7IFplbm9kb1BhY2thZ2UgfSBmcm9tIFwiLi4vUGFja2FnZS50c1wiXG5cbi8qKlxuICogTm9ybWFsaXplcyBhIFplbm9kbyBkZXBvc2l0IHRvIEZyaWN0aW9ubGVzcyBEYXRhIHBhY2thZ2UgZm9ybWF0XG4gKiBAcGFyYW0gcHJvcHMgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIFplbm9kbyBkZXBvc2l0IHRvIG5vcm1hbGl6ZVxuICogQHJldHVybnMgTm9ybWFsaXplZCBQYWNrYWdlIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplWmVub2RvUGFja2FnZSh6ZW5vZG9QYWNrYWdlOiBaZW5vZG9QYWNrYWdlKTogUGFja2FnZSB7XG4gIGNvbnN0IGRhdGFwYWNrYWdlOiBQYWNrYWdlID0ge1xuICAgIG5hbWU6IGByZWNvcmQtJHt6ZW5vZG9QYWNrYWdlLmlkfWAsXG4gICAgcmVzb3VyY2VzOiBbXSxcbiAgfVxuXG4gIGNvbnN0IG1ldGFkYXRhID0gemVub2RvUGFja2FnZS5tZXRhZGF0YVxuXG4gIC8vIEJhc2ljIG1ldGFkYXRhXG4gIGRhdGFwYWNrYWdlLnRpdGxlID0gbWV0YWRhdGEudGl0bGVcbiAgZGF0YXBhY2thZ2UuZGVzY3JpcHRpb24gPSBtZXRhZGF0YS5kZXNjcmlwdGlvblxuXG4gIGlmIChtZXRhZGF0YS52ZXJzaW9uKSB7XG4gICAgZGF0YXBhY2thZ2UudmVyc2lvbiA9IG1ldGFkYXRhLnZlcnNpb25cbiAgfVxuXG4gIC8vIFByb2Nlc3MgZmlsZXMvcmVzb3VyY2VzXG4gIGlmICh6ZW5vZG9QYWNrYWdlLmZpbGVzICYmIHplbm9kb1BhY2thZ2UuZmlsZXMubGVuZ3RoID4gMCkge1xuICAgIGRhdGFwYWNrYWdlLnJlc291cmNlcyA9IHplbm9kb1BhY2thZ2UuZmlsZXMubWFwKHplbm9kb1Jlc291cmNlID0+XG4gICAgICBub3JtYWxpemVaZW5vZG9SZXNvdXJjZSh6ZW5vZG9SZXNvdXJjZSksXG4gICAgKVxuICB9XG5cbiAgLy8gUHJvY2VzcyBsaWNlbnNlIGluZm9ybWF0aW9uXG4gIGlmIChtZXRhZGF0YS5saWNlbnNlKSB7XG4gICAgY29uc3QgbGljZW5zZTogTGljZW5zZSA9IHtcbiAgICAgIG5hbWU6IG1ldGFkYXRhLmxpY2Vuc2UsXG4gICAgfVxuICAgIGRhdGFwYWNrYWdlLmxpY2Vuc2VzID0gW2xpY2Vuc2VdXG4gIH1cblxuICAvLyBQcm9jZXNzIGNvbnRyaWJ1dG9yc1xuICBpZiAobWV0YWRhdGEuY3JlYXRvcnMgJiYgbWV0YWRhdGEuY3JlYXRvcnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGNvbnRyaWJ1dG9yczogQ29udHJpYnV0b3JbXSA9IG1ldGFkYXRhLmNyZWF0b3JzLm1hcChjcmVhdG9yID0+IHtcbiAgICAgIGNvbnN0IGNvbnRyaWJ1dG9yOiBDb250cmlidXRvciA9IHtcbiAgICAgICAgdGl0bGU6IGNyZWF0b3IubmFtZSxcbiAgICAgICAgcm9sZTogXCJhdXRob3JcIixcbiAgICAgIH1cblxuICAgICAgaWYgKGNyZWF0b3IuYWZmaWxpYXRpb24pIHtcbiAgICAgICAgLy8gU3RvcmUgYWZmaWxpYXRpb24gaW4gcGF0aCBhcyB0aGVyZSdzIG5vIGRlZGljYXRlZCBmaWVsZFxuICAgICAgICBjb250cmlidXRvci5wYXRoID0gY3JlYXRvci5hZmZpbGlhdGlvblxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udHJpYnV0b3JcbiAgICB9KVxuXG4gICAgZGF0YXBhY2thZ2UuY29udHJpYnV0b3JzID0gY29udHJpYnV0b3JzXG4gIH1cblxuICAvLyBQcm9jZXNzIGtleXdvcmRzXG4gIGlmIChtZXRhZGF0YS5rZXl3b3JkcyAmJiBtZXRhZGF0YS5rZXl3b3Jkcy5sZW5ndGggPiAwKSB7XG4gICAgZGF0YXBhY2thZ2Uua2V5d29yZHMgPSBtZXRhZGF0YS5rZXl3b3Jkc1xuICB9XG5cbiAgLy8gU3RvcmUgcHVibGljYXRpb24gZGF0ZSBhcyBjcmVhdGVkIGRhdGVcbiAgaWYgKG1ldGFkYXRhLnB1YmxpY2F0aW9uX2RhdGUpIHtcbiAgICBkYXRhcGFja2FnZS5jcmVhdGVkID0gbWV0YWRhdGEucHVibGljYXRpb25fZGF0ZVxuICB9XG5cbiAgLy8gRE9JIGNhbiBiZSBzdG9yZWQgYXMgYSBtZXRhZGF0YSBwcm9wZXJ0eSwgYnV0IHdlIGRvbid0IGhhdmUgYSBkaXJlY3QgbWFwcGluZyBpbiB0aGUgUGFja2FnZSB0eXBlXG4gIC8vIEZvciBub3csIHdlJ2xsIHNraXAgc3RvcmluZyB0aGUgRE9JIGluIHRoZSBub3JtYWxpemVkIHBhY2thZ2VcblxuICByZXR1cm4gZGF0YXBhY2thZ2Vcbn1cbiJdfQ==