| import { parse as parseDate } from '@citation-js/date'; | |
| import { parse as parseName } from '@citation-js/name'; | |
| function nameProps(person) { | |
| const { | |
| firstname, | |
| lastname, | |
| firstName: given = firstname, | |
| lastName: family = lastname | |
| } = person; | |
| if (given && family) { | |
| return { | |
| given, | |
| family | |
| }; | |
| } else if (person.name) { | |
| return parseName(person.name); | |
| } | |
| } | |
| const identifiers = ['PMID', 'PMCID', 'DOI', 'ISBN']; | |
| const journalIdentifiers = ['ISSN']; | |
| function idProps(input, identifiers) { | |
| const output = {}; | |
| for (const prop in input) { | |
| const upperCaseProp = prop.toUpperCase(); | |
| if (identifiers.includes(upperCaseProp)) { | |
| output[upperCaseProp] = input[prop]; | |
| } | |
| } | |
| if (input.identifier) { | |
| for (let { | |
| id, | |
| type = '' | |
| } of input.identifier) { | |
| type = type.toUpperCase(); | |
| if (identifiers.includes(type)) { | |
| output[type] = id; | |
| } | |
| } | |
| } | |
| return output; | |
| } | |
| const typeMap = { | |
| article: 'article', | |
| book: 'book', | |
| booklet: 'book', | |
| proceedings: 'book', | |
| mastersthesis: 'thesis', | |
| inbook: 'chapter', | |
| incollection: 'chapter', | |
| conference: 'paper-conference', | |
| inproceedings: 'paper-conference', | |
| manual: 'report', | |
| misc: 'document', | |
| online: 'website', | |
| patent: 'patent', | |
| phdthesis: 'thesis', | |
| techreport: 'report', | |
| unpublished: 'manuscript' | |
| }; | |
| function quickscrapeSpecificProps() { | |
| return { | |
| type: 'article-journal' | |
| }; | |
| } | |
| function generalProps(input) { | |
| const output = { | |
| type: typeMap[input.type] || 'document', | |
| title: input.title | |
| }; | |
| if (input.author) { | |
| output.author = input.author.map(nameProps).filter(Boolean); | |
| } | |
| if (input.editor) { | |
| output.editor = input.editor.map(nameProps).filter(Boolean); | |
| } | |
| if (input.reviewer) { | |
| if (input.author) { | |
| output['reviewed-author'] = output.author; | |
| } | |
| output.author = input.reviewer.map(nameProps).filter(Boolean); | |
| } | |
| if (Array.isArray(input.keywords)) { | |
| output.keyword = input.keywords.join(); | |
| } else if (input.keywords) { | |
| output.keyword = input.keywords; | |
| } | |
| if (input.publisher) { | |
| output.publisher = input.publisher.name || input.publisher; | |
| } | |
| if (input.date && input.date.published) { | |
| output.issued = parseDate(input.date.published); | |
| } else if (input.year) { | |
| output.issued = { | |
| 'date-parts': [[+input.year]] | |
| }; | |
| } | |
| if (input.date && input.date.submitted) { | |
| output.submitted = parseDate(input.date.submitted); | |
| } | |
| if (input.journal) { | |
| const journal = input.journal; | |
| if (journal.name) { | |
| output['container-title'] = journal.name; | |
| } | |
| if (journal.volume) { | |
| output.volume = journal.volume; | |
| } | |
| if (journal.issue) { | |
| output.issue = journal.issue; | |
| } | |
| Object.assign(output, idProps(journal, journalIdentifiers)); | |
| if (journal.firstpage) { | |
| output['page-first'] = journal.firstpage; | |
| } | |
| if (journal.pages) { | |
| output.page = journal.pages.replace('--', '-'); | |
| } else if (journal.firstpage && journal.lastpage) { | |
| output.page = journal.firstpage + '-' + journal.lastpage; | |
| } | |
| } | |
| if (input.link && typeof input.link[0] === 'object') { | |
| output.URL = input.link[0].url; | |
| } | |
| Object.assign(output, idProps(input, identifiers)); | |
| if (input.cid) { | |
| output.id = input.cid; | |
| } else if (output.DOI) { | |
| output.id = output.DOI; | |
| } | |
| return output; | |
| } | |
| const parseContentMine = function (data) { | |
| return Object.assign(generalProps(data), quickscrapeSpecificProps(data)); | |
| }; | |
| const parseBibJson = function (data) { | |
| return generalProps(data); | |
| }; | |
| export { parseContentMine as quickscrapeRecord, parseBibJson as record }; |
Xet Storage Details
- Size:
- 3.64 kB
- Xet hash:
- ccf34ea25d72017932494c232222db62514d97433d06a0da4688815cc5d8a39c
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.