@adisuper94/orcid
Version:
ORCID API client
173 lines (172 loc) • 6.45 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.tryCatch = tryCatch;
exports.parseEmploymentResp = parseEmploymentResp;
exports.parseEducationResp = parseEducationResp;
const mini_1 = require("@zod/mini");
mini_1.z.config(mini_1.z.locales.en());
const DisambiguatedOrgSchema = mini_1.z.pipe(mini_1.z.interface({
"disambiguated-organization-identifier": mini_1.z.string(),
"disambiguation-source": mini_1.z.string(),
}), mini_1.z.transform((disambiguatedOrg) => ({
id: disambiguatedOrg["disambiguated-organization-identifier"],
source: disambiguatedOrg["disambiguation-source"],
})));
function _testTypeDisambiguatedOrg(disambiguatedOrg) {
return disambiguatedOrg;
}
function __testTypeDisambiguatedOrg(disambiguatedOrg) {
return disambiguatedOrg;
}
const OrgSchema = mini_1.z.pipe(mini_1.z.interface({
name: mini_1.z.string(),
address: mini_1.z.interface({
city: mini_1.z.nullable(mini_1.z.string()),
region: mini_1.z.nullable(mini_1.z.string()),
"country?": mini_1.z.string(),
}),
"disambiguated-organization": mini_1.z.nullable(DisambiguatedOrgSchema),
}), mini_1.z.transform((org) => {
const { "disambiguated-organization": _, ...rest } = org;
const disambiguatedOrg = org["disambiguated-organization"];
return {
...rest,
disambiguatedOrg,
};
}));
function _testTypeOrg(org) {
return org;
}
function __testTypeOrg(org) {
return org;
}
const SourceOrcidSchema = mini_1.z.interface({
uri: mini_1.z.string(),
path: mini_1.z.string(),
host: mini_1.z.string(),
});
function _testTypeSourceOrcid(sourceOrcid) {
return sourceOrcid;
}
function __testTypeSourceOrcid(sourceOrcid) {
return sourceOrcid;
}
const SourceSchema = mini_1.z.pipe(mini_1.z.interface({
"orcid?": SourceOrcidSchema,
"source-client-id": mini_1.z.nullable(mini_1.z.string()),
"source-name": mini_1.z.interface({
value: mini_1.z.string(),
}),
}), mini_1.z.transform((source) => {
const name = source["source-name"].value;
const clientId = source["source-client-id"];
const orcid = source.orcid;
const transformedSource = { orcid, clientId, name };
return transformedSource;
}));
function _testTypeSource(source) {
return source;
}
function __testTypeSource(source) {
return source;
}
const DateSchema = mini_1.z.pipe(mini_1.z.interface({
year: mini_1.z.interface({
value: mini_1.z.coerce.number(),
}),
month: mini_1.z.nullish(mini_1.z.interface({
value: mini_1.z.coerce.number(),
})),
day: mini_1.z.nullish(mini_1.z.interface({
value: mini_1.z.coerce.number(),
})),
}), mini_1.z.transform((date) => {
const year = date.year.value;
return new Date(year, date.month?.value ?? 0, date.day?.value ?? 1);
}));
const AffiliationGroupSchema = mini_1.z.pipe(mini_1.z.interface({
"put-code": mini_1.z.number(),
"department-name?": mini_1.z.nullable(mini_1.z.string()),
"role-title": mini_1.z.nullable(mini_1.z.string()),
"start-date": mini_1.z.nullable(DateSchema),
"end-date": mini_1.z.nullable(DateSchema),
path: mini_1.z.string(),
visibility: mini_1.z.string(),
organization: mini_1.z.nullable(OrgSchema),
url: mini_1.z.nullable(mini_1.z.interface({ value: mini_1.z.string().check(mini_1.z.url()) })),
source: SourceSchema,
"created-date": mini_1.z.pipe(mini_1.z.interface({ value: mini_1.z.number().check(mini_1.z.minimum(0)) }), mini_1.z.transform((time) => new Date(time.value))),
"last-modified-date": mini_1.z.pipe(mini_1.z.interface({ value: mini_1.z.number().check(mini_1.z.minimum(0)) }), mini_1.z.transform((time) => new Date(time.value))),
}), mini_1.z.transform((emp) => {
const { "put-code": putCode, "role-title": roleTitle, "start-date": startDate, "end-date": endDate, "department-name": departmentName, path, visibility, } = emp;
const org = emp.organization;
const source = emp.source;
const url = emp.url?.value;
const affiliationGroup = {
source,
putCode,
departmentName: departmentName ?? undefined,
roleTitle: roleTitle ?? undefined,
startDate: startDate ?? undefined,
endDate: endDate ?? undefined,
path,
visibility,
org: org ?? undefined,
url: url ?? undefined,
createdDate: emp["created-date"],
modifiedDate: emp["last-modified-date"],
};
return affiliationGroup;
}));
function _testTypeAffiliationGroup(affiliationGroup) {
return affiliationGroup;
}
function __testTypeAffiliationGroup(affiliationGroup) {
return affiliationGroup;
}
const EmploymentRespSchema = mini_1.z.interface({
"last-modified-date": mini_1.z.interface({ value: mini_1.z.number().check(mini_1.z.minimum(0)) }),
path: mini_1.z.string(),
"affiliation-group": mini_1.z.array(mini_1.z.interface({
summaries: mini_1.z.array(mini_1.z.pipe(mini_1.z.interface({ "employment-summary": AffiliationGroupSchema }), mini_1.z.transform((empSummary) => empSummary["employment-summary"]))),
})),
});
const EducationRespSchema = mini_1.z.interface({
"last-modified-date": mini_1.z.nullable(mini_1.z.interface({ value: mini_1.z.number().check(mini_1.z.minimum(0)) })),
path: mini_1.z.string(),
"affiliation-group": mini_1.z.array(mini_1.z.interface({
summaries: mini_1.z.array(mini_1.z.pipe(mini_1.z.interface({ "education-summary": AffiliationGroupSchema }), mini_1.z.transform((empSummary) => empSummary["education-summary"]))),
})),
});
async function tryCatch(promise) {
try {
const t = await promise;
return [t, undefined];
}
catch (err) {
if (err instanceof Error) {
return [undefined, err];
}
return [undefined, new Error(String(err))];
}
}
function parseEmploymentResp(obj) {
const emp = EmploymentRespSchema.safeParse(obj);
if (emp.success) {
const empRecords = emp.data["affiliation-group"].map((ag) => ag.summaries[0]);
return [empRecords, undefined];
}
else {
return [undefined, emp.error];
}
}
function parseEducationResp(obj) {
const emp = EducationRespSchema.safeParse(obj);
if (emp.success) {
const empRecords = emp.data["affiliation-group"].map((ag) => ag.summaries[0]);
return [empRecords, undefined];
}
else {
return [undefined, emp.error];
}
}