UNPKG

@adisuper94/orcid

Version:
173 lines (172 loc) 6.45 kB
"use strict"; 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]; } }