diff --git a/src/index.ts b/src/index.ts index 4bb53bb..f559292 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,6 +1,7 @@ // export types useful to use this as a library export * from './types/docmap'; export { + VersionedPreprint, VersionedReviewedPreprint, ManuscriptData, ReviewType, diff --git a/src/parser/docmap-parser.test.ts b/src/parser/docmap-parser.test.ts index ad347b5..b70ef5f 100644 --- a/src/parser/docmap-parser.test.ts +++ b/src/parser/docmap-parser.test.ts @@ -4,6 +4,7 @@ import { ManuscriptData, ReviewType, VersionedReviewedPreprint, + VersionedPreprint, } from './docmap-parser'; import { fixtures } from '../test-fixtures/docmap-parser'; @@ -428,6 +429,22 @@ describe('docmap-parser', () => { }); }); + it('can parse a docmap with an inference of version of record from input/outputs', () => { + const parsedData = parseDocMap(fixtures.inferredVersionOfRecord()); + + expect(parsedData.versions.length).toStrictEqual(1); + expect(parsedData.versions[0]).toMatchObject({ + doi: 'vor/article1', + id: 'vor/article1', + publishedDate: new Date('2024-05-09'), + url: 'https://version-of-record', + content: [ + 'https://doi.org/version-of-record', + ], + versionIdentifier: '1', + }); + }); + it('inference of reviewed preprint from input/outputs', () => { const parsedData = parseDocMap(fixtures.inferredReviewedPreprint()); @@ -535,12 +552,14 @@ describe('docmap-parser', () => { const parsedData = parseDocMap(fixtures.preprintUrlAndContentDataInLaterSteps()); expect(parsedData.versions.length).toStrictEqual(1); - expect(parsedData.versions[0].preprint).toMatchObject({ - publishedDate: new Date('2023-06-23'), - url: 'http://somewhere.org/preprint/article1', - content: [ - 's3://somewhere-org-storage-bucket/preprint/article1.meca', - ], + expect(parsedData.versions[0]).toMatchObject({ + preprint: { + publishedDate: new Date('2023-06-23'), + url: 'http://somewhere.org/preprint/article1', + content: [ + 's3://somewhere-org-storage-bucket/preprint/article1.meca', + ], + }, }); }); @@ -549,8 +568,12 @@ describe('docmap-parser', () => { it('extracts license url if in an expression', () => { const parsedData = parseDocMap(fixtures.preprintRepublishedViaAssertion()); - expect(parsedData.versions[0].preprint.license).toStrictEqual('http://creativecommons.org/licenses/by/4.0/'); - expect(parsedData.versions[0].license).toStrictEqual('http://creativecommons.org/licenses/by/4.0/'); + expect(parsedData.versions[0]).toMatchObject({ + preprint: { + license: 'http://creativecommons.org/licenses/by/4.0/', + }, + license: 'http://creativecommons.org/licenses/by/4.0/', + }); }); it('extracts partOf, if present', () => { diff --git a/src/parser/docmap-parser.ts b/src/parser/docmap-parser.ts index e3164d0..b477eff 100644 --- a/src/parser/docmap-parser.ts +++ b/src/parser/docmap-parser.ts @@ -90,6 +90,10 @@ type RelatedContentItem = { thumbnail?: string, }; +export type VersionedPreprint = Preprint & { + versionIdentifier: string, +}; + export type VersionedReviewedPreprint = ReviewedPreprint & { versionIdentifier: string, }; @@ -106,7 +110,7 @@ export type Manuscript = { export type ManuscriptData = { id: string, manuscript?: Manuscript, - versions: VersionedReviewedPreprint[], + versions: Array, }; const getManuscriptFromExpression = (expression: Expression): Manuscript | false => { @@ -527,10 +531,10 @@ const parseDocMapJson = (docMapJson: string): DocMap => { return docMapStruct as DocMap; }; -export const finaliseVersions = (preprints: Array): { id: string, versions: VersionedReviewedPreprint[] } => { +export const finaliseVersions = (preprints: Array): { id: string, versions: Array } => { const versions = preprints.map((preprint, index) => ({ ...preprint, - versionIdentifier: preprint.versionIdentifier ?? preprint.preprint.versionIdentifier ?? `${index + 1}`, + versionIdentifier: preprint.versionIdentifier ?? (('preprint' in preprint) ? preprint.preprint.versionIdentifier : null) ?? `${index + 1}`, })); const { id } = preprints.slice(-1)[0];