@dpkit/zenodo
Version:
Fast TypeScript data management framework built on top of the Data Package standard and Polars DataFrames
57 lines • 7.32 kB
JavaScript
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==