citeclaw 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.md +152 -0
- package/app.js +318 -0
- package/config.dev.yaml +124 -0
- package/config.prod.yaml +123 -0
- package/config.yaml +0 -0
- package/lib/Citation.js +101 -0
- package/lib/CitoidError.js +61 -0
- package/lib/CitoidRequest.js +150 -0
- package/lib/CitoidResponse.js +44 -0
- package/lib/CitoidService.js +1118 -0
- package/lib/Exporter.js +1052 -0
- package/lib/OutgoingRequestThrottle.js +96 -0
- package/lib/Scraper.js +617 -0
- package/lib/Translator.js +76 -0
- package/lib/ZoteroService.js +220 -0
- package/lib/api-util.js +125 -0
- package/lib/external-apis/CrossRefService.js +122 -0
- package/lib/external-apis/OpenAlexService.js +245 -0
- package/lib/external-apis/PubMedService.js +82 -0
- package/lib/external-apis/SemanticScholarService.js +221 -0
- package/lib/external-apis/WaybackMachine.js +92 -0
- package/lib/hostIsAllowed.js +128 -0
- package/lib/swagger-ui.js +104 -0
- package/lib/translators/README.md +12 -0
- package/lib/translators/bePress.js +319 -0
- package/lib/translators/coins.js +360 -0
- package/lib/translators/crossRef.js +485 -0
- package/lib/translators/dublinCore.js +215 -0
- package/lib/translators/general.js +157 -0
- package/lib/translators/openGraph.js +177 -0
- package/lib/translators/util/index.js +209 -0
- package/lib/unshorten.js +109 -0
- package/lib/util.js +410 -0
- package/lib/zotero/cachedTypes.js +232 -0
- package/lib/zotero/typeSchemaData.js +366 -0
- package/package.json +121 -0
- package/routes/citoid.js +101 -0
- package/routes/info.js +81 -0
- package/routes/root.js +51 -0
- package/scripts/botcite.js +5021 -0
- package/scripts/citeclaw.js +10 -0
- package/server.js +12 -0
- package/spec.yaml +156 -0
- package/targets.yaml +2 -0
- package/vendor/translators-official/ABC News Australia.js +224 -0
- package/vendor/translators-official/ACLS Humanities EBook.js +165 -0
- package/vendor/translators-official/ACLWeb.js +600 -0
- package/vendor/translators-official/ACM Digital Library.js +708 -0
- package/vendor/translators-official/ACM Queue.js +391 -0
- package/vendor/translators-official/ACS Publications.js +633 -0
- package/vendor/translators-official/ADS Bibcode.js +664 -0
- package/vendor/translators-official/AEA Web.js +450 -0
- package/vendor/translators-official/AGRIS.js +311 -0
- package/vendor/translators-official/AIP.js +295 -0
- package/vendor/translators-official/AMS Journals.js +136 -0
- package/vendor/translators-official/AMS MathSciNet (Legacy).js +313 -0
- package/vendor/translators-official/AMS MathSciNet.js +288 -0
- package/vendor/translators-official/APA PsycNET.js +915 -0
- package/vendor/translators-official/APN.ru.js +132 -0
- package/vendor/translators-official/APS-Physics.js +204 -0
- package/vendor/translators-official/APS.js +542 -0
- package/vendor/translators-official/ARTFL Encyclopedie.js +283 -0
- package/vendor/translators-official/ARTnews.js +155 -0
- package/vendor/translators-official/ARTstor.js +619 -0
- package/vendor/translators-official/ASCE.js +199 -0
- package/vendor/translators-official/ASCO Meeting Library.js +153 -0
- package/vendor/translators-official/ASTIS.js +337 -0
- package/vendor/translators-official/ATS International Journal.js +290 -0
- package/vendor/translators-official/Access Engineering.js +384 -0
- package/vendor/translators-official/Access Medicine.js +343 -0
- package/vendor/translators-official/Access Science.js +391 -0
- package/vendor/translators-official/Adam Matthew Digital.js +405 -0
- package/vendor/translators-official/Agencia del ISBN.js +77 -0
- package/vendor/translators-official/Ahval News.js +309 -0
- package/vendor/translators-official/Air University Journals.js +236 -0
- package/vendor/translators-official/Airiti.js +423 -0
- package/vendor/translators-official/Alexander Street Press.js +198 -0
- package/vendor/translators-official/AllAfrica.js +291 -0
- package/vendor/translators-official/Alsharekh.js +242 -0
- package/vendor/translators-official/AlterNet.js +134 -0
- package/vendor/translators-official/Aluka.js +261 -0
- package/vendor/translators-official/Amazon.js +1043 -0
- package/vendor/translators-official/American Archive of Public Broadcasting.js +592 -0
- package/vendor/translators-official/American Institute of Aeronautics and Astronautics.js +210 -0
- package/vendor/translators-official/American Prospect.js +114 -0
- package/vendor/translators-official/Anarchist Library.js +382 -0
- package/vendor/translators-official/Ancestry.com US Federal Census.js +164 -0
- package/vendor/translators-official/Annual Reviews.js +329 -0
- package/vendor/translators-official/Antikvarium.hu.js +280 -0
- package/vendor/translators-official/AquaDocs.js +390 -0
- package/vendor/translators-official/Archeion.js +249 -0
- package/vendor/translators-official/Archiv fuer Sozialgeschichte.js +157 -0
- package/vendor/translators-official/Archive Ouverte en Sciences de l'Information et de la Communication (AOSIC).js +179 -0
- package/vendor/translators-official/Archives Canada.js +142 -0
- package/vendor/translators-official/Ariana News.js +203 -0
- package/vendor/translators-official/Art Institute of Chicago.js +279 -0
- package/vendor/translators-official/Artefacts Canada.js +192 -0
- package/vendor/translators-official/Artforum.js +438 -0
- package/vendor/translators-official/Atlanta Journal-Constitution.js +311 -0
- package/vendor/translators-official/Atypon Journals.js +1204 -0
- package/vendor/translators-official/AustLII and NZLII.js +604 -0
- package/vendor/translators-official/Australian Dictionary of Biography.js +196 -0
- package/vendor/translators-official/BAILII.js +176 -0
- package/vendor/translators-official/BBC Genome.js +254 -0
- package/vendor/translators-official/BBC.js +430 -0
- package/vendor/translators-official/BIBSYS.js +112 -0
- package/vendor/translators-official/BOCC.js +217 -0
- package/vendor/translators-official/BOE.js +229 -0
- package/vendor/translators-official/BOFiP-Impots.js +132 -0
- package/vendor/translators-official/Baidu Scholar.js +276 -0
- package/vendor/translators-official/Bangkok Post.js +216 -0
- package/vendor/translators-official/Baruch Foundation.js +175 -0
- package/vendor/translators-official/Beobachter.js +175 -0
- package/vendor/translators-official/Bezneng Gajit.js +92 -0
- package/vendor/translators-official/BibLaTeX.js +888 -0
- package/vendor/translators-official/BibTeX.js +4236 -0
- package/vendor/translators-official/Biblio.com.js +216 -0
- package/vendor/translators-official/Bibliontology RDF.js +1166 -0
- package/vendor/translators-official/Biblioteca Nacional de Maestros.js +213 -0
- package/vendor/translators-official/Bibliotheque et Archives Nationale du Quebec (Pistard).js +147 -0
- package/vendor/translators-official/Bibliotheque et Archives Nationales du Quebec.js +266 -0
- package/vendor/translators-official/Bibliotheque nationale de France.js +872 -0
- package/vendor/translators-official/BioMed Central.js +585 -0
- package/vendor/translators-official/BioOne.js +233 -0
- package/vendor/translators-official/Bioconductor.js +343 -0
- package/vendor/translators-official/Blaetter.js +192 -0
- package/vendor/translators-official/Blogger.js +244 -0
- package/vendor/translators-official/Bloomberg.js +205 -0
- package/vendor/translators-official/Bloomsbury Food Library.js +296 -0
- package/vendor/translators-official/Bluesky.js +195 -0
- package/vendor/translators-official/BnF ISBN.js +129 -0
- package/vendor/translators-official/Bookmarks.js +282 -0
- package/vendor/translators-official/Bookshop.org.js +223 -0
- package/vendor/translators-official/Boston Review.js +332 -0
- package/vendor/translators-official/Bosworth Toller's Anglo-Saxon Dictionary Online.js +496 -0
- package/vendor/translators-official/Bracero History Archive.js +200 -0
- package/vendor/translators-official/Brill.js +434 -0
- package/vendor/translators-official/Brukerhandboken.js +153 -0
- package/vendor/translators-official/Bryn Mawr Classical Review.js +303 -0
- package/vendor/translators-official/Bundesgesetzblatt.js +231 -0
- package/vendor/translators-official/Business Standard.js +151 -0
- package/vendor/translators-official/CABI - CAB Abstracts.js +317 -0
- package/vendor/translators-official/CAOD.js +260 -0
- package/vendor/translators-official/CBC.js +439 -0
- package/vendor/translators-official/CCfr (BnF).js +162 -0
- package/vendor/translators-official/CERN Document Server.js +277 -0
- package/vendor/translators-official/CEUR Workshop Proceedings.js +145 -0
- package/vendor/translators-official/CFF References.js +170 -0
- package/vendor/translators-official/CFF.js +113 -0
- package/vendor/translators-official/CIA World Factbook.js +128 -0
- package/vendor/translators-official/CLACSO.js +226 -0
- package/vendor/translators-official/CLASE.js +135 -0
- package/vendor/translators-official/CNKI.js +731 -0
- package/vendor/translators-official/COBISS.js +1945 -0
- package/vendor/translators-official/COinS.js +336 -0
- package/vendor/translators-official/CQ Press.js +418 -0
- package/vendor/translators-official/CROSBI.js +227 -0
- package/vendor/translators-official/CSIRO Publishing.js +139 -0
- package/vendor/translators-official/CSL JSON.js +203 -0
- package/vendor/translators-official/CSV.js +294 -0
- package/vendor/translators-official/Cairn.info.js +368 -0
- package/vendor/translators-official/CalMatters.js +228 -0
- package/vendor/translators-official/Calisphere.js +355 -0
- package/vendor/translators-official/Camara Brasileira do Livro ISBN.js +842 -0
- package/vendor/translators-official/Cambridge Core.js +580 -0
- package/vendor/translators-official/Cambridge Engage Preprints.js +276 -0
- package/vendor/translators-official/CanLII.js +284 -0
- package/vendor/translators-official/Canada.com.js +171 -0
- package/vendor/translators-official/Canadian Letters and Images.js +148 -0
- package/vendor/translators-official/Canadiana.ca.js +196 -0
- package/vendor/translators-official/Cascadilla Proceedings Project.js +390 -0
- package/vendor/translators-official/Cell Press.js +516 -0
- package/vendor/translators-official/Central and Eastern European Online Library Journals.js +313 -0
- package/vendor/translators-official/Champlain Society - Collection.js +220 -0
- package/vendor/translators-official/ChatGPT.js +185 -0
- package/vendor/translators-official/Chicago Journal of Theoretical Computer Science.js +203 -0
- package/vendor/translators-official/Christian Science Monitor.js +148 -0
- package/vendor/translators-official/Chronicling America.js +131 -0
- package/vendor/translators-official/CiNii Research.js +168 -0
- package/vendor/translators-official/Citavi 5 XML.js +516 -0
- package/vendor/translators-official/CiteSeer.js +196 -0
- package/vendor/translators-official/Citizen Lab.js +347 -0
- package/vendor/translators-official/Civilization.ca.js +146 -0
- package/vendor/translators-official/Climate Change and Human Health Literature Portal.js +283 -0
- package/vendor/translators-official/Clinical Key.js +367 -0
- package/vendor/translators-official/Code4Lib Journal.js +143 -0
- package/vendor/translators-official/Colorado State Legislature.js +215 -0
- package/vendor/translators-official/Columbia University Press.js +238 -0
- package/vendor/translators-official/Common-Place.js +218 -0
- package/vendor/translators-official/Computer History Museum Archive.js +1319 -0
- package/vendor/translators-official/Copernicus.js +461 -0
- package/vendor/translators-official/Cornell LII.js +252 -0
- package/vendor/translators-official/Cornell University Press.js +235 -0
- package/vendor/translators-official/CourtListener.js +265 -0
- package/vendor/translators-official/Crossref REST.js +1757 -0
- package/vendor/translators-official/Crossref Unixref XML.js +965 -0
- package/vendor/translators-official/Current Affairs.js +160 -0
- package/vendor/translators-official/DABI.js +476 -0
- package/vendor/translators-official/DAI-Zenon.js +392 -0
- package/vendor/translators-official/DART-Europe.js +176 -0
- package/vendor/translators-official/DBLP Computer Science Bibliography.js +462 -0
- package/vendor/translators-official/DBpia.js +233 -0
- package/vendor/translators-official/DEPATISnet.js +373 -0
- package/vendor/translators-official/DOAJ.js +243 -0
- package/vendor/translators-official/DOI Content Negotiation.js +352 -0
- package/vendor/translators-official/DOI.js +322 -0
- package/vendor/translators-official/DPLA.js +425 -0
- package/vendor/translators-official/DSpace Intermediate Metadata.js +208 -0
- package/vendor/translators-official/Dagens Nyheter.js +369 -0
- package/vendor/translators-official/Dagstuhl Research Online Publication Server.js +276 -0
- package/vendor/translators-official/Dar Almandumah.js +253 -0
- package/vendor/translators-official/Data.gov.js +225 -0
- package/vendor/translators-official/Databrary.js +184 -0
- package/vendor/translators-official/Datacite JSON.js +1182 -0
- package/vendor/translators-official/Dataverse.js +418 -0
- package/vendor/translators-official/Daum News.js +139 -0
- package/vendor/translators-official/De Gruyter Brill.js +460 -0
- package/vendor/translators-official/Defense Technical Information Center.js +146 -0
- package/vendor/translators-official/Delpher.js +413 -0
- package/vendor/translators-official/Demographic Research.js +164 -0
- package/vendor/translators-official/Denik CZ.js +273 -0
- package/vendor/translators-official/Der Freitag.js +236 -0
- package/vendor/translators-official/Der Spiegel.js +479 -0
- package/vendor/translators-official/Desiring God.js +216 -0
- package/vendor/translators-official/Deutsche Fotothek.js +364 -0
- package/vendor/translators-official/Deutsche Nationalbibliothek.js +594 -0
- package/vendor/translators-official/Dialnet.js +258 -0
- package/vendor/translators-official/Die Zeit.js +378 -0
- package/vendor/translators-official/DigiZeitschriften.js +269 -0
- package/vendor/translators-official/Digital Humanities Quarterly.js +207 -0
- package/vendor/translators-official/Digital Spy.js +215 -0
- package/vendor/translators-official/Dimensions.js +233 -0
- package/vendor/translators-official/Douban.js +316 -0
- package/vendor/translators-official/Dreier Neuerscheinungsdienst.js +209 -0
- package/vendor/translators-official/DrugBank.ca.js +209 -0
- package/vendor/translators-official/Dryad Digital Repository.js +323 -0
- package/vendor/translators-official/Duke University Press Books.js +250 -0
- package/vendor/translators-official/E-periodica Switzerland.js +347 -0
- package/vendor/translators-official/EBSCO Discovery Layer.js +159 -0
- package/vendor/translators-official/EBSCOhost.js +592 -0
- package/vendor/translators-official/EIDR.js +184 -0
- package/vendor/translators-official/EPA National Library Catalog.js +245 -0
- package/vendor/translators-official/ERIC.js +986 -0
- package/vendor/translators-official/ESpacenet.js +465 -0
- package/vendor/translators-official/EUR-Lex.js +418 -0
- package/vendor/translators-official/Eastview.js +336 -0
- package/vendor/translators-official/Edinburgh University Press Journals.js +178 -0
- package/vendor/translators-official/Education Week.js +197 -0
- package/vendor/translators-official/El Comercio (Peru).js +347 -0
- package/vendor/translators-official/El Pais.js +262 -0
- package/vendor/translators-official/Electronic Colloquium on Computational Complexity.js +230 -0
- package/vendor/translators-official/Elicit.js +120 -0
- package/vendor/translators-official/Elsevier Health Journals.js +531 -0
- package/vendor/translators-official/Elsevier Pure.js +420 -0
- package/vendor/translators-official/Embedded Metadata.js +1978 -0
- package/vendor/translators-official/Emerald Insight.js +626 -0
- package/vendor/translators-official/Encyclopedia of Chicago.js +162 -0
- package/vendor/translators-official/Encyclopedia of Korean Culture.js +221 -0
- package/vendor/translators-official/Endnote XML.js +1407 -0
- package/vendor/translators-official/Engineering Village.js +139 -0
- package/vendor/translators-official/Envidat.js +331 -0
- package/vendor/translators-official/Epicurious.js +144 -0
- package/vendor/translators-official/Erudit.js +272 -0
- package/vendor/translators-official/Euclid.js +220 -0
- package/vendor/translators-official/EurasiaNet.js +109 -0
- package/vendor/translators-official/EurogamerUSgamer.js +380 -0
- package/vendor/translators-official/Europe PMC.js +448 -0
- package/vendor/translators-official/Evernote.js +104 -0
- package/vendor/translators-official/F1000 Research.js +655 -0
- package/vendor/translators-official/FAO Knowledge Repository.js +598 -0
- package/vendor/translators-official/FAOLEX Database.js +811 -0
- package/vendor/translators-official/FAZ.NET.js +231 -0
- package/vendor/translators-official/Fachportal Padagogik.js +839 -0
- package/vendor/translators-official/Factiva.js +302 -0
- package/vendor/translators-official/Failed Architecture.js +114 -0
- package/vendor/translators-official/Fairfax Australia.js +200 -0
- package/vendor/translators-official/Fatcat.js +425 -0
- package/vendor/translators-official/Figshare.js +191 -0
- package/vendor/translators-official/Financial Times.js +187 -0
- package/vendor/translators-official/Finna.js +357 -0
- package/vendor/translators-official/Flickr.js +318 -0
- package/vendor/translators-official/Foreign Affairs.js +485 -0
- package/vendor/translators-official/Foreign Policy.js +146 -0
- package/vendor/translators-official/FreeCite.js +95 -0
- package/vendor/translators-official/FreePatentsOnline.js +265 -0
- package/vendor/translators-official/Frieze.js +243 -0
- package/vendor/translators-official/Frontiers.js +667 -0
- package/vendor/translators-official/GMS German Medical Science.js +319 -0
- package/vendor/translators-official/GPO Access e-CFR.js +134 -0
- package/vendor/translators-official/Gale Databases.js +324 -0
- package/vendor/translators-official/GaleGDC.js +189 -0
- package/vendor/translators-official/Galegroup.js +327 -0
- package/vendor/translators-official/Gallica.js +194 -0
- package/vendor/translators-official/Game Studies.js +155 -0
- package/vendor/translators-official/GameSpot.js +199 -0
- package/vendor/translators-official/GameStar GamePro.js +198 -0
- package/vendor/translators-official/Gasyrlar Awazy.js +156 -0
- package/vendor/translators-official/Gemeinsamer Bibliotheksverbund ISBN.js +23 -0
- package/vendor/translators-official/Gene Ontology.js +128 -0
- package/vendor/translators-official/GitHub.js +501 -0
- package/vendor/translators-official/Globes.js +243 -0
- package/vendor/translators-official/Gmail.js +64 -0
- package/vendor/translators-official/Goodreads.js +219 -0
- package/vendor/translators-official/Google Books.js +552 -0
- package/vendor/translators-official/Google Gemini.js +116 -0
- package/vendor/translators-official/Google Patents.js +959 -0
- package/vendor/translators-official/Google Play.js +186 -0
- package/vendor/translators-official/Google Presentation.js +104 -0
- package/vendor/translators-official/Google Research.js +221 -0
- package/vendor/translators-official/Google Scholar.js +1361 -0
- package/vendor/translators-official/Gulag Many Days, Many Lives.js +179 -0
- package/vendor/translators-official/HAL.js +536 -0
- package/vendor/translators-official/HCSP.js +312 -0
- package/vendor/translators-official/HUDOC.js +650 -0
- package/vendor/translators-official/Haaretz.js +562 -0
- package/vendor/translators-official/Habr.js +232 -0
- package/vendor/translators-official/Handelszeitung.js +273 -0
- package/vendor/translators-official/Hanrei Watch.js +123 -0
- package/vendor/translators-official/Harper's Magazine.js +365 -0
- package/vendor/translators-official/Harvard Business Review.js +326 -0
- package/vendor/translators-official/Harvard Caselaw Access Project.js +244 -0
- package/vendor/translators-official/Harvard University Press Books.js +286 -0
- package/vendor/translators-official/HathiTrust.js +311 -0
- package/vendor/translators-official/HeinOnline.js +280 -0
- package/vendor/translators-official/Heise.js +200 -0
- package/vendor/translators-official/Herder.js +236 -0
- package/vendor/translators-official/HighBeam.js +198 -0
- package/vendor/translators-official/HighWire 2.0.js +1355 -0
- package/vendor/translators-official/HighWire.js +209 -0
- package/vendor/translators-official/Hindawi Publishers.js +177 -0
- package/vendor/translators-official/Hispanic-American Periodical Index.js +236 -0
- package/vendor/translators-official/Homeland Security Digital Library.js +426 -0
- package/vendor/translators-official/Hrvatska enciklopedija.js +118 -0
- package/vendor/translators-official/Huff Post.js +223 -0
- package/vendor/translators-official/Human Rights Watch.js +450 -0
- package/vendor/translators-official/IBISWorld.js +171 -0
- package/vendor/translators-official/IDEA ALM.js +536 -0
- package/vendor/translators-official/IEEE Computer Society.js +429 -0
- package/vendor/translators-official/IEEE Xplore.js +1000 -0
- package/vendor/translators-official/IETF.js +451 -0
- package/vendor/translators-official/IGN.js +136 -0
- package/vendor/translators-official/IMDb.js +566 -0
- package/vendor/translators-official/INSPIRE.js +247 -0
- package/vendor/translators-official/IPCC.js +757 -0
- package/vendor/translators-official/ISTC.js +181 -0
- package/vendor/translators-official/Idref.js +179 -0
- package/vendor/translators-official/In These Times.js +196 -0
- package/vendor/translators-official/Ined.js +558 -0
- package/vendor/translators-official/InfoTrac.js +279 -0
- package/vendor/translators-official/Informationssystem Medienpaedagogik.js +305 -0
- package/vendor/translators-official/IngentaConnect.js +312 -0
- package/vendor/translators-official/Inside Higher Ed.js +167 -0
- package/vendor/translators-official/Insignia OPAC.js +114 -0
- package/vendor/translators-official/Institute of Contemporary Art.js +180 -0
- package/vendor/translators-official/Institute of Physics.js +340 -0
- package/vendor/translators-official/Integrum.js +173 -0
- package/vendor/translators-official/Intellixir.js +264 -0
- package/vendor/translators-official/Inter-Research Science Center.js +185 -0
- package/vendor/translators-official/International Nuclear Information System.js +285 -0
- package/vendor/translators-official/Internet Archive Scholar.js +106 -0
- package/vendor/translators-official/Internet Archive Wayback Machine.js +152 -0
- package/vendor/translators-official/Internet Archive.js +552 -0
- package/vendor/translators-official/InvenioRDM.js +1250 -0
- package/vendor/translators-official/Isidore.js +235 -0
- package/vendor/translators-official/J-Stage.js +272 -0
- package/vendor/translators-official/JETS.js +122 -0
- package/vendor/translators-official/JISC Historical Texts.js +273 -0
- package/vendor/translators-official/JRC Publications Repository.js +569 -0
- package/vendor/translators-official/JSTOR.js +821 -0
- package/vendor/translators-official/Jahrbuch.js +213 -0
- package/vendor/translators-official/Japan Times Online.js +138 -0
- package/vendor/translators-official/Journal of Electronic Publishing.js +147 -0
- package/vendor/translators-official/Journal of Extension.js +288 -0
- package/vendor/translators-official/Journal of Machine Learning Research.js +441 -0
- package/vendor/translators-official/Journal of Religion and Society.js +174 -0
- package/vendor/translators-official/JurPC.js +274 -0
- package/vendor/translators-official/Juricaf.js +141 -0
- package/vendor/translators-official/Juris.js +728 -0
- package/vendor/translators-official/K10plus ISBN.js +386 -0
- package/vendor/translators-official/KStudy.js +632 -0
- package/vendor/translators-official/Kanopy.js +358 -0
- package/vendor/translators-official/Khaama Press.js +249 -0
- package/vendor/translators-official/KiM.js +259 -0
- package/vendor/translators-official/KitapYurdu.com.js +376 -0
- package/vendor/translators-official/Kommersant.js +174 -0
- package/vendor/translators-official/Korean National Library.js +621 -0
- package/vendor/translators-official/L'Annee Philologique.js +267 -0
- package/vendor/translators-official/LA Times.js +239 -0
- package/vendor/translators-official/LIBRIS ISBN.js +103 -0
- package/vendor/translators-official/LIVIVO.js +260 -0
- package/vendor/translators-official/LWN.net.js +350 -0
- package/vendor/translators-official/La Croix.js +237 -0
- package/vendor/translators-official/La Nacion (Argentina).js +231 -0
- package/vendor/translators-official/La Presse.js +218 -0
- package/vendor/translators-official/La Republica (Peru).js +174 -0
- package/vendor/translators-official/Lagen.nu.js +214 -0
- package/vendor/translators-official/Landesbibliographie Baden-Wurttemberg.js +324 -0
- package/vendor/translators-official/Lapham's Quarterly.js +1062 -0
- package/vendor/translators-official/Le Devoir.js +167 -0
- package/vendor/translators-official/Le Figaro.js +225 -0
- package/vendor/translators-official/Le Maitron.js +484 -0
- package/vendor/translators-official/Le Monde.js +245 -0
- package/vendor/translators-official/Le monde diplomatique.js +200 -0
- package/vendor/translators-official/Legifrance.js +641 -0
- package/vendor/translators-official/Legislative Insight.js +406 -0
- package/vendor/translators-official/Lexis+.js +264 -0
- package/vendor/translators-official/LexisNexis.js +505 -0
- package/vendor/translators-official/Libraries Tasmania.js +778 -0
- package/vendor/translators-official/Library Catalog (Aleph).js +385 -0
- package/vendor/translators-official/Library Catalog (Amicus).js +254 -0
- package/vendor/translators-official/Library Catalog (Aquabrowser).js +253 -0
- package/vendor/translators-official/Library Catalog (BiblioCommons).js +249 -0
- package/vendor/translators-official/Library Catalog (Blacklight).js +341 -0
- package/vendor/translators-official/Library Catalog (Capita Prism).js +162 -0
- package/vendor/translators-official/Library Catalog (DRA).js +203 -0
- package/vendor/translators-official/Library Catalog (Dynix).js +315 -0
- package/vendor/translators-official/Library Catalog (EBSCO Locate).js +442 -0
- package/vendor/translators-official/Library Catalog (Encore).js +211 -0
- package/vendor/translators-official/Library Catalog (InnoPAC).js +305 -0
- package/vendor/translators-official/Library Catalog (Koha).js +225 -0
- package/vendor/translators-official/Library Catalog (Mango).js +285 -0
- package/vendor/translators-official/Library Catalog (OPALS).js +200 -0
- package/vendor/translators-official/Library Catalog (PICA).js +2120 -0
- package/vendor/translators-official/Library Catalog (PICA2).js +331 -0
- package/vendor/translators-official/Library Catalog (Pika).js +488 -0
- package/vendor/translators-official/Library Catalog (Polaris).js +183 -0
- package/vendor/translators-official/Library Catalog (Quolto).js +320 -0
- package/vendor/translators-official/Library Catalog (RERO ILS).js +754 -0
- package/vendor/translators-official/Library Catalog (SIRSI eLibrary).js +407 -0
- package/vendor/translators-official/Library Catalog (SIRSI).js +452 -0
- package/vendor/translators-official/Library Catalog (SLIMS).js +146 -0
- package/vendor/translators-official/Library Catalog (TIND ILS).js +773 -0
- package/vendor/translators-official/Library Catalog (TLCYouSeeMore).js +132 -0
- package/vendor/translators-official/Library Catalog (TinREAD).js +277 -0
- package/vendor/translators-official/Library Catalog (VTLS).js +125 -0
- package/vendor/translators-official/Library Catalog (Visual Library 2021).js +765 -0
- package/vendor/translators-official/Library Catalog (Voyager 7).js +199 -0
- package/vendor/translators-official/Library Catalog (Voyager).js +212 -0
- package/vendor/translators-official/Library Genesis.js +337 -0
- package/vendor/translators-official/Library Hub Discover.js +359 -0
- package/vendor/translators-official/Library of Congress Digital Collections.js +869 -0
- package/vendor/translators-official/Library of Congress ISBN.js +86 -0
- package/vendor/translators-official/LingBuzz.js +359 -0
- package/vendor/translators-official/Lippincott Williams and Wilkins.js +341 -0
- package/vendor/translators-official/Literary Hub.js +950 -0
- package/vendor/translators-official/Litres.js +236 -0
- package/vendor/translators-official/LiveJournal.js +219 -0
- package/vendor/translators-official/London Review of Books.js +291 -0
- package/vendor/translators-official/LookUs.js +260 -0
- package/vendor/translators-official/Lulu.js +264 -0
- package/vendor/translators-official/MAB2.js +373 -0
- package/vendor/translators-official/MARC.js +1080 -0
- package/vendor/translators-official/MARCXML.js +489 -0
- package/vendor/translators-official/MCV.js +258 -0
- package/vendor/translators-official/MDPI Journals.js +356 -0
- package/vendor/translators-official/MEDLINEnbib.js +1561 -0
- package/vendor/translators-official/METS.js +384 -0
- package/vendor/translators-official/MIDAS Journals.js +343 -0
- package/vendor/translators-official/MIT Press Books.js +637 -0
- package/vendor/translators-official/MODS.js +2545 -0
- package/vendor/translators-official/MPG PuRe.js +541 -0
- package/vendor/translators-official/Mailman.js +136 -0
- package/vendor/translators-official/Mainichi Daily News.js +189 -0
- package/vendor/translators-official/Mastodon.js +198 -0
- package/vendor/translators-official/Matbugat.ru.js +110 -0
- package/vendor/translators-official/Max Planck Institute for the History of Science Virtual Laboratory Library.js +136 -0
- package/vendor/translators-official/Medium.js +208 -0
- package/vendor/translators-official/MetaLib.js +126 -0
- package/vendor/translators-official/Microbiology Society Journals.js +343 -0
- package/vendor/translators-official/Microsoft Academic.js +424 -0
- package/vendor/translators-official/Mikromarc.js +207 -0
- package/vendor/translators-official/Milli Kutuphane.js +244 -0
- package/vendor/translators-official/Musee du Louvre.js +265 -0
- package/vendor/translators-official/NASA ADS.js +889 -0
- package/vendor/translators-official/NASA NTRS.js +610 -0
- package/vendor/translators-official/NCBI Nucleotide.js +227 -0
- package/vendor/translators-official/NPR.js +341 -0
- package/vendor/translators-official/NRC Research Press.js +181 -0
- package/vendor/translators-official/NRC.nl.js +226 -0
- package/vendor/translators-official/NTSB Accident Reports.js +226 -0
- package/vendor/translators-official/NYPL Menus.js +275 -0
- package/vendor/translators-official/NYPL Research Catalog.js +458 -0
- package/vendor/translators-official/NYTimes.com.js +947 -0
- package/vendor/translators-official/NZZ.ch.js +272 -0
- package/vendor/translators-official/Nagoya University OPAC.js +336 -0
- package/vendor/translators-official/National Academies Press.js +243 -0
- package/vendor/translators-official/National Agriculture Library.js +524 -0
- package/vendor/translators-official/National Archives UK Case Law.js +509 -0
- package/vendor/translators-official/National Archives of Australia.js +522 -0
- package/vendor/translators-official/National Archives of South Africa.js +122 -0
- package/vendor/translators-official/National Bureau of Economic Research.js +363 -0
- package/vendor/translators-official/National Diet Library Catalogue.js +333 -0
- package/vendor/translators-official/National Gallery of Art - USA.js +149 -0
- package/vendor/translators-official/National Gallery of Australia.js +252 -0
- package/vendor/translators-official/National Library of Australia (new catalog).js +223 -0
- package/vendor/translators-official/National Library of Belarus.js +171 -0
- package/vendor/translators-official/National Library of Norway.js +310 -0
- package/vendor/translators-official/National Library of Poland ISBN.js +140 -0
- package/vendor/translators-official/National Post.js +186 -0
- package/vendor/translators-official/National Technical Reports Library.js +276 -0
- package/vendor/translators-official/National Transportation Library ROSA P.js +562 -0
- package/vendor/translators-official/Nature Publishing Group.js +3394 -0
- package/vendor/translators-official/Neural Information Processing Systems.js +385 -0
- package/vendor/translators-official/New Left Review.js +245 -0
- package/vendor/translators-official/New Zealand Herald.js +282 -0
- package/vendor/translators-official/Newlines Magazine.js +190 -0
- package/vendor/translators-official/News Corp Australia.js +251 -0
- package/vendor/translators-official/NewsBank.js +202 -0
- package/vendor/translators-official/NewsnetTamedia.js +509 -0
- package/vendor/translators-official/Noor Digital Library.js +267 -0
- package/vendor/translators-official/Note HTML.js +206 -0
- package/vendor/translators-official/Note Markdown.js +1638 -0
- package/vendor/translators-official/Notre Dame Philosophical Reviews.js +201 -0
- package/vendor/translators-official/OAPEN.js +331 -0
- package/vendor/translators-official/OCLC WorldCat FirstSearch.js +213 -0
- package/vendor/translators-official/OECD.js +216 -0
- package/vendor/translators-official/ORCID.js +104 -0
- package/vendor/translators-official/OSF Preprints.js +1287 -0
- package/vendor/translators-official/OSTI Energy Citations.js +202 -0
- package/vendor/translators-official/OVID Tagged.js +1226 -0
- package/vendor/translators-official/OZON.ru.js +465 -0
- package/vendor/translators-official/OhioLINK.js +43 -0
- package/vendor/translators-official/Old Bailey Online.js +315 -0
- package/vendor/translators-official/Open Conf.js +172 -0
- package/vendor/translators-official/Open Knowledge Repository.js +811 -0
- package/vendor/translators-official/Open WorldCat.js +1394 -0
- package/vendor/translators-official/OpenAlex JSON.js +740 -0
- package/vendor/translators-official/OpenAlex.js +444 -0
- package/vendor/translators-official/OpenEdition Books.js +155 -0
- package/vendor/translators-official/OpenEdition Journals.js +432 -0
- package/vendor/translators-official/Optical Society of America.js +562 -0
- package/vendor/translators-official/Optimization Online.js +418 -0
- package/vendor/translators-official/Ovid OCE.js +353 -0
- package/vendor/translators-official/Ovid.js +302 -0
- package/vendor/translators-official/Oxford Dictionaries Premium.js +194 -0
- package/vendor/translators-official/Oxford English Dictionary.js +122 -0
- package/vendor/translators-official/Oxford Music and Art Online.js +120 -0
- package/vendor/translators-official/Oxford Reference.js +202 -0
- package/vendor/translators-official/Oxford University Press.js +277 -0
- package/vendor/translators-official/PC Gamer.js +302 -0
- package/vendor/translators-official/PC Games.js +128 -0
- package/vendor/translators-official/PEI Archival Information Network.js +242 -0
- package/vendor/translators-official/PEP Web.js +165 -0
- package/vendor/translators-official/PKP Catalog Systems.js +1455 -0
- package/vendor/translators-official/PLoS Journals.js +284 -0
- package/vendor/translators-official/PRC History Review.js +298 -0
- package/vendor/translators-official/Pajhwok Afghan News.js +198 -0
- package/vendor/translators-official/Papers Past.js +509 -0
- package/vendor/translators-official/Paris Review.js +227 -0
- package/vendor/translators-official/Pastebin.js +199 -0
- package/vendor/translators-official/Patents - USPTO.js +210 -0
- package/vendor/translators-official/Peeters.js +587 -0
- package/vendor/translators-official/Perceiving Systems.js +350 -0
- package/vendor/translators-official/Perlego.js +416 -0
- package/vendor/translators-official/PhilPapers.js +233 -0
- package/vendor/translators-official/Philosopher's Imprint.js +169 -0
- package/vendor/translators-official/Pleade.js +329 -0
- package/vendor/translators-official/Polygon.js +270 -0
- package/vendor/translators-official/Potsdamer Neueste Nachrichten.js +188 -0
- package/vendor/translators-official/Premium Times.js +144 -0
- package/vendor/translators-official/Preprints.org.js +305 -0
- package/vendor/translators-official/Prime 9ja Online.js +402 -0
- package/vendor/translators-official/Primo 2018.js +126 -0
- package/vendor/translators-official/Primo Normalized XML.js +1075 -0
- package/vendor/translators-official/Primo.js +322 -0
- package/vendor/translators-official/ProMED.js +66 -0
- package/vendor/translators-official/ProQuest Ebook Central.js +226 -0
- package/vendor/translators-official/ProQuest PolicyFile.js +115 -0
- package/vendor/translators-official/ProQuest.js +2210 -0
- package/vendor/translators-official/Probing the Past.js +151 -0
- package/vendor/translators-official/Project Gutenberg.js +191 -0
- package/vendor/translators-official/Project MUSE.js +451 -0
- package/vendor/translators-official/Protein Data Bank.js +445 -0
- package/vendor/translators-official/PubFactory Journals.js +712 -0
- package/vendor/translators-official/PubMed Central.js +563 -0
- package/vendor/translators-official/PubMed XML.js +1240 -0
- package/vendor/translators-official/PubMed.js +1317 -0
- package/vendor/translators-official/PubPub.js +530 -0
- package/vendor/translators-official/Public Record Office Victoria.js +252 -0
- package/vendor/translators-official/Publications Office of the European Union.js +540 -0
- package/vendor/translators-official/Publications du Quebec.js +225 -0
- package/vendor/translators-official/PyPI.js +288 -0
- package/vendor/translators-official/Qatar Digital Library.js +802 -0
- package/vendor/translators-official/Queensland State Archives.js +303 -0
- package/vendor/translators-official/R-Packages.js +410 -0
- package/vendor/translators-official/RAND.js +283 -0
- package/vendor/translators-official/RDF.js +1782 -0
- package/vendor/translators-official/REDALYC.js +196 -0
- package/vendor/translators-official/RIS.js +7292 -0
- package/vendor/translators-official/RSC Publishing.js +250 -0
- package/vendor/translators-official/Radio Free Europe Radio Liberty.js +706 -0
- package/vendor/translators-official/RePEc - Econpapers.js +725 -0
- package/vendor/translators-official/RePEc - IDEAS.js +337 -0
- package/vendor/translators-official/Rechtspraak.nl.js +295 -0
- package/vendor/translators-official/RefWorks Tagged.js +1185 -0
- package/vendor/translators-official/ReferBibIX.js +463 -0
- package/vendor/translators-official/Regeringskansliet.js +89 -0
- package/vendor/translators-official/Research Square.js +335 -0
- package/vendor/translators-official/ResearchGate.js +394 -0
- package/vendor/translators-official/Retsinformation.js +348 -0
- package/vendor/translators-official/Reuters.js +255 -0
- package/vendor/translators-official/Rock, Paper, Shotgun.js +304 -0
- package/vendor/translators-official/Roll Call.js +173 -0
- package/vendor/translators-official/Russian State Library.js +1517 -0
- package/vendor/translators-official/SAE Papers.js +241 -0
- package/vendor/translators-official/SAGE Journals.js +429 -0
- package/vendor/translators-official/SAGE Knowledge.js +505 -0
- package/vendor/translators-official/SAILDART.js +364 -0
- package/vendor/translators-official/SALT Research Archives.js +196 -0
- package/vendor/translators-official/SFU IPinCH.js +946 -0
- package/vendor/translators-official/SIPRI.js +256 -0
- package/vendor/translators-official/SIRS Knowledge Source.js +546 -0
- package/vendor/translators-official/SLUB Dresden.js +300 -0
- package/vendor/translators-official/SORA.js +340 -0
- package/vendor/translators-official/SSOAR.js +399 -0
- package/vendor/translators-official/SSRN.js +235 -0
- package/vendor/translators-official/SVT Nyheter.js +381 -0
- package/vendor/translators-official/Sacramento Bee.js +274 -0
- package/vendor/translators-official/Safari Books Online.js +391 -0
- package/vendor/translators-official/Scholars Portal Journals.js +220 -0
- package/vendor/translators-official/Scholia.js +189 -0
- package/vendor/translators-official/Schweizer Radio und Fernsehen SRF.js +152 -0
- package/vendor/translators-official/SciELO.js +440 -0
- package/vendor/translators-official/ScienceDirect.js +1306 -0
- package/vendor/translators-official/Scopus.js +418 -0
- package/vendor/translators-official/Semantic Scholar.js +513 -0
- package/vendor/translators-official/Silverchair.js +886 -0
- package/vendor/translators-official/Slate.js +228 -0
- package/vendor/translators-official/SlideShare.js +112 -0
- package/vendor/translators-official/Springer Link.js +696 -0
- package/vendor/translators-official/Stack Exchange.js +134 -0
- package/vendor/translators-official/Standard Ebooks.js +198 -0
- package/vendor/translators-official/Stanford Encyclopedia of Philosophy.js +285 -0
- package/vendor/translators-official/Stanford University Press.js +343 -0
- package/vendor/translators-official/State Records Office of Western Australia.js +439 -0
- package/vendor/translators-official/Stitcher.js +141 -0
- package/vendor/translators-official/Store norske leksikon.js +291 -0
- package/vendor/translators-official/Stuff.co.nz.js +446 -0
- package/vendor/translators-official/Substack.js +237 -0
- package/vendor/translators-official/Sud Ouest.js +181 -0
- package/vendor/translators-official/Sueddeutsche.de.js +205 -0
- package/vendor/translators-official/Summon 2.js +117 -0
- package/vendor/translators-official/Superlib.js +647 -0
- package/vendor/translators-official/Svenska Dagbladet.js +274 -0
- package/vendor/translators-official/Sveriges radio.js +416 -0
- package/vendor/translators-official/TEI.js +648 -0
- package/vendor/translators-official/TV by the Numbers.js +194 -0
- package/vendor/translators-official/TVNZ.js +165 -0
- package/vendor/translators-official/Tagesspiegel.js +249 -0
- package/vendor/translators-official/Talis Aspire.js +316 -0
- package/vendor/translators-official/TalisPrism.js +445 -0
- package/vendor/translators-official/Tatknigafund.js +174 -0
- package/vendor/translators-official/Tatpressa.ru.js +121 -0
- package/vendor/translators-official/Taylor & Francis eBooks.js +334 -0
- package/vendor/translators-official/Taylor and Francis+NEJM.js +813 -0
- package/vendor/translators-official/Tesis Doctorals en Xarxa.js +233 -0
- package/vendor/translators-official/The Art Newspaper.js +268 -0
- package/vendor/translators-official/The Atlantic.js +535 -0
- package/vendor/translators-official/The Boston Globe.js +285 -0
- package/vendor/translators-official/The Chronicle of Higher Education.js +308 -0
- package/vendor/translators-official/The Daily Beast.js +183 -0
- package/vendor/translators-official/The Economic Times - The Times of India.js +305 -0
- package/vendor/translators-official/The Economist.js +207 -0
- package/vendor/translators-official/The Free Dictionary.js +58 -0
- package/vendor/translators-official/The Globe and Mail.js +241 -0
- package/vendor/translators-official/The Guardian.js +717 -0
- package/vendor/translators-official/The Hamilton Spectator.js +129 -0
- package/vendor/translators-official/The Hindu.js +318 -0
- package/vendor/translators-official/The Independent.js +184 -0
- package/vendor/translators-official/The Intercept.js +258 -0
- package/vendor/translators-official/The Met.js +276 -0
- package/vendor/translators-official/The Microfinance Gateway.js +174 -0
- package/vendor/translators-official/The Nation.js +188 -0
- package/vendor/translators-official/The National Archives (UK).js +242 -0
- package/vendor/translators-official/The New Republic.js +160 -0
- package/vendor/translators-official/The New York Review of Books.js +467 -0
- package/vendor/translators-official/The New Yorker.js +360 -0
- package/vendor/translators-official/The Open Library.js +220 -0
- package/vendor/translators-official/The Straits Times.js +528 -0
- package/vendor/translators-official/The Telegraph.js +337 -0
- package/vendor/translators-official/The Times and Sunday Times.js +180 -0
- package/vendor/translators-official/The Times of Israel.js +151 -0
- package/vendor/translators-official/TheMarker.js +108 -0
- package/vendor/translators-official/Theory of Computing.js +488 -0
- package/vendor/translators-official/ThesesFR.js +405 -0
- package/vendor/translators-official/Thieme.js +326 -0
- package/vendor/translators-official/Time.com.js +557 -0
- package/vendor/translators-official/TimesMachine.js +222 -0
- package/vendor/translators-official/Tony Blair Institute for Global Change.js +195 -0
- package/vendor/translators-official/Toronto Star.js +298 -0
- package/vendor/translators-official/Transportation Research Board.js +253 -0
- package/vendor/translators-official/Treesearch.js +535 -0
- package/vendor/translators-official/Trove.js +616 -0
- package/vendor/translators-official/Tumblr.js +179 -0
- package/vendor/translators-official/Twitter.js +413 -0
- package/vendor/translators-official/UChicago VuFind.js +907 -0
- package/vendor/translators-official/UNZ Print Archive.js +276 -0
- package/vendor/translators-official/UPCommons.js +227 -0
- package/vendor/translators-official/US National Archives Research Catalog.js +275 -0
- package/vendor/translators-official/USENIX.js +151 -0
- package/vendor/translators-official/Ubiquity Journals.js +228 -0
- package/vendor/translators-official/University Press Scholarship.js +301 -0
- package/vendor/translators-official/University of California Press Books.js +403 -0
- package/vendor/translators-official/University of Chicago Press Books.js +378 -0
- package/vendor/translators-official/University of Wisconsin-Madison Libraries Catalog.js +298 -0
- package/vendor/translators-official/Unqualified Dublin Core RDF.js +153 -0
- package/vendor/translators-official/UpToDate References.js +203 -0
- package/vendor/translators-official/Vanity Fair.js +242 -0
- package/vendor/translators-official/Verniana-Jules Verne Studies.js +190 -0
- package/vendor/translators-official/Verso Books.js +311 -0
- package/vendor/translators-official/Vice.js +445 -0
- package/vendor/translators-official/Victoria & Albert Museum.js +277 -0
- package/vendor/translators-official/Vimeo.js +188 -0
- package/vendor/translators-official/VoxEU.js +151 -0
- package/vendor/translators-official/WHO.js +458 -0
- package/vendor/translators-official/WIPO.js +189 -0
- package/vendor/translators-official/Wall Street Journal.js +809 -0
- package/vendor/translators-official/Wanfang Data.js +310 -0
- package/vendor/translators-official/Washington Monthly.js +195 -0
- package/vendor/translators-official/Washington Post.js +447 -0
- package/vendor/translators-official/Web of Science Nextgen.js +832 -0
- package/vendor/translators-official/Web of Science Tagged.js +1247 -0
- package/vendor/translators-official/Web of Science.js +228 -0
- package/vendor/translators-official/Welt Online.js +161 -0
- package/vendor/translators-official/WestLaw UK.js +190 -0
- package/vendor/translators-official/WikiLeaks PlusD.js +182 -0
- package/vendor/translators-official/Wikidata QuickStatements.js +324 -0
- package/vendor/translators-official/Wikidata.js +911 -0
- package/vendor/translators-official/Wikimedia Commons.js +285 -0
- package/vendor/translators-official/Wikipedia Citation Templates.js +432 -0
- package/vendor/translators-official/Wikipedia.js +385 -0
- package/vendor/translators-official/Wikisource.js +399 -0
- package/vendor/translators-official/Wikiwand.js +122 -0
- package/vendor/translators-official/Wiktionary.js +141 -0
- package/vendor/translators-official/Wildlife Biology in Practice.js +172 -0
- package/vendor/translators-official/Wiley Online Library.js +1412 -0
- package/vendor/translators-official/Wilson Center Digital Archive.js +321 -0
- package/vendor/translators-official/Winnipeg Free Press.js +204 -0
- package/vendor/translators-official/Wired.js +362 -0
- package/vendor/translators-official/Womennews.js +230 -0
- package/vendor/translators-official/World Digital Library.js +403 -0
- package/vendor/translators-official/World History Connected.js +185 -0
- package/vendor/translators-official/World Shakespeare Bibliography Online.js +595 -0
- package/vendor/translators-official/WorldCat Discovery Service.js +630 -0
- package/vendor/translators-official/XML ContextObject.js +274 -0
- package/vendor/translators-official/YPSF.js +224 -0
- package/vendor/translators-official/Yandex Books.js +265 -0
- package/vendor/translators-official/Ynet.js +171 -0
- package/vendor/translators-official/YouTube.js +209 -0
- package/vendor/translators-official/ZIPonline.js +267 -0
- package/vendor/translators-official/ZOBODAT.js +341 -0
- package/vendor/translators-official/Zotero RDF.js +588 -0
- package/vendor/translators-official/ZoteroBib.js +94 -0
- package/vendor/translators-official/arXiv.org.js +1100 -0
- package/vendor/translators-official/artnet.js +207 -0
- package/vendor/translators-official/beck-online.js +1339 -0
- package/vendor/translators-official/clinicaltrials.gov.js +331 -0
- package/vendor/translators-official/dLibra.js +367 -0
- package/vendor/translators-official/dejure.org.js +242 -0
- package/vendor/translators-official/dhistory.js +103 -0
- package/vendor/translators-official/digibib.net.js +245 -0
- package/vendor/translators-official/eLibrary.ru.js +867 -0
- package/vendor/translators-official/eLife.js +462 -0
- package/vendor/translators-official/eMJA.js +246 -0
- package/vendor/translators-official/eMedicine.js +123 -0
- package/vendor/translators-official/ePrint IACR.js +608 -0
- package/vendor/translators-official/ebrary.js +140 -0
- package/vendor/translators-official/etatar.ru.js +104 -0
- package/vendor/translators-official/feb-web.ru.js +167 -0
- package/vendor/translators-official/fishpond.co.nz.js +224 -0
- package/vendor/translators-official/fr-online.de.js +209 -0
- package/vendor/translators-official/govinfo.js +189 -0
- package/vendor/translators-official/informIT database.js +248 -0
- package/vendor/translators-official/io-port.js +68 -0
- package/vendor/translators-official/jurion.js +377 -0
- package/vendor/translators-official/mEDRA.js +597 -0
- package/vendor/translators-official/magazines.russ.ru.js +120 -0
- package/vendor/translators-official/medes.js +284 -0
- package/vendor/translators-official/newshub.co.nz.js +206 -0
- package/vendor/translators-official/newspapers.com.js +335 -0
- package/vendor/translators-official/openJur.js +161 -0
- package/vendor/translators-official/reddit.js +275 -0
- package/vendor/translators-official/sbn.it.js +186 -0
- package/vendor/translators-official/scinapse.js +273 -0
- package/vendor/translators-official/semantics Visual Library.js +643 -0
- package/vendor/translators-official/taz.de.js +200 -0
- package/vendor/translators-official/unAPI.js +481 -0
- package/vendor/translators-official/wiso.js +314 -0
- package/vendor/translators-official/zbMATH.js +278 -0
- package/vendor/translators-official/zotero.org.js +311 -0
- package/vendor/translators_CN/Angle.js +468 -0
- package/vendor/translators_CN/Baidu Baike.js +152 -0
- package/vendor/translators_CN/Baidu Scholar.js +639 -0
- package/vendor/translators_CN/Belt and Road Database.js +496 -0
- package/vendor/translators_CN/BiliBili.js +776 -0
- package/vendor/translators_CN/CCPINFO.js +416 -0
- package/vendor/translators_CN/CHINESE JOURNAL OF LAW.js +169 -0
- package/vendor/translators_CN/CNBKSY.js +385 -0
- package/vendor/translators_CN/CNKI CHKD.js +692 -0
- package/vendor/translators_CN/CNKI Gongjushu.js +271 -0
- package/vendor/translators_CN/CNKI Industry.js +726 -0
- package/vendor/translators_CN/CNKI Law.js +842 -0
- package/vendor/translators_CN/CNKI RefWorks.js +826 -0
- package/vendor/translators_CN/CNKI Refer.js +811 -0
- package/vendor/translators_CN/CNKI Scholar.js +656 -0
- package/vendor/translators_CN/CNKI TIKS.js +1028 -0
- package/vendor/translators_CN/CNKI e-Books.js +309 -0
- package/vendor/translators_CN/CNKI thinker.js +274 -0
- package/vendor/translators_CN/CNKI.js +2381 -0
- package/vendor/translators_CN/CNSDA.js +382 -0
- package/vendor/translators_CN/CQVIP Knowledge.js +969 -0
- package/vendor/translators_CN/CQVIP Qikan.js +418 -0
- package/vendor/translators_CN/CQVIP.js +686 -0
- package/vendor/translators_CN/CSDN.js +153 -0
- package/vendor/translators_CN/China Judgements Online.js +282 -0
- package/vendor/translators_CN/China Social Science Library.js +533 -0
- package/vendor/translators_CN/ChinaXiv.js +375 -0
- package/vendor/translators_CN/Cubox.js +246 -0
- package/vendor/translators_CN/Dangdang.js +176 -0
- package/vendor/translators_CN/Douban.js +984 -0
- package/vendor/translators_CN/Duxiu.js +746 -0
- package/vendor/translators_CN/E-Tiller.js +555 -0
- package/vendor/translators_CN/Encyclopedia of China 3rd.js +177 -0
- package/vendor/translators_CN/Founder.js +483 -0
- package/vendor/translators_CN/GFSOSO.js +694 -0
- package/vendor/translators_CN/Jd.js +235 -0
- package/vendor/translators_CN/Jikan Full Text Database.js +188 -0
- package/vendor/translators_CN/KouShare.js +139 -0
- package/vendor/translators_CN/LICENSE +661 -0
- package/vendor/translators_CN/Lawbank.js +818 -0
- package/vendor/translators_CN/MagTech.js +473 -0
- package/vendor/translators_CN/Modern History.js +788 -0
- package/vendor/translators_CN/NDLTD.js +404 -0
- package/vendor/translators_CN/NTU Digital Library of Buddhist Studies.js +957 -0
- package/vendor/translators_CN/National Public Service Platform for Standards Information - China.js +348 -0
- package/vendor/translators_CN/National Science and Technology Library - China.js +646 -0
- package/vendor/translators_CN/National Science and Technology Report Service - China.js +271 -0
- package/vendor/translators_CN/National Standards Open System - China.js +296 -0
- package/vendor/translators_CN/Ncpssd.js +555 -0
- package/vendor/translators_CN/PKULaw.js +1123 -0
- package/vendor/translators_CN/PatentStar.js +386 -0
- package/vendor/translators_CN/People's Daily Database.js +186 -0
- package/vendor/translators_CN/People's Daily Epaper.js +279 -0
- package/vendor/translators_CN/People's Daily Online.js +292 -0
- package/vendor/translators_CN/Pishu Database.js +383 -0
- package/vendor/translators_CN/ProQuestCN Thesis.js +329 -0
- package/vendor/translators_CN/Pss-System.js +199 -0
- package/vendor/translators_CN/PubScholar.js +588 -0
- package/vendor/translators_CN/Publications Data Center - China.js +1119 -0
- package/vendor/translators_CN/QStheory.js +251 -0
- package/vendor/translators_CN/RDFYBK.js +396 -0
- package/vendor/translators_CN/README.md +42 -0
- package/vendor/translators_CN/RHHZ.js +383 -0
- package/vendor/translators_CN/Rural Studies Database.js +402 -0
- package/vendor/translators_CN/SKCTK.js +177 -0
- package/vendor/translators_CN/Samson.js +768 -0
- package/vendor/translators_CN/SciEngine.js +450 -0
- package/vendor/translators_CN/Science Reading.js +338 -0
- package/vendor/translators_CN/Sina Weibo.js +254 -0
- package/vendor/translators_CN/Soopat.js +427 -0
- package/vendor/translators_CN/Spc.org.cn.js +275 -0
- package/vendor/translators_CN/Standard Full-text Database - NLC.js +230 -0
- package/vendor/translators_CN/SuperLib.js +757 -0
- package/vendor/translators_CN/TOAJ.js +422 -0
- package/vendor/translators_CN/Wanfang Data.js +3433 -0
- package/vendor/translators_CN/Wanfang Med.js +671 -0
- package/vendor/translators_CN/Web of Science Tagged.js +1341 -0
- package/vendor/translators_CN/Weixin.js +130 -0
- package/vendor/translators_CN/Wenjin.js +492 -0
- package/vendor/translators_CN/Xinhuanet.js +283 -0
- package/vendor/translators_CN/Yiigle.js +394 -0
- package/vendor/translators_CN/Zhihu.js +530 -0
- package/vendor/translators_CN/Zhihuiya.js +246 -0
- package/vendor/translators_CN/Zhizhen.js +869 -0
- package/vendor/translators_CN/chaoxingqikan.js +360 -0
- package/vendor/translators_CN/doc.taixueshu.js +355 -0
- package/vendor/translators_CN/dpaper.js +183 -0
- package/vendor/translators_CN/epaper.gmw.cn.js +286 -0
- package/vendor/translators_CN/flk.npc.gov.cn.js +344 -0
- package/vendor/translators_CN/gov.cn Policy.js +559 -0
- package/vendor/translators_CN/incoPat.js +195 -0
- package/vendor/translators_CN/pm.tsgyun.js +177 -0
- package/vendor/translators_CN/sanmin.com.tw.js +327 -0
- package/vendor/translators_CN/sharing.com.tw.js +333 -0
- package/vendor/translators_CN/stats.gov.cn.js +170 -0
- package/vendor/translators_CN/xiaoyuzhoufm.js +162 -0
- package/vendor/translators_CN/zhangqiaokeyan.js +1130 -0
- package/vendor/zotero/README.md +120 -0
- package/vendor/zotero/config/custom-environment-variables.json +3 -0
- package/vendor/zotero/config/default.json5 +16 -0
- package/vendor/zotero/config/production.json5 +7 -0
- package/vendor/zotero/config/test.json5 +4 -0
- package/vendor/zotero/modules/translate/README.md +43 -0
- package/vendor/zotero/modules/translate/src/debug.js +186 -0
- package/vendor/zotero/modules/translate/src/http.js +158 -0
- package/vendor/zotero/modules/translate/src/promise.js +73 -0
- package/vendor/zotero/modules/translate/src/proxy.js +354 -0
- package/vendor/zotero/modules/translate/src/rdf/identity.js +503 -0
- package/vendor/zotero/modules/translate/src/rdf/init.js +56 -0
- package/vendor/zotero/modules/translate/src/rdf/n3parser.js +1392 -0
- package/vendor/zotero/modules/translate/src/rdf/rdfparser.js +578 -0
- package/vendor/zotero/modules/translate/src/rdf/serialize.js +886 -0
- package/vendor/zotero/modules/translate/src/rdf/term.js +524 -0
- package/vendor/zotero/modules/translate/src/rdf/uri.js +147 -0
- package/vendor/zotero/modules/translate/src/repo.js +80 -0
- package/vendor/zotero/modules/translate/src/tlds.js +274 -0
- package/vendor/zotero/modules/translate/src/translation/sandboxManager.js +112 -0
- package/vendor/zotero/modules/translate/src/translation/translate.js +3283 -0
- package/vendor/zotero/modules/translate/src/translation/translate_item.js +120 -0
- package/vendor/zotero/modules/translate/src/translator.js +186 -0
- package/vendor/zotero/modules/translate/src/translators.js +174 -0
- package/vendor/zotero/modules/translate/src/utilities_translate.js +487 -0
- package/vendor/zotero/modules/translate/src/zotero.js +94 -0
- package/vendor/zotero/modules/translators/A Contra Corriente.js +206 -0
- package/vendor/zotero/modules/translators/ABC News Australia.js +224 -0
- package/vendor/zotero/modules/translators/ACLS Humanities EBook.js +165 -0
- package/vendor/zotero/modules/translators/ACLWeb.js +600 -0
- package/vendor/zotero/modules/translators/ACM Digital Library.js +710 -0
- package/vendor/zotero/modules/translators/ACS Publications.js +633 -0
- package/vendor/zotero/modules/translators/ADS Bibcode.js +664 -0
- package/vendor/zotero/modules/translators/AEA Web.js +450 -0
- package/vendor/zotero/modules/translators/AGRIS.js +311 -0
- package/vendor/zotero/modules/translators/AIP.js +295 -0
- package/vendor/zotero/modules/translators/AMS Journals.js +136 -0
- package/vendor/zotero/modules/translators/AMS MathSciNet (Legacy).js +313 -0
- package/vendor/zotero/modules/translators/AMS MathSciNet.js +288 -0
- package/vendor/zotero/modules/translators/APA PsycNET.js +915 -0
- package/vendor/zotero/modules/translators/APN.ru.js +132 -0
- package/vendor/zotero/modules/translators/APS-Physics.js +204 -0
- package/vendor/zotero/modules/translators/APS.js +542 -0
- package/vendor/zotero/modules/translators/ARTFL Encyclopedie.js +283 -0
- package/vendor/zotero/modules/translators/ARTnews.js +155 -0
- package/vendor/zotero/modules/translators/ARTstor.js +619 -0
- package/vendor/zotero/modules/translators/ASCE.js +199 -0
- package/vendor/zotero/modules/translators/ASCO Meeting Library.js +153 -0
- package/vendor/zotero/modules/translators/ASTIS.js +337 -0
- package/vendor/zotero/modules/translators/ATS International Journal.js +290 -0
- package/vendor/zotero/modules/translators/Access Engineering.js +384 -0
- package/vendor/zotero/modules/translators/Access Medicine.js +343 -0
- package/vendor/zotero/modules/translators/Access Science.js +391 -0
- package/vendor/zotero/modules/translators/Adam Matthew Digital.js +405 -0
- package/vendor/zotero/modules/translators/Agencia del ISBN.js +77 -0
- package/vendor/zotero/modules/translators/Ahval News.js +309 -0
- package/vendor/zotero/modules/translators/Air University Journals.js +236 -0
- package/vendor/zotero/modules/translators/Airiti.js +423 -0
- package/vendor/zotero/modules/translators/Alexander Street Press.js +198 -0
- package/vendor/zotero/modules/translators/AllAfrica.js +291 -0
- package/vendor/zotero/modules/translators/Alsharekh.js +242 -0
- package/vendor/zotero/modules/translators/AlterNet.js +134 -0
- package/vendor/zotero/modules/translators/Aluka.js +261 -0
- package/vendor/zotero/modules/translators/Amazon.js +1043 -0
- package/vendor/zotero/modules/translators/American Archive of Public Broadcasting.js +592 -0
- package/vendor/zotero/modules/translators/American Institute of Aeronautics and Astronautics.js +210 -0
- package/vendor/zotero/modules/translators/American Prospect.js +114 -0
- package/vendor/zotero/modules/translators/Ancestry.com US Federal Census.js +164 -0
- package/vendor/zotero/modules/translators/Annual Reviews.js +329 -0
- package/vendor/zotero/modules/translators/Antikvarium.hu.js +280 -0
- package/vendor/zotero/modules/translators/AquaDocs.js +390 -0
- package/vendor/zotero/modules/translators/Archeion.js +249 -0
- package/vendor/zotero/modules/translators/Archiv fuer Sozialgeschichte.js +157 -0
- package/vendor/zotero/modules/translators/Archive Ouverte en Sciences de l'Information et de la Communication (AOSIC).js +179 -0
- package/vendor/zotero/modules/translators/Archives Canada.js +142 -0
- package/vendor/zotero/modules/translators/Ariana News.js +203 -0
- package/vendor/zotero/modules/translators/Art Institute of Chicago.js +279 -0
- package/vendor/zotero/modules/translators/Artefacts Canada.js +192 -0
- package/vendor/zotero/modules/translators/Artforum.js +438 -0
- package/vendor/zotero/modules/translators/Atlanta Journal Constitution.js +155 -0
- package/vendor/zotero/modules/translators/Atlanta Journal-Constitution.js +311 -0
- package/vendor/zotero/modules/translators/Atypon Journals.js +1204 -0
- package/vendor/zotero/modules/translators/AustLII and NZLII.js +604 -0
- package/vendor/zotero/modules/translators/Australian Dictionary of Biography.js +196 -0
- package/vendor/zotero/modules/translators/BAILII.js +176 -0
- package/vendor/zotero/modules/translators/BBC Genome.js +254 -0
- package/vendor/zotero/modules/translators/BBC.js +430 -0
- package/vendor/zotero/modules/translators/BIBSYS.js +112 -0
- package/vendor/zotero/modules/translators/BOCC.js +217 -0
- package/vendor/zotero/modules/translators/BOE.js +229 -0
- package/vendor/zotero/modules/translators/BOFiP-Impots.js +132 -0
- package/vendor/zotero/modules/translators/Baidu Scholar.js +276 -0
- package/vendor/zotero/modules/translators/Bangkok Post.js +216 -0
- package/vendor/zotero/modules/translators/Baruch Foundation.js +175 -0
- package/vendor/zotero/modules/translators/Beobachter.js +175 -0
- package/vendor/zotero/modules/translators/Bezneng Gajit.js +92 -0
- package/vendor/zotero/modules/translators/BibLaTeX.js +888 -0
- package/vendor/zotero/modules/translators/BibTeX.js +4236 -0
- package/vendor/zotero/modules/translators/Biblio.com.js +216 -0
- package/vendor/zotero/modules/translators/Bibliontology RDF.js +1166 -0
- package/vendor/zotero/modules/translators/Biblioteca Nacional de Maestros.js +213 -0
- package/vendor/zotero/modules/translators/Bibliotheque et Archives Nationale du Quebec (Pistard).js +147 -0
- package/vendor/zotero/modules/translators/Bibliotheque et Archives Nationales du Quebec.js +266 -0
- package/vendor/zotero/modules/translators/Bibliotheque nationale de France.js +872 -0
- package/vendor/zotero/modules/translators/BioMed Central.js +585 -0
- package/vendor/zotero/modules/translators/BioOne.js +233 -0
- package/vendor/zotero/modules/translators/Bioconductor.js +343 -0
- package/vendor/zotero/modules/translators/Blaetter.js +192 -0
- package/vendor/zotero/modules/translators/Blogger.js +244 -0
- package/vendor/zotero/modules/translators/Bloomberg.js +205 -0
- package/vendor/zotero/modules/translators/Bloomsbury Food Library.js +296 -0
- package/vendor/zotero/modules/translators/Bluesky.js +195 -0
- package/vendor/zotero/modules/translators/BnF ISBN.js +129 -0
- package/vendor/zotero/modules/translators/Bookmarks.js +282 -0
- package/vendor/zotero/modules/translators/Bookshop.org.js +223 -0
- package/vendor/zotero/modules/translators/Boston Review.js +332 -0
- package/vendor/zotero/modules/translators/Bosworth Toller's Anglo-Saxon Dictionary Online.js +496 -0
- package/vendor/zotero/modules/translators/Bracero History Archive.js +200 -0
- package/vendor/zotero/modules/translators/Brill Journals.js +168 -0
- package/vendor/zotero/modules/translators/Brill.js +434 -0
- package/vendor/zotero/modules/translators/Brukerhandboken.js +153 -0
- package/vendor/zotero/modules/translators/Bryn Mawr Classical Review.js +303 -0
- package/vendor/zotero/modules/translators/Bundesgesetzblatt.js +231 -0
- package/vendor/zotero/modules/translators/Business Standard.js +151 -0
- package/vendor/zotero/modules/translators/CABI - CAB Abstracts.js +317 -0
- package/vendor/zotero/modules/translators/CAOD.js +260 -0
- package/vendor/zotero/modules/translators/CBC.js +439 -0
- package/vendor/zotero/modules/translators/CCfr (BnF).js +162 -0
- package/vendor/zotero/modules/translators/CERN Document Server.js +277 -0
- package/vendor/zotero/modules/translators/CEUR Workshop Proceedings.js +145 -0
- package/vendor/zotero/modules/translators/CFF References.js +170 -0
- package/vendor/zotero/modules/translators/CFF.js +113 -0
- package/vendor/zotero/modules/translators/CIA World Factbook.js +128 -0
- package/vendor/zotero/modules/translators/CLACSO.js +226 -0
- package/vendor/zotero/modules/translators/CLASE.js +135 -0
- package/vendor/zotero/modules/translators/CNKI.js +731 -0
- package/vendor/zotero/modules/translators/COBISS.js +1945 -0
- package/vendor/zotero/modules/translators/COinS.js +336 -0
- package/vendor/zotero/modules/translators/CQ Press.js +418 -0
- package/vendor/zotero/modules/translators/CROSBI.js +227 -0
- package/vendor/zotero/modules/translators/CSIRO Publishing.js +139 -0
- package/vendor/zotero/modules/translators/CSL JSON.js +203 -0
- package/vendor/zotero/modules/translators/CSV.js +294 -0
- package/vendor/zotero/modules/translators/Cairn.info.js +368 -0
- package/vendor/zotero/modules/translators/CalMatters.js +228 -0
- package/vendor/zotero/modules/translators/Calisphere.js +355 -0
- package/vendor/zotero/modules/translators/Camara Brasileira do Livro ISBN.js +842 -0
- package/vendor/zotero/modules/translators/Cambridge Core.js +580 -0
- package/vendor/zotero/modules/translators/Cambridge Engage Preprints.js +276 -0
- package/vendor/zotero/modules/translators/CanLII.js +284 -0
- package/vendor/zotero/modules/translators/Canada.com.js +171 -0
- package/vendor/zotero/modules/translators/Canadian Letters and Images.js +148 -0
- package/vendor/zotero/modules/translators/Canadiana.ca.js +196 -0
- package/vendor/zotero/modules/translators/Cascadilla Proceedings Project.js +390 -0
- package/vendor/zotero/modules/translators/Cell Press.js +516 -0
- package/vendor/zotero/modules/translators/Central and Eastern European Online Library Journals.js +313 -0
- package/vendor/zotero/modules/translators/Champlain Society - Collection.js +220 -0
- package/vendor/zotero/modules/translators/Chicago Journal of Theoretical Computer Science.js +203 -0
- package/vendor/zotero/modules/translators/Christian Science Monitor.js +148 -0
- package/vendor/zotero/modules/translators/Chronicling America.js +131 -0
- package/vendor/zotero/modules/translators/CiNii Research.js +168 -0
- package/vendor/zotero/modules/translators/Citavi 5 XML.js +516 -0
- package/vendor/zotero/modules/translators/CiteSeer.js +196 -0
- package/vendor/zotero/modules/translators/CiteULike.js +170 -0
- package/vendor/zotero/modules/translators/Citizen Lab.js +347 -0
- package/vendor/zotero/modules/translators/Civilization.ca.js +146 -0
- package/vendor/zotero/modules/translators/Climate Change and Human Health Literature Portal.js +283 -0
- package/vendor/zotero/modules/translators/Clinical Key.js +367 -0
- package/vendor/zotero/modules/translators/Code4Lib Journal.js +143 -0
- package/vendor/zotero/modules/translators/Colorado State Legislature.js +215 -0
- package/vendor/zotero/modules/translators/Columbia University Press.js +238 -0
- package/vendor/zotero/modules/translators/Common-Place.js +218 -0
- package/vendor/zotero/modules/translators/Computer History Museum Archive.js +1319 -0
- package/vendor/zotero/modules/translators/Copernicus.js +461 -0
- package/vendor/zotero/modules/translators/Cornell LII.js +252 -0
- package/vendor/zotero/modules/translators/Cornell University Press.js +235 -0
- package/vendor/zotero/modules/translators/CourtListener.js +265 -0
- package/vendor/zotero/modules/translators/CrossRef.js +486 -0
- package/vendor/zotero/modules/translators/Crossref REST.js +1757 -0
- package/vendor/zotero/modules/translators/Crossref Unixref XML.js +965 -0
- package/vendor/zotero/modules/translators/Current Affairs.js +160 -0
- package/vendor/zotero/modules/translators/Cyberpresse.js +131 -0
- package/vendor/zotero/modules/translators/DABI.js +476 -0
- package/vendor/zotero/modules/translators/DAI-Zenon.js +392 -0
- package/vendor/zotero/modules/translators/DART-Europe.js +176 -0
- package/vendor/zotero/modules/translators/DBLP Computer Science Bibliography.js +462 -0
- package/vendor/zotero/modules/translators/DBpia.js +233 -0
- package/vendor/zotero/modules/translators/DEPATISnet.js +373 -0
- package/vendor/zotero/modules/translators/DOAJ.js +243 -0
- package/vendor/zotero/modules/translators/DOI Content Negotiation.js +352 -0
- package/vendor/zotero/modules/translators/DOI.js +322 -0
- package/vendor/zotero/modules/translators/DPLA.js +425 -0
- package/vendor/zotero/modules/translators/DSpace Intermediate Metadata.js +208 -0
- package/vendor/zotero/modules/translators/DTU Orbit.js +155 -0
- package/vendor/zotero/modules/translators/Dagens Nyheter.js +369 -0
- package/vendor/zotero/modules/translators/Dagstuhl Research Online Publication Server.js +276 -0
- package/vendor/zotero/modules/translators/Dar Almandumah.js +253 -0
- package/vendor/zotero/modules/translators/Data.gov.js +225 -0
- package/vendor/zotero/modules/translators/DataCite.js +125 -0
- package/vendor/zotero/modules/translators/Databrary.js +184 -0
- package/vendor/zotero/modules/translators/Datacite JSON.js +1182 -0
- package/vendor/zotero/modules/translators/Dataverse.js +418 -0
- package/vendor/zotero/modules/translators/Daum News.js +139 -0
- package/vendor/zotero/modules/translators/De Gruyter Brill.js +674 -0
- package/vendor/zotero/modules/translators/DeGruyter.js +457 -0
- package/vendor/zotero/modules/translators/Defense Technical Information Center.js +146 -0
- package/vendor/zotero/modules/translators/Delpher.js +413 -0
- package/vendor/zotero/modules/translators/Demographic Research.js +164 -0
- package/vendor/zotero/modules/translators/Denik CZ.js +273 -0
- package/vendor/zotero/modules/translators/Der Freitag.js +236 -0
- package/vendor/zotero/modules/translators/Der Spiegel.js +479 -0
- package/vendor/zotero/modules/translators/Desiring God.js +216 -0
- package/vendor/zotero/modules/translators/Deutsche Fotothek.js +364 -0
- package/vendor/zotero/modules/translators/Deutsche Nationalbibliothek.js +594 -0
- package/vendor/zotero/modules/translators/Dialnet.js +258 -0
- package/vendor/zotero/modules/translators/Die Zeit.js +378 -0
- package/vendor/zotero/modules/translators/DigiZeitschriften.js +269 -0
- package/vendor/zotero/modules/translators/Digital Humanities Quarterly.js +207 -0
- package/vendor/zotero/modules/translators/Digital Medievalist.js +149 -0
- package/vendor/zotero/modules/translators/Digital Spy.js +215 -0
- package/vendor/zotero/modules/translators/Dimensions.js +233 -0
- package/vendor/zotero/modules/translators/Douban.js +316 -0
- package/vendor/zotero/modules/translators/Dreier Neuerscheinungsdienst.js +209 -0
- package/vendor/zotero/modules/translators/DrugBank.ca.js +209 -0
- package/vendor/zotero/modules/translators/Dryad Digital Repository.js +323 -0
- package/vendor/zotero/modules/translators/Duke University Press Books.js +250 -0
- package/vendor/zotero/modules/translators/E-periodica Switzerland.js +347 -0
- package/vendor/zotero/modules/translators/EBSCO Discovery Layer.js +147 -0
- package/vendor/zotero/modules/translators/EBSCOhost.js +592 -0
- package/vendor/zotero/modules/translators/EIDR.js +184 -0
- package/vendor/zotero/modules/translators/EPA National Library Catalog.js +245 -0
- package/vendor/zotero/modules/translators/ERIC.js +986 -0
- package/vendor/zotero/modules/translators/ESpacenet.js +465 -0
- package/vendor/zotero/modules/translators/EUR-Lex.js +423 -0
- package/vendor/zotero/modules/translators/Eastview.js +336 -0
- package/vendor/zotero/modules/translators/Edinburgh University Press Journals.js +178 -0
- package/vendor/zotero/modules/translators/Education Week.js +197 -0
- package/vendor/zotero/modules/translators/El Comercio (Peru).js +347 -0
- package/vendor/zotero/modules/translators/El Pais.js +262 -0
- package/vendor/zotero/modules/translators/Electronic Colloquium on Computational Complexity.js +230 -0
- package/vendor/zotero/modules/translators/Elicit.js +120 -0
- package/vendor/zotero/modules/translators/Elsevier Health Journals.js +531 -0
- package/vendor/zotero/modules/translators/Elsevier Pure.js +420 -0
- package/vendor/zotero/modules/translators/Embedded Metadata.js +1951 -0
- package/vendor/zotero/modules/translators/Emerald Insight.js +626 -0
- package/vendor/zotero/modules/translators/Encyclopedia of Chicago.js +162 -0
- package/vendor/zotero/modules/translators/Encyclopedia of Korean Culture.js +221 -0
- package/vendor/zotero/modules/translators/Endnote XML.js +1407 -0
- package/vendor/zotero/modules/translators/Engineering Village.js +139 -0
- package/vendor/zotero/modules/translators/Envidat.js +331 -0
- package/vendor/zotero/modules/translators/Epicurious.js +144 -0
- package/vendor/zotero/modules/translators/Erudit.js +272 -0
- package/vendor/zotero/modules/translators/Euclid.js +220 -0
- package/vendor/zotero/modules/translators/EurasiaNet.js +109 -0
- package/vendor/zotero/modules/translators/Eurogamer.js +112 -0
- package/vendor/zotero/modules/translators/EurogamerUSgamer.js +380 -0
- package/vendor/zotero/modules/translators/Europe PMC.js +448 -0
- package/vendor/zotero/modules/translators/Evernote.js +104 -0
- package/vendor/zotero/modules/translators/F1000 Research.js +655 -0
- package/vendor/zotero/modules/translators/FAO Publications.js +1139 -0
- package/vendor/zotero/modules/translators/FAZ.NET.js +231 -0
- package/vendor/zotero/modules/translators/Fachportal Padagogik.js +839 -0
- package/vendor/zotero/modules/translators/Factiva.js +302 -0
- package/vendor/zotero/modules/translators/Failed Architecture.js +114 -0
- package/vendor/zotero/modules/translators/Fairfax Australia.js +200 -0
- package/vendor/zotero/modules/translators/Fatcat.js +425 -0
- package/vendor/zotero/modules/translators/Figshare.js +191 -0
- package/vendor/zotero/modules/translators/Financial Times.js +187 -0
- package/vendor/zotero/modules/translators/Finna.js +357 -0
- package/vendor/zotero/modules/translators/Flickr.js +318 -0
- package/vendor/zotero/modules/translators/Foreign Affairs.js +485 -0
- package/vendor/zotero/modules/translators/Foreign Policy.js +146 -0
- package/vendor/zotero/modules/translators/FreeCite.js +95 -0
- package/vendor/zotero/modules/translators/FreePatentsOnline.js +265 -0
- package/vendor/zotero/modules/translators/Frieze.js +243 -0
- package/vendor/zotero/modules/translators/Frontiers.js +667 -0
- package/vendor/zotero/modules/translators/GMS German Medical Science.js +319 -0
- package/vendor/zotero/modules/translators/GPO Access e-CFR.js +134 -0
- package/vendor/zotero/modules/translators/Gale Databases.js +324 -0
- package/vendor/zotero/modules/translators/GaleGDC.js +189 -0
- package/vendor/zotero/modules/translators/Galegroup.js +327 -0
- package/vendor/zotero/modules/translators/Gallica.js +194 -0
- package/vendor/zotero/modules/translators/Game Studies.js +155 -0
- package/vendor/zotero/modules/translators/GameSpot.js +199 -0
- package/vendor/zotero/modules/translators/GameStar GamePro.js +198 -0
- package/vendor/zotero/modules/translators/Gasyrlar Awazy.js +156 -0
- package/vendor/zotero/modules/translators/Gemeinsamer Bibliotheksverbund ISBN.js +23 -0
- package/vendor/zotero/modules/translators/Gene Ontology.js +128 -0
- package/vendor/zotero/modules/translators/Github.js +268 -0
- package/vendor/zotero/modules/translators/Globes.js +243 -0
- package/vendor/zotero/modules/translators/Gmail.js +64 -0
- package/vendor/zotero/modules/translators/Goodreads.js +219 -0
- package/vendor/zotero/modules/translators/Google Books.js +552 -0
- package/vendor/zotero/modules/translators/Google Patents.js +959 -0
- package/vendor/zotero/modules/translators/Google Play.js +186 -0
- package/vendor/zotero/modules/translators/Google Presentation.js +104 -0
- package/vendor/zotero/modules/translators/Google Research.js +221 -0
- package/vendor/zotero/modules/translators/Google Scholar.js +1361 -0
- package/vendor/zotero/modules/translators/Gulag Many Days, Many Lives.js +179 -0
- package/vendor/zotero/modules/translators/HAL Archives Ouvertes.js +429 -0
- package/vendor/zotero/modules/translators/HCSP.js +312 -0
- package/vendor/zotero/modules/translators/HUDOC.js +650 -0
- package/vendor/zotero/modules/translators/Haaretz.js +562 -0
- package/vendor/zotero/modules/translators/Habr.js +232 -0
- package/vendor/zotero/modules/translators/Handelszeitung.js +273 -0
- package/vendor/zotero/modules/translators/Hanrei Watch.js +123 -0
- package/vendor/zotero/modules/translators/Harper's Magazine.js +365 -0
- package/vendor/zotero/modules/translators/Harpers.js +209 -0
- package/vendor/zotero/modules/translators/Harvard Business Review.js +326 -0
- package/vendor/zotero/modules/translators/Harvard Caselaw Access Project.js +244 -0
- package/vendor/zotero/modules/translators/Harvard University Press Books.js +286 -0
- package/vendor/zotero/modules/translators/Hathi Trust.js +164 -0
- package/vendor/zotero/modules/translators/HathiTrust.js +311 -0
- package/vendor/zotero/modules/translators/HeinOnline.js +266 -0
- package/vendor/zotero/modules/translators/Heise.js +200 -0
- package/vendor/zotero/modules/translators/Herder.js +236 -0
- package/vendor/zotero/modules/translators/HighBeam.js +198 -0
- package/vendor/zotero/modules/translators/HighWire 2.0.js +1355 -0
- package/vendor/zotero/modules/translators/HighWire.js +209 -0
- package/vendor/zotero/modules/translators/Hindawi Publishers.js +177 -0
- package/vendor/zotero/modules/translators/Hispanic-American Periodical Index.js +236 -0
- package/vendor/zotero/modules/translators/Homeland Security Digital Library.js +426 -0
- package/vendor/zotero/modules/translators/Hoovers.js +89 -0
- package/vendor/zotero/modules/translators/Huff Post.js +223 -0
- package/vendor/zotero/modules/translators/Human Rights Watch.js +450 -0
- package/vendor/zotero/modules/translators/IBISWorld.js +171 -0
- package/vendor/zotero/modules/translators/IDEA ALM.js +536 -0
- package/vendor/zotero/modules/translators/IEEE Computer Society.js +429 -0
- package/vendor/zotero/modules/translators/IEEE Xplore.js +1000 -0
- package/vendor/zotero/modules/translators/IETF.js +451 -0
- package/vendor/zotero/modules/translators/IGN.js +136 -0
- package/vendor/zotero/modules/translators/IMDb.js +566 -0
- package/vendor/zotero/modules/translators/INSPIRE.js +247 -0
- package/vendor/zotero/modules/translators/IPCC.js +757 -0
- package/vendor/zotero/modules/translators/ISTC.js +181 -0
- package/vendor/zotero/modules/translators/Idref.js +179 -0
- package/vendor/zotero/modules/translators/In These Times.js +196 -0
- package/vendor/zotero/modules/translators/InfoTrac.js +279 -0
- package/vendor/zotero/modules/translators/Informationssystem Medienpaedagogik.js +305 -0
- package/vendor/zotero/modules/translators/IngentaConnect.js +312 -0
- package/vendor/zotero/modules/translators/Inside Higher Ed.js +167 -0
- package/vendor/zotero/modules/translators/Insignia OPAC.js +114 -0
- package/vendor/zotero/modules/translators/Institute of Contemporary Art.js +180 -0
- package/vendor/zotero/modules/translators/Institute of Physics.js +340 -0
- package/vendor/zotero/modules/translators/Integrum.js +173 -0
- package/vendor/zotero/modules/translators/Intellixir.js +264 -0
- package/vendor/zotero/modules/translators/Inter-Research Science Center.js +185 -0
- package/vendor/zotero/modules/translators/International Nuclear Information System.js +285 -0
- package/vendor/zotero/modules/translators/Internet Archive Scholar.js +106 -0
- package/vendor/zotero/modules/translators/Internet Archive Wayback Machine.js +152 -0
- package/vendor/zotero/modules/translators/Internet Archive.js +552 -0
- package/vendor/zotero/modules/translators/InvenioRDM.js +1260 -0
- package/vendor/zotero/modules/translators/Isidore.js +235 -0
- package/vendor/zotero/modules/translators/J-Stage.js +272 -0
- package/vendor/zotero/modules/translators/JETS.js +122 -0
- package/vendor/zotero/modules/translators/JISC Historical Texts.js +273 -0
- package/vendor/zotero/modules/translators/JRC Publications Repository.js +569 -0
- package/vendor/zotero/modules/translators/JSTOR.js +821 -0
- package/vendor/zotero/modules/translators/Jahrbuch.js +213 -0
- package/vendor/zotero/modules/translators/Japan Times Online.js +138 -0
- package/vendor/zotero/modules/translators/Journal of Electronic Publishing.js +147 -0
- package/vendor/zotero/modules/translators/Journal of Extension.js +288 -0
- package/vendor/zotero/modules/translators/Journal of Machine Learning Research.js +441 -0
- package/vendor/zotero/modules/translators/Journal of Religion and Society.js +174 -0
- package/vendor/zotero/modules/translators/JurPC.js +274 -0
- package/vendor/zotero/modules/translators/Juricaf.js +141 -0
- package/vendor/zotero/modules/translators/Juris.js +728 -0
- package/vendor/zotero/modules/translators/K10plus ISBN.js +386 -0
- package/vendor/zotero/modules/translators/KStudy.js +632 -0
- package/vendor/zotero/modules/translators/Kanopy.js +358 -0
- package/vendor/zotero/modules/translators/Khaama Press.js +249 -0
- package/vendor/zotero/modules/translators/KitapYurdu.com.js +376 -0
- package/vendor/zotero/modules/translators/Kommersant.js +174 -0
- package/vendor/zotero/modules/translators/Korean National Library.js +621 -0
- package/vendor/zotero/modules/translators/L'Annee Philologique.js +267 -0
- package/vendor/zotero/modules/translators/LA Times.js +239 -0
- package/vendor/zotero/modules/translators/LIBRIS ISBN.js +103 -0
- package/vendor/zotero/modules/translators/LIVIVO.js +260 -0
- package/vendor/zotero/modules/translators/LWN.net.js +350 -0
- package/vendor/zotero/modules/translators/La Croix.js +237 -0
- package/vendor/zotero/modules/translators/La Nacion (Argentina).js +231 -0
- package/vendor/zotero/modules/translators/La Presse.js +218 -0
- package/vendor/zotero/modules/translators/La Republica (Peru).js +174 -0
- package/vendor/zotero/modules/translators/Lagen.nu.js +214 -0
- package/vendor/zotero/modules/translators/Landesbibliographie Baden-Wurttemberg.js +324 -0
- package/vendor/zotero/modules/translators/Lapham's Quarterly.js +1062 -0
- package/vendor/zotero/modules/translators/Le Devoir.js +167 -0
- package/vendor/zotero/modules/translators/Le Figaro.js +225 -0
- package/vendor/zotero/modules/translators/Le Maitron.js +484 -0
- package/vendor/zotero/modules/translators/Le Monde.js +258 -0
- package/vendor/zotero/modules/translators/Le monde diplomatique.js +200 -0
- package/vendor/zotero/modules/translators/Legifrance.js +641 -0
- package/vendor/zotero/modules/translators/Legislative Insight.js +406 -0
- package/vendor/zotero/modules/translators/Lexis+.js +264 -0
- package/vendor/zotero/modules/translators/LexisNexis.js +505 -0
- package/vendor/zotero/modules/translators/Libraries Tasmania.js +778 -0
- package/vendor/zotero/modules/translators/Library Catalog (Aleph).js +385 -0
- package/vendor/zotero/modules/translators/Library Catalog (Amicus).js +254 -0
- package/vendor/zotero/modules/translators/Library Catalog (Aquabrowser).js +253 -0
- package/vendor/zotero/modules/translators/Library Catalog (BiblioCommons).js +249 -0
- package/vendor/zotero/modules/translators/Library Catalog (Blacklight).js +341 -0
- package/vendor/zotero/modules/translators/Library Catalog (Capita Prism).js +162 -0
- package/vendor/zotero/modules/translators/Library Catalog (DRA).js +203 -0
- package/vendor/zotero/modules/translators/Library Catalog (Dynix).js +315 -0
- package/vendor/zotero/modules/translators/Library Catalog (EBSCO Locate).js +349 -0
- package/vendor/zotero/modules/translators/Library Catalog (Encore).js +211 -0
- package/vendor/zotero/modules/translators/Library Catalog (GEAC).js +104 -0
- package/vendor/zotero/modules/translators/Library Catalog (InnoPAC).js +305 -0
- package/vendor/zotero/modules/translators/Library Catalog (Koha).js +225 -0
- package/vendor/zotero/modules/translators/Library Catalog (Mango).js +285 -0
- package/vendor/zotero/modules/translators/Library Catalog (OPALS).js +200 -0
- package/vendor/zotero/modules/translators/Library Catalog (PICA).js +2120 -0
- package/vendor/zotero/modules/translators/Library Catalog (PICA2).js +331 -0
- package/vendor/zotero/modules/translators/Library Catalog (Pika).js +488 -0
- package/vendor/zotero/modules/translators/Library Catalog (Polaris).js +183 -0
- package/vendor/zotero/modules/translators/Library Catalog (Quolto).js +320 -0
- package/vendor/zotero/modules/translators/Library Catalog (RERO ILS).js +754 -0
- package/vendor/zotero/modules/translators/Library Catalog (SIRSI eLibrary).js +407 -0
- package/vendor/zotero/modules/translators/Library Catalog (SIRSI).js +452 -0
- package/vendor/zotero/modules/translators/Library Catalog (SLIMS).js +146 -0
- package/vendor/zotero/modules/translators/Library Catalog (TIND ILS).js +773 -0
- package/vendor/zotero/modules/translators/Library Catalog (TLCYouSeeMore).js +132 -0
- package/vendor/zotero/modules/translators/Library Catalog (TinREAD).js +277 -0
- package/vendor/zotero/modules/translators/Library Catalog (VTLS).js +125 -0
- package/vendor/zotero/modules/translators/Library Catalog (Visual Library 2021).js +765 -0
- package/vendor/zotero/modules/translators/Library Catalog (Voyager 7).js +199 -0
- package/vendor/zotero/modules/translators/Library Catalog (Voyager).js +212 -0
- package/vendor/zotero/modules/translators/Library Genesis.js +337 -0
- package/vendor/zotero/modules/translators/Library Hub Discover.js +359 -0
- package/vendor/zotero/modules/translators/Library of Congress Digital Collections.js +869 -0
- package/vendor/zotero/modules/translators/Library of Congress ISBN.js +86 -0
- package/vendor/zotero/modules/translators/LingBuzz.js +359 -0
- package/vendor/zotero/modules/translators/Lippincott Williams and Wilkins.js +341 -0
- package/vendor/zotero/modules/translators/Literary Hub.js +950 -0
- package/vendor/zotero/modules/translators/Litres.js +236 -0
- package/vendor/zotero/modules/translators/LiveJournal.js +219 -0
- package/vendor/zotero/modules/translators/London Review of Books.js +291 -0
- package/vendor/zotero/modules/translators/LookUs.js +260 -0
- package/vendor/zotero/modules/translators/Lulu.js +264 -0
- package/vendor/zotero/modules/translators/MAB2.js +373 -0
- package/vendor/zotero/modules/translators/MARC.js +1080 -0
- package/vendor/zotero/modules/translators/MARCXML.js +489 -0
- package/vendor/zotero/modules/translators/MCV.js +258 -0
- package/vendor/zotero/modules/translators/MDPI Journals.js +356 -0
- package/vendor/zotero/modules/translators/MEDLINEnbib.js +1561 -0
- package/vendor/zotero/modules/translators/METS.js +384 -0
- package/vendor/zotero/modules/translators/MIDAS Journals.js +343 -0
- package/vendor/zotero/modules/translators/MIT Press Books.js +637 -0
- package/vendor/zotero/modules/translators/MIT Press Journals.js +176 -0
- package/vendor/zotero/modules/translators/MODS.js +2545 -0
- package/vendor/zotero/modules/translators/MPG PuRe.js +541 -0
- package/vendor/zotero/modules/translators/Mailman.js +136 -0
- package/vendor/zotero/modules/translators/Mainichi Daily News.js +189 -0
- package/vendor/zotero/modules/translators/Mastodon.js +198 -0
- package/vendor/zotero/modules/translators/Matbugat.ru.js +110 -0
- package/vendor/zotero/modules/translators/Max Planck Institute for the History of Science Virtual Laboratory Library.js +136 -0
- package/vendor/zotero/modules/translators/Medium.js +208 -0
- package/vendor/zotero/modules/translators/MetaLib.js +126 -0
- package/vendor/zotero/modules/translators/Microbiology Society Journals.js +343 -0
- package/vendor/zotero/modules/translators/Microsoft Academic.js +424 -0
- package/vendor/zotero/modules/translators/Mikromarc.js +207 -0
- package/vendor/zotero/modules/translators/Milli Kutuphane.js +244 -0
- package/vendor/zotero/modules/translators/Musee du Louvre.js +265 -0
- package/vendor/zotero/modules/translators/NASA ADS.js +889 -0
- package/vendor/zotero/modules/translators/NASA NTRS.js +610 -0
- package/vendor/zotero/modules/translators/NCBI Nucleotide.js +227 -0
- package/vendor/zotero/modules/translators/NPR.js +341 -0
- package/vendor/zotero/modules/translators/NRC Research Press.js +181 -0
- package/vendor/zotero/modules/translators/NRC.nl.js +226 -0
- package/vendor/zotero/modules/translators/NTSB Accident Reports.js +226 -0
- package/vendor/zotero/modules/translators/NYPL Menus.js +275 -0
- package/vendor/zotero/modules/translators/NYPL Research Catalog.js +458 -0
- package/vendor/zotero/modules/translators/NYTimes.com.js +858 -0
- package/vendor/zotero/modules/translators/NZZ.ch.js +272 -0
- package/vendor/zotero/modules/translators/Nagoya University OPAC.js +336 -0
- package/vendor/zotero/modules/translators/National Academies Press.js +243 -0
- package/vendor/zotero/modules/translators/National Agriculture Library.js +524 -0
- package/vendor/zotero/modules/translators/National Archive of the UK.js +237 -0
- package/vendor/zotero/modules/translators/National Archives of Australia.js +522 -0
- package/vendor/zotero/modules/translators/National Archives of South Africa.js +122 -0
- package/vendor/zotero/modules/translators/National Archives of the United States.js +278 -0
- package/vendor/zotero/modules/translators/National Bureau of Economic Research.js +363 -0
- package/vendor/zotero/modules/translators/National Diet Library Catalogue.js +333 -0
- package/vendor/zotero/modules/translators/National Gallery of Art - USA.js +149 -0
- package/vendor/zotero/modules/translators/National Gallery of Australia.js +252 -0
- package/vendor/zotero/modules/translators/National Library of Australia (new catalog).js +223 -0
- package/vendor/zotero/modules/translators/National Library of Belarus.js +171 -0
- package/vendor/zotero/modules/translators/National Library of Norway.js +310 -0
- package/vendor/zotero/modules/translators/National Library of Poland ISBN.js +140 -0
- package/vendor/zotero/modules/translators/National Post.js +186 -0
- package/vendor/zotero/modules/translators/National Technical Reports Library.js +276 -0
- package/vendor/zotero/modules/translators/National Transportation Library ROSA P.js +562 -0
- package/vendor/zotero/modules/translators/Nature Publishing Group.js +3394 -0
- package/vendor/zotero/modules/translators/Neural Information Processing Systems.js +385 -0
- package/vendor/zotero/modules/translators/New Left Review.js +245 -0
- package/vendor/zotero/modules/translators/New Zealand Herald.js +282 -0
- package/vendor/zotero/modules/translators/Newlines Magazine.js +190 -0
- package/vendor/zotero/modules/translators/News Corp Australia.js +251 -0
- package/vendor/zotero/modules/translators/NewsBank.js +202 -0
- package/vendor/zotero/modules/translators/NewsnetTamedia.js +509 -0
- package/vendor/zotero/modules/translators/Noor Digital Library.js +267 -0
- package/vendor/zotero/modules/translators/Note HTML.js +206 -0
- package/vendor/zotero/modules/translators/Note Markdown.js +1638 -0
- package/vendor/zotero/modules/translators/Notre Dame Philosophical Reviews.js +201 -0
- package/vendor/zotero/modules/translators/Nuclear Receptor Signaling.js +241 -0
- package/vendor/zotero/modules/translators/OAPEN.js +331 -0
- package/vendor/zotero/modules/translators/OECD.js +216 -0
- package/vendor/zotero/modules/translators/ORCID.js +104 -0
- package/vendor/zotero/modules/translators/OSF Preprints.js +417 -0
- package/vendor/zotero/modules/translators/OSTI Energy Citations.js +202 -0
- package/vendor/zotero/modules/translators/OVID Tagged.js +1226 -0
- package/vendor/zotero/modules/translators/OZON.ru.js +465 -0
- package/vendor/zotero/modules/translators/OhioLINK.js +43 -0
- package/vendor/zotero/modules/translators/Old Bailey Online.js +315 -0
- package/vendor/zotero/modules/translators/Open Conf.js +172 -0
- package/vendor/zotero/modules/translators/Open Journal Systems.js +729 -0
- package/vendor/zotero/modules/translators/Open Knowledge Repository.js +811 -0
- package/vendor/zotero/modules/translators/OpenAlex JSON.js +740 -0
- package/vendor/zotero/modules/translators/OpenAlex.js +444 -0
- package/vendor/zotero/modules/translators/OpenEdition Books.js +155 -0
- package/vendor/zotero/modules/translators/OpenEdition Journals.js +432 -0
- package/vendor/zotero/modules/translators/Optical Society of America.js +562 -0
- package/vendor/zotero/modules/translators/Optimization Online.js +418 -0
- package/vendor/zotero/modules/translators/Ovid OCE.js +353 -0
- package/vendor/zotero/modules/translators/Ovid.js +302 -0
- package/vendor/zotero/modules/translators/Oxford Dictionaries Premium.js +194 -0
- package/vendor/zotero/modules/translators/Oxford English Dictionary.js +122 -0
- package/vendor/zotero/modules/translators/Oxford Music and Art Online.js +120 -0
- package/vendor/zotero/modules/translators/Oxford Reference.js +202 -0
- package/vendor/zotero/modules/translators/Oxford University Press.js +277 -0
- package/vendor/zotero/modules/translators/PC Gamer.js +302 -0
- package/vendor/zotero/modules/translators/PC Games.js +128 -0
- package/vendor/zotero/modules/translators/PEI Archival Information Network.js +242 -0
- package/vendor/zotero/modules/translators/PEP Web.js +165 -0
- package/vendor/zotero/modules/translators/PKP Catalog Systems.js +1455 -0
- package/vendor/zotero/modules/translators/PLoS Journals.js +284 -0
- package/vendor/zotero/modules/translators/PRC History Review.js +298 -0
- package/vendor/zotero/modules/translators/Pajhwok Afghan News.js +198 -0
- package/vendor/zotero/modules/translators/Papers Past.js +297 -0
- package/vendor/zotero/modules/translators/Paris Review.js +227 -0
- package/vendor/zotero/modules/translators/Pastebin.js +199 -0
- package/vendor/zotero/modules/translators/Patents - USPTO.js +210 -0
- package/vendor/zotero/modules/translators/Peeters.js +587 -0
- package/vendor/zotero/modules/translators/Perceiving Systems.js +350 -0
- package/vendor/zotero/modules/translators/Perlego.js +416 -0
- package/vendor/zotero/modules/translators/PhilPapers.js +233 -0
- package/vendor/zotero/modules/translators/Philosopher's Imprint.js +169 -0
- package/vendor/zotero/modules/translators/Pleade.js +329 -0
- package/vendor/zotero/modules/translators/Polygon.js +270 -0
- package/vendor/zotero/modules/translators/Potsdamer Neueste Nachrichten.js +188 -0
- package/vendor/zotero/modules/translators/Premium Times.js +144 -0
- package/vendor/zotero/modules/translators/Preprints.org.js +305 -0
- package/vendor/zotero/modules/translators/Prime 9ja Online.js +289 -0
- package/vendor/zotero/modules/translators/Primo 2018.js +126 -0
- package/vendor/zotero/modules/translators/Primo Normalized XML.js +987 -0
- package/vendor/zotero/modules/translators/Primo.js +322 -0
- package/vendor/zotero/modules/translators/ProMED.js +66 -0
- package/vendor/zotero/modules/translators/ProQuest Ebook Central.js +226 -0
- package/vendor/zotero/modules/translators/ProQuest PolicyFile.js +115 -0
- package/vendor/zotero/modules/translators/ProQuest.js +2210 -0
- package/vendor/zotero/modules/translators/Probing the Past.js +151 -0
- package/vendor/zotero/modules/translators/Project Gutenberg.js +191 -0
- package/vendor/zotero/modules/translators/Project MUSE.js +451 -0
- package/vendor/zotero/modules/translators/Protein Data Bank.js +445 -0
- package/vendor/zotero/modules/translators/PubFactory Journals.js +712 -0
- package/vendor/zotero/modules/translators/PubMed Central.js +577 -0
- package/vendor/zotero/modules/translators/PubMed XML.js +1139 -0
- package/vendor/zotero/modules/translators/PubMed.js +1317 -0
- package/vendor/zotero/modules/translators/PubPub.js +530 -0
- package/vendor/zotero/modules/translators/Pubget.js +164 -0
- package/vendor/zotero/modules/translators/Public Record Office Victoria.js +252 -0
- package/vendor/zotero/modules/translators/Publications Office of the European Union.js +540 -0
- package/vendor/zotero/modules/translators/Publications du Quebec.js +225 -0
- package/vendor/zotero/modules/translators/PyPI.js +288 -0
- package/vendor/zotero/modules/translators/Qatar Digital Library.js +802 -0
- package/vendor/zotero/modules/translators/Queensland State Archives.js +303 -0
- package/vendor/zotero/modules/translators/R-Packages.js +410 -0
- package/vendor/zotero/modules/translators/RAND.js +283 -0
- package/vendor/zotero/modules/translators/RDF.js +1780 -0
- package/vendor/zotero/modules/translators/REDALYC.js +196 -0
- package/vendor/zotero/modules/translators/RIS.js +7265 -0
- package/vendor/zotero/modules/translators/RSC Publishing.js +250 -0
- package/vendor/zotero/modules/translators/Radio Free Europe Radio Liberty.js +706 -0
- package/vendor/zotero/modules/translators/RePEc - Econpapers.js +725 -0
- package/vendor/zotero/modules/translators/RePEc - IDEAS.js +337 -0
- package/vendor/zotero/modules/translators/Rechtspraak.nl.js +295 -0
- package/vendor/zotero/modules/translators/RefWorks Tagged.js +1185 -0
- package/vendor/zotero/modules/translators/ReferBibIX.js +463 -0
- package/vendor/zotero/modules/translators/Regeringskansliet.js +89 -0
- package/vendor/zotero/modules/translators/Research Square.js +335 -0
- package/vendor/zotero/modules/translators/ResearchGate.js +394 -0
- package/vendor/zotero/modules/translators/Retsinformation.js +348 -0
- package/vendor/zotero/modules/translators/Reuters.js +255 -0
- package/vendor/zotero/modules/translators/Revues.org.js +378 -0
- package/vendor/zotero/modules/translators/Rock, Paper, Shotgun.js +304 -0
- package/vendor/zotero/modules/translators/Roll Call.js +173 -0
- package/vendor/zotero/modules/translators/Russian State Library.js +1517 -0
- package/vendor/zotero/modules/translators/SAE Papers.js +241 -0
- package/vendor/zotero/modules/translators/SAGE Journals.js +427 -0
- package/vendor/zotero/modules/translators/SAGE Knowledge.js +505 -0
- package/vendor/zotero/modules/translators/SAILDART.js +364 -0
- package/vendor/zotero/modules/translators/SALT Research Archives.js +196 -0
- package/vendor/zotero/modules/translators/SFU IPinCH.js +946 -0
- package/vendor/zotero/modules/translators/SIPRI.js +256 -0
- package/vendor/zotero/modules/translators/SIRS Knowledge Source.js +546 -0
- package/vendor/zotero/modules/translators/SLUB Dresden.js +300 -0
- package/vendor/zotero/modules/translators/SORA.js +340 -0
- package/vendor/zotero/modules/translators/SSOAR.js +399 -0
- package/vendor/zotero/modules/translators/SSRN.js +235 -0
- package/vendor/zotero/modules/translators/SVT Nyheter.js +381 -0
- package/vendor/zotero/modules/translators/Sacramento Bee.js +274 -0
- package/vendor/zotero/modules/translators/Safari Books Online.js +391 -0
- package/vendor/zotero/modules/translators/Scholars Portal Journals.js +220 -0
- package/vendor/zotero/modules/translators/Scholia.js +189 -0
- package/vendor/zotero/modules/translators/Schweizer Radio und Fernsehen SRF.js +152 -0
- package/vendor/zotero/modules/translators/SciELO.js +440 -0
- package/vendor/zotero/modules/translators/ScienceDirect.js +1304 -0
- package/vendor/zotero/modules/translators/Scopus.js +418 -0
- package/vendor/zotero/modules/translators/Semantic Scholar.js +513 -0
- package/vendor/zotero/modules/translators/Silverchair.js +886 -0
- package/vendor/zotero/modules/translators/Slate.js +228 -0
- package/vendor/zotero/modules/translators/SlideShare.js +112 -0
- package/vendor/zotero/modules/translators/Spiegel Online.js +343 -0
- package/vendor/zotero/modules/translators/Springer Link.js +696 -0
- package/vendor/zotero/modules/translators/Stack Exchange.js +134 -0
- package/vendor/zotero/modules/translators/Standard Ebooks.js +198 -0
- package/vendor/zotero/modules/translators/Stanford Encyclopedia of Philosophy.js +285 -0
- package/vendor/zotero/modules/translators/Stanford University Press.js +343 -0
- package/vendor/zotero/modules/translators/State Records Office of Western Australia.js +439 -0
- package/vendor/zotero/modules/translators/Stitcher.js +141 -0
- package/vendor/zotero/modules/translators/Store norske leksikon.js +291 -0
- package/vendor/zotero/modules/translators/Stuff.co.nz.js +446 -0
- package/vendor/zotero/modules/translators/Substack.js +237 -0
- package/vendor/zotero/modules/translators/Sud Ouest.js +181 -0
- package/vendor/zotero/modules/translators/Sueddeutsche.de.js +205 -0
- package/vendor/zotero/modules/translators/Summon 2.js +117 -0
- package/vendor/zotero/modules/translators/Superlib.js +647 -0
- package/vendor/zotero/modules/translators/Svenska Dagbladet.js +274 -0
- package/vendor/zotero/modules/translators/Sveriges radio.js +416 -0
- package/vendor/zotero/modules/translators/TEI.js +648 -0
- package/vendor/zotero/modules/translators/TV by the Numbers.js +194 -0
- package/vendor/zotero/modules/translators/TVNZ.js +165 -0
- package/vendor/zotero/modules/translators/Tagesspiegel.js +249 -0
- package/vendor/zotero/modules/translators/Talis Aspire.js +316 -0
- package/vendor/zotero/modules/translators/TalisPrism.js +445 -0
- package/vendor/zotero/modules/translators/Tatknigafund.js +174 -0
- package/vendor/zotero/modules/translators/Tatpressa.ru.js +121 -0
- package/vendor/zotero/modules/translators/Taylor & Francis eBooks.js +334 -0
- package/vendor/zotero/modules/translators/Taylor and Francis+NEJM.js +813 -0
- package/vendor/zotero/modules/translators/Tesis Doctorals en Xarxa.js +233 -0
- package/vendor/zotero/modules/translators/The Art Newspaper.js +268 -0
- package/vendor/zotero/modules/translators/The Atlantic.js +535 -0
- package/vendor/zotero/modules/translators/The Australian.js +105 -0
- package/vendor/zotero/modules/translators/The Boston Globe.js +285 -0
- package/vendor/zotero/modules/translators/The Chronicle of Higher Education.js +308 -0
- package/vendor/zotero/modules/translators/The Daily Beast.js +183 -0
- package/vendor/zotero/modules/translators/The Economic Times - The Times of India.js +305 -0
- package/vendor/zotero/modules/translators/The Economic Times.js +191 -0
- package/vendor/zotero/modules/translators/The Economist.js +207 -0
- package/vendor/zotero/modules/translators/The Free Dictionary.js +58 -0
- package/vendor/zotero/modules/translators/The Globe and Mail.js +241 -0
- package/vendor/zotero/modules/translators/The Guardian.js +717 -0
- package/vendor/zotero/modules/translators/The Hamilton Spectator.js +129 -0
- package/vendor/zotero/modules/translators/The Hindu (old).js +128 -0
- package/vendor/zotero/modules/translators/The Hindu.js +318 -0
- package/vendor/zotero/modules/translators/The Independent.js +184 -0
- package/vendor/zotero/modules/translators/The Intercept.js +258 -0
- package/vendor/zotero/modules/translators/The Met.js +300 -0
- package/vendor/zotero/modules/translators/The Microfinance Gateway.js +174 -0
- package/vendor/zotero/modules/translators/The Nation.js +188 -0
- package/vendor/zotero/modules/translators/The National Archives (UK).js +242 -0
- package/vendor/zotero/modules/translators/The New Republic.js +160 -0
- package/vendor/zotero/modules/translators/The New York Review of Books.js +467 -0
- package/vendor/zotero/modules/translators/The New Yorker.js +360 -0
- package/vendor/zotero/modules/translators/The Open Library.js +220 -0
- package/vendor/zotero/modules/translators/The Straits Times.js +528 -0
- package/vendor/zotero/modules/translators/The Telegraph.js +337 -0
- package/vendor/zotero/modules/translators/The Times and Sunday Times.js +180 -0
- package/vendor/zotero/modules/translators/The Times of Israel.js +151 -0
- package/vendor/zotero/modules/translators/TheMarker.js +108 -0
- package/vendor/zotero/modules/translators/Theory of Computing.js +488 -0
- package/vendor/zotero/modules/translators/ThesesFR.js +350 -0
- package/vendor/zotero/modules/translators/Thieme.js +326 -0
- package/vendor/zotero/modules/translators/Time.com.js +557 -0
- package/vendor/zotero/modules/translators/TimesMachine.js +222 -0
- package/vendor/zotero/modules/translators/Tony Blair Institute for Global Change.js +195 -0
- package/vendor/zotero/modules/translators/Toronto Star.js +331 -0
- package/vendor/zotero/modules/translators/Transportation Research Board.js +253 -0
- package/vendor/zotero/modules/translators/Treesearch.js +535 -0
- package/vendor/zotero/modules/translators/Trove.js +616 -0
- package/vendor/zotero/modules/translators/Tumblr.js +179 -0
- package/vendor/zotero/modules/translators/Twitter.js +413 -0
- package/vendor/zotero/modules/translators/UChicago VuFind.js +907 -0
- package/vendor/zotero/modules/translators/UNZ Print Archive.js +276 -0
- package/vendor/zotero/modules/translators/UPCommons.js +227 -0
- package/vendor/zotero/modules/translators/US National Archives Research Catalog.js +275 -0
- package/vendor/zotero/modules/translators/USENIX.js +151 -0
- package/vendor/zotero/modules/translators/USgamer.js +120 -0
- package/vendor/zotero/modules/translators/Ubiquity Journals.js +228 -0
- package/vendor/zotero/modules/translators/University Press Scholarship.js +301 -0
- package/vendor/zotero/modules/translators/University of California Press Books.js +403 -0
- package/vendor/zotero/modules/translators/University of Chicago Press Books.js +378 -0
- package/vendor/zotero/modules/translators/University of Wisconsin-Madison Libraries Catalog.js +298 -0
- package/vendor/zotero/modules/translators/Unqualified Dublin Core RDF.js +153 -0
- package/vendor/zotero/modules/translators/UpToDate References.js +203 -0
- package/vendor/zotero/modules/translators/Vanity Fair.js +242 -0
- package/vendor/zotero/modules/translators/Verniana-Jules Verne Studies.js +190 -0
- package/vendor/zotero/modules/translators/Verso Books.js +311 -0
- package/vendor/zotero/modules/translators/Vice.js +445 -0
- package/vendor/zotero/modules/translators/Victoria & Albert Museum.js +277 -0
- package/vendor/zotero/modules/translators/Vimeo.js +188 -0
- package/vendor/zotero/modules/translators/VoxEU.js +151 -0
- package/vendor/zotero/modules/translators/WHO.js +458 -0
- package/vendor/zotero/modules/translators/WIPO.js +189 -0
- package/vendor/zotero/modules/translators/Wall Street Journal.js +525 -0
- package/vendor/zotero/modules/translators/Wanfang Data.js +310 -0
- package/vendor/zotero/modules/translators/Washington Monthly.js +195 -0
- package/vendor/zotero/modules/translators/Washington Post.js +447 -0
- package/vendor/zotero/modules/translators/Web of Science Nextgen.js +832 -0
- package/vendor/zotero/modules/translators/Web of Science Tagged.js +1247 -0
- package/vendor/zotero/modules/translators/Web of Science.js +228 -0
- package/vendor/zotero/modules/translators/Welt Online.js +161 -0
- package/vendor/zotero/modules/translators/WestLaw UK.js +190 -0
- package/vendor/zotero/modules/translators/WikiLeaks PlusD.js +182 -0
- package/vendor/zotero/modules/translators/Wikidata QuickStatements.js +324 -0
- package/vendor/zotero/modules/translators/Wikidata.js +911 -0
- package/vendor/zotero/modules/translators/Wikimedia Commons.js +285 -0
- package/vendor/zotero/modules/translators/Wikipedia Citation Templates.js +432 -0
- package/vendor/zotero/modules/translators/Wikipedia.js +385 -0
- package/vendor/zotero/modules/translators/Wikisource.js +399 -0
- package/vendor/zotero/modules/translators/Wikiwand.js +122 -0
- package/vendor/zotero/modules/translators/Wiktionary.js +141 -0
- package/vendor/zotero/modules/translators/Wildlife Biology in Practice.js +172 -0
- package/vendor/zotero/modules/translators/Wiley Online Library.js +1412 -0
- package/vendor/zotero/modules/translators/Wilson Center Digital Archive.js +321 -0
- package/vendor/zotero/modules/translators/Winnipeg Free Press.js +204 -0
- package/vendor/zotero/modules/translators/Wired.js +249 -0
- package/vendor/zotero/modules/translators/Womennews.js +230 -0
- package/vendor/zotero/modules/translators/World Digital Library.js +403 -0
- package/vendor/zotero/modules/translators/World History Connected.js +185 -0
- package/vendor/zotero/modules/translators/World Shakespeare Bibliography Online.js +595 -0
- package/vendor/zotero/modules/translators/XML ContextObject.js +274 -0
- package/vendor/zotero/modules/translators/YPSF.js +224 -0
- package/vendor/zotero/modules/translators/Yandex Books.js +265 -0
- package/vendor/zotero/modules/translators/Ynet.js +171 -0
- package/vendor/zotero/modules/translators/YouTube.js +209 -0
- package/vendor/zotero/modules/translators/ZIPonline.js +267 -0
- package/vendor/zotero/modules/translators/ZOBODAT.js +341 -0
- package/vendor/zotero/modules/translators/Zotero RDF.js +583 -0
- package/vendor/zotero/modules/translators/ZoteroBib.js +94 -0
- package/vendor/zotero/modules/translators/arXiv.org.js +1099 -0
- package/vendor/zotero/modules/translators/artnet.js +207 -0
- package/vendor/zotero/modules/translators/beck-online.js +1339 -0
- package/vendor/zotero/modules/translators/clinicaltrials.gov.js +331 -0
- package/vendor/zotero/modules/translators/dLibra.js +367 -0
- package/vendor/zotero/modules/translators/dejure.org.js +242 -0
- package/vendor/zotero/modules/translators/dhistory.js +103 -0
- package/vendor/zotero/modules/translators/digibib.net.js +245 -0
- package/vendor/zotero/modules/translators/eLibrary.ru.js +867 -0
- package/vendor/zotero/modules/translators/eLife.js +462 -0
- package/vendor/zotero/modules/translators/eMJA.js +246 -0
- package/vendor/zotero/modules/translators/eMedicine.js +123 -0
- package/vendor/zotero/modules/translators/ePrint IACR.js +608 -0
- package/vendor/zotero/modules/translators/ebrary.js +140 -0
- package/vendor/zotero/modules/translators/etatar.ru.js +104 -0
- package/vendor/zotero/modules/translators/feb-web.ru.js +167 -0
- package/vendor/zotero/modules/translators/fishpond.co.nz.js +224 -0
- package/vendor/zotero/modules/translators/fr-online.de.js +209 -0
- package/vendor/zotero/modules/translators/govinfo.js +189 -0
- package/vendor/zotero/modules/translators/informIT database.js +248 -0
- package/vendor/zotero/modules/translators/io-port.js +68 -0
- package/vendor/zotero/modules/translators/jmlr.js +299 -0
- package/vendor/zotero/modules/translators/jurion.js +377 -0
- package/vendor/zotero/modules/translators/mEDRA.js +597 -0
- package/vendor/zotero/modules/translators/magazines.russ.ru.js +120 -0
- package/vendor/zotero/modules/translators/medes.js +284 -0
- package/vendor/zotero/modules/translators/newshub.co.nz.js +206 -0
- package/vendor/zotero/modules/translators/newspapers.com.js +335 -0
- package/vendor/zotero/modules/translators/openJur.js +161 -0
- package/vendor/zotero/modules/translators/reddit.js +275 -0
- package/vendor/zotero/modules/translators/sbn.it.js +186 -0
- package/vendor/zotero/modules/translators/scinapse.js +273 -0
- package/vendor/zotero/modules/translators/semantics Visual Library.js +643 -0
- package/vendor/zotero/modules/translators/taz.de.js +200 -0
- package/vendor/zotero/modules/translators/unAPI.js +481 -0
- package/vendor/zotero/modules/translators/washingtonpost.com.js +257 -0
- package/vendor/zotero/modules/translators/wiso.js +314 -0
- package/vendor/zotero/modules/translators/zbMATH.js +278 -0
- package/vendor/zotero/modules/translators/zotero.org.js +311 -0
- package/vendor/zotero/modules/utilities/README.md +25 -0
- package/vendor/zotero/modules/utilities/cachedTypes.js +193 -0
- package/vendor/zotero/modules/utilities/date.js +958 -0
- package/vendor/zotero/modules/utilities/openurl.js +458 -0
- package/vendor/zotero/modules/utilities/resource/README.md +4 -0
- package/vendor/zotero/modules/utilities/resource/dateFormats.json +1322 -0
- package/vendor/zotero/modules/utilities/resource/schema/global/README.md +15 -0
- package/vendor/zotero/modules/utilities/resource/schema/global/schema.json +12072 -0
- package/vendor/zotero/modules/utilities/resource/zoteroTypeSchemaData.js +5 -0
- package/vendor/zotero/modules/utilities/schema.js +65 -0
- package/vendor/zotero/modules/utilities/utilities.js +1841 -0
- package/vendor/zotero/modules/utilities/utilities_item.js +1082 -0
- package/vendor/zotero/modules/utilities/xregexp-all.js +4652 -0
- package/vendor/zotero/modules/utilities/xregexp-unicode-zotero.js +58 -0
- package/vendor/zotero/modules/zotero-schema/README.md +15 -0
- package/vendor/zotero/modules/zotero-schema/schema.json +12072 -0
- package/vendor/zotero/package-lock.json +4332 -0
- package/vendor/zotero/package.json +44 -0
- package/vendor/zotero/spec.yaml +142 -0
- package/vendor/zotero/src/args.js +43 -0
- package/vendor/zotero/src/cors.js +28 -0
- package/vendor/zotero/src/debug.js +189 -0
- package/vendor/zotero/src/exportEndpoint.js +97 -0
- package/vendor/zotero/src/formats.js +43 -0
- package/vendor/zotero/src/http.js +478 -0
- package/vendor/zotero/src/importEndpoint.js +54 -0
- package/vendor/zotero/src/lambda.js +75 -0
- package/vendor/zotero/src/proxy.js +356 -0
- package/vendor/zotero/src/searchEndpoint.js +97 -0
- package/vendor/zotero/src/server.js +85 -0
- package/vendor/zotero/src/specEndpoint.js +135 -0
- package/vendor/zotero/src/testEndpoint.js +50 -0
- package/vendor/zotero/src/textSearch.js +527 -0
- package/vendor/zotero/src/translation/sandboxManager.js +109 -0
- package/vendor/zotero/src/translation/translate.js +101 -0
- package/vendor/zotero/src/translation/translate_item.js +88 -0
- package/vendor/zotero/src/translators.js +264 -0
- package/vendor/zotero/src/utilities.js +49 -0
- package/vendor/zotero/src/webEndpoint.js +113 -0
- package/vendor/zotero/src/webSession.js +476 -0
- package/vendor/zotero/src/zotero.js +117 -0
- package/vendor/zotero/translate_export +10 -0
- package/vendor/zotero/translate_search +9 -0
- package/vendor/zotero/translate_url +9 -0
- package/vendor/zotero/translate_url_multiple +9 -0
- package/vendor/zotero/translate_url_single +9 -0
|
@@ -0,0 +1,1118 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Handles requests to the citoid service
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/* Import Modules */
|
|
8
|
+
const BBPromise = require( 'bluebird' );
|
|
9
|
+
const contentType = require( 'content-type' );
|
|
10
|
+
const urlParse = require( 'url' );
|
|
11
|
+
|
|
12
|
+
/* Import Local Modules */
|
|
13
|
+
const Citation = require( './Citation.js' );
|
|
14
|
+
const CitoidError = require( './CitoidError.js' );
|
|
15
|
+
const cRef = require( './translators/crossRef.js' );
|
|
16
|
+
const CrossRefService = require( './external-apis/CrossRefService.js' );
|
|
17
|
+
const Exporter = require( './Exporter.js' ).Exporter;
|
|
18
|
+
const OpenAlexService = require( './external-apis/OpenAlexService.js' );
|
|
19
|
+
const PubMedService = require( './external-apis/PubMedService.js' );
|
|
20
|
+
const SemanticScholarService = require( './external-apis/SemanticScholarService.js' );
|
|
21
|
+
const Scraper = require( './Scraper.js' ).Scraper;
|
|
22
|
+
const Translator = require( './Translator.js' );
|
|
23
|
+
const unshorten = require( './unshorten.js' );
|
|
24
|
+
const WaybackMachine = require( './external-apis/WaybackMachine.js' );
|
|
25
|
+
const ZoteroService = require( './ZoteroService.js' );
|
|
26
|
+
|
|
27
|
+
class CitoidService {
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Constructor for CitoidService object
|
|
31
|
+
*
|
|
32
|
+
* @param {Object} app Express object containing logger, stats, conf
|
|
33
|
+
*/
|
|
34
|
+
constructor( app ) {
|
|
35
|
+
|
|
36
|
+
this.stats = app.metrics;
|
|
37
|
+
this.conf = app.conf;
|
|
38
|
+
|
|
39
|
+
this.constructMetrics( app.metrics );
|
|
40
|
+
|
|
41
|
+
// Only create zoteroService if configured to
|
|
42
|
+
if ( this.conf.zotero ) {
|
|
43
|
+
this.zoteroService = new ZoteroService( app );
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Exports internal format (zotero) to other formats (i.e., mediawiki)
|
|
47
|
+
this.exporter = new Exporter( app );
|
|
48
|
+
// Provides translation functions for following Objs
|
|
49
|
+
this.translator = new Translator( app );
|
|
50
|
+
// Loads html and scrapes it
|
|
51
|
+
this.scraper = new Scraper( app, this.translator, this.exporter );
|
|
52
|
+
|
|
53
|
+
this.crossRefService = new CrossRefService( app );
|
|
54
|
+
if ( app.conf.openAlex && app.conf.openAlex.enabled ) {
|
|
55
|
+
this.openAlexService = new OpenAlexService( app );
|
|
56
|
+
}
|
|
57
|
+
this.pubMedService = new PubMedService( app );
|
|
58
|
+
if ( app.conf.semanticScholar && app.conf.semanticScholar.enabled ) {
|
|
59
|
+
this.semanticScholarService = new SemanticScholarService( app );
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
if ( this.conf.wayback ) {
|
|
63
|
+
this.waybackService = new WaybackMachine( app );
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Only create circular references for zoteroService if configured to
|
|
67
|
+
if ( this.conf.zotero ) {
|
|
68
|
+
this.zoteroService.exporter = this.exporter;
|
|
69
|
+
this.exporter.zoteroService = this.zoteroService;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Constructor for metrics
|
|
76
|
+
*
|
|
77
|
+
* @param {Object} metrics service-runner metrics object
|
|
78
|
+
*/
|
|
79
|
+
constructMetrics( metrics ) {
|
|
80
|
+
|
|
81
|
+
metrics.apiuseragent = metrics.makeMetric( {
|
|
82
|
+
type: 'Counter',
|
|
83
|
+
name: 'apiuseragent',
|
|
84
|
+
prometheus: {
|
|
85
|
+
name: 'citoid_api_user_agent_total',
|
|
86
|
+
help: 'number of requests by api user agent type',
|
|
87
|
+
staticLabels: metrics.getServiceLabel()
|
|
88
|
+
},
|
|
89
|
+
labels: {
|
|
90
|
+
names: [ 'type', 'status' ]
|
|
91
|
+
}
|
|
92
|
+
} );
|
|
93
|
+
|
|
94
|
+
metrics.format = metrics.makeMetric( {
|
|
95
|
+
type: 'Counter',
|
|
96
|
+
name: 'format',
|
|
97
|
+
prometheus: {
|
|
98
|
+
name: 'citoid_format_parameter_total',
|
|
99
|
+
help: 'number of requests by format requested',
|
|
100
|
+
staticLabels: metrics.getServiceLabel()
|
|
101
|
+
},
|
|
102
|
+
labels: {
|
|
103
|
+
names: [ 'format' ]
|
|
104
|
+
}
|
|
105
|
+
} );
|
|
106
|
+
|
|
107
|
+
metrics.input = metrics.makeMetric( {
|
|
108
|
+
type: 'Counter',
|
|
109
|
+
name: 'input',
|
|
110
|
+
prometheus: {
|
|
111
|
+
name: 'citoid_input_type_total',
|
|
112
|
+
help: 'number of requests by input type requested',
|
|
113
|
+
staticLabels: metrics.getServiceLabel()
|
|
114
|
+
},
|
|
115
|
+
labels: {
|
|
116
|
+
names: [ 'input' ]
|
|
117
|
+
}
|
|
118
|
+
} );
|
|
119
|
+
|
|
120
|
+
metrics.zotero = {};
|
|
121
|
+
metrics.zotero.req = metrics.makeMetric( {
|
|
122
|
+
type: 'Counter',
|
|
123
|
+
name: 'zotero.req',
|
|
124
|
+
prometheus: {
|
|
125
|
+
name: 'citoid_zotero_requests_total',
|
|
126
|
+
help: 'number of requests to zotero by zotero response',
|
|
127
|
+
staticLabels: metrics.getServiceLabel()
|
|
128
|
+
},
|
|
129
|
+
labels: {
|
|
130
|
+
names: [ 'status' ]
|
|
131
|
+
}
|
|
132
|
+
} );
|
|
133
|
+
|
|
134
|
+
metrics.zotero.req.error = metrics.makeMetric( {
|
|
135
|
+
type: 'Counter',
|
|
136
|
+
name: 'zotero.req.error',
|
|
137
|
+
prometheus: {
|
|
138
|
+
name: 'citoid_zotero_requests_errors_total',
|
|
139
|
+
help: 'number of zotero errors',
|
|
140
|
+
staticLabels: metrics.getServiceLabel()
|
|
141
|
+
}
|
|
142
|
+
} );
|
|
143
|
+
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Requests to the citoid service
|
|
148
|
+
*
|
|
149
|
+
* @param {Object} cr CitoidRequest object
|
|
150
|
+
* @return {Object} BBPromise for CitoidRequest object
|
|
151
|
+
*/
|
|
152
|
+
request( cr ) {
|
|
153
|
+
return this.addResponseFunction( cr ).then(
|
|
154
|
+
( crInner ) => BBPromise.all(
|
|
155
|
+
crInner.getResults.map( ( x ) => x.reflect() ) )
|
|
156
|
+
.then( cr.fillBody.bind( cr ), cr.fillBody.bind( cr ) ), cr.fillBody.bind( cr )
|
|
157
|
+
).catch( ( e ) => {
|
|
158
|
+
cr.logger.log( 'warn/citoidRequest', e );
|
|
159
|
+
} );
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Promise for adding correct response function given input type
|
|
164
|
+
*
|
|
165
|
+
* @param {Object} cr CitoidRequest object with new functions added to getResults Array
|
|
166
|
+
* @return {Object} BBPromise object for modified CitoidRequest object from input
|
|
167
|
+
*/
|
|
168
|
+
addResponseFunction( cr ) {
|
|
169
|
+
const logger = cr.logger;
|
|
170
|
+
const zotero = this.conf.zotero;
|
|
171
|
+
const search = cr.search;
|
|
172
|
+
const lowerSearch = search.toLowerCase();
|
|
173
|
+
|
|
174
|
+
let cit;
|
|
175
|
+
let idValue;
|
|
176
|
+
let parsedURL;
|
|
177
|
+
let url = '';
|
|
178
|
+
|
|
179
|
+
logger.log( 'trace/CitoidService', 'Adding response function' );
|
|
180
|
+
|
|
181
|
+
if ( cr.format ) {
|
|
182
|
+
this.stats.format.increment( 1, [ cr.format ] ); // Record requested format statistics
|
|
183
|
+
} else {
|
|
184
|
+
return BBPromise.reject( 'No format in citoid request' );
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// Try to parse a candidate url and add http as protocol if missing
|
|
188
|
+
const setParsedURL = ( candidate ) => {
|
|
189
|
+
try {
|
|
190
|
+
parsedURL = new URL( candidate );
|
|
191
|
+
url = urlParse.format( parsedURL );
|
|
192
|
+
} catch ( e ) {
|
|
193
|
+
// Set protocol to https if it is missing, and re-parse url
|
|
194
|
+
try {
|
|
195
|
+
parsedURL = new URL( `https://${ candidate }` );
|
|
196
|
+
url = urlParse.format( parsedURL );
|
|
197
|
+
} catch ( e2 ) {}
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
|
|
201
|
+
setParsedURL( search );
|
|
202
|
+
|
|
203
|
+
/* Regex fields */
|
|
204
|
+
// Assumes all strings with http/s protocol are URLs
|
|
205
|
+
// eslint-disable-next-line security/detect-unsafe-regex
|
|
206
|
+
const reDOI = /\b10\.[0-9]{3,5}(?:[.][0-9]+)*\/.*/;
|
|
207
|
+
const reHTTP = /^((https?):\/\/.+)/;
|
|
208
|
+
// Used for detecting matches only, not selecting.
|
|
209
|
+
const reISBN = /((?:978[--– ])?[0-9][0-9--– ]{10}[--– ][0-9xX])|((?:978)?[0-9]{9}[0-9Xx])/g;
|
|
210
|
+
const rePMCID = /\bPMC\d{7}\b/;
|
|
211
|
+
// eslint-disable-next-line security/detect-unsafe-regex
|
|
212
|
+
const rePMIDURL = /^(?:https?:\/\/)?www.ncbi.nlm.nih.gov\/pubmed\/(\d+)\/?|^(?:https?:\/\/)?pubmed.ncbi.nlm.nih.gov\/(\d+)\/?/i; // Captures pmid out of url; old and new patterns respectively
|
|
213
|
+
// eslint-disable-next-line security/detect-unsafe-regex
|
|
214
|
+
const rePMCURL = /^(?:https?:\/\/)?www.ncbi.nlm.nih.gov\/pmc\/articles\/(PMC\d+)\/?|^(?:https?:\/\/)?pmc.ncbi.nlm.nih.gov\/articles\/(PMC\d+)\/?/i; // Captures pmc out of url
|
|
215
|
+
// eslint-disable-next-line security/detect-unsafe-regex
|
|
216
|
+
const reArxivURL = /^(?:https?:\/\/)?(?:www\.)?arxiv\.org\/(?:abs|pdf)\/([^?#]+?)(?:\.pdf)?(?:[?#].*)?$/i;
|
|
217
|
+
// eslint-disable-next-line security/detect-unsafe-regex
|
|
218
|
+
const reArxivId = /^(?:arxiv:)?((?:\d{4}\.\d{4,5}|[a-z-]+(?:\.[A-Z]{2})?\/\d{7})(?:v\d+)?)$/i;
|
|
219
|
+
const reQID = /^[Qq][1-9]+[0-9]*$/; // Strict QIQ match - doesn't get it out of whitespace
|
|
220
|
+
// Assumes all strings with www substring are URLs
|
|
221
|
+
const reWWW = /^((www)\..+\..+)/;
|
|
222
|
+
// Detects url *inside* a search string
|
|
223
|
+
// eslint-disable-next-line security/detect-unsafe-regex
|
|
224
|
+
const reURI = /(?:https?:\/\/|www\.)(?:\([-A-Z0-9+&@#/%=~_$?!:,.]*\)|[-A-Z0-9+&@#/%=~_$?!:,.])*(?:\([-A-Z0-9+&@#/%=~_$?!:,.]*\)|[A-Z0-9+&@#/%=~_$])/igm;
|
|
225
|
+
|
|
226
|
+
/* Regex Matches */
|
|
227
|
+
// Look for DOI in URL with query string removed or original search parameter
|
|
228
|
+
const matchDOI = url.match( reDOI ) || lowerSearch.match( reDOI );
|
|
229
|
+
const matchHTTP = search.match( reHTTP );
|
|
230
|
+
const matchQID = search.match( reQID );
|
|
231
|
+
const matchPMCID = search.match( rePMCID );
|
|
232
|
+
const matchPMCURL = search.match( rePMCURL );
|
|
233
|
+
const matchPMIDURL = search.match( rePMIDURL );
|
|
234
|
+
const matchArxivURL = search.match( reArxivURL );
|
|
235
|
+
const matchArxivId = search.match( reArxivId );
|
|
236
|
+
const matchWWW = search.match( reWWW );
|
|
237
|
+
const matchURI = search.match( reURI );
|
|
238
|
+
|
|
239
|
+
if ( matchDOI && matchDOI[ 0 ] ) {
|
|
240
|
+
cr.doi = matchDOI[ 0 ];
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
if ( matchPMCURL ) {
|
|
244
|
+
logger.log( 'trace/CitoidService', 'PMC URL detected' );
|
|
245
|
+
cit = new Citation( 'pmcid', matchPMCURL[ 1 ] || matchPMCURL[ 2 ] ); // 1 is full url, pmc is in either 1 or 2 depending
|
|
246
|
+
cr.response.citations.push( cit );
|
|
247
|
+
cr.getResults.push( this.requestFromPM( cit, cr ) );
|
|
248
|
+
this.stats.input.increment( 1, [ 'url' ] ); // Though we handle this as a pmc, record as url input for metrics purposes
|
|
249
|
+
return BBPromise.resolve( cr );
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
if ( matchPMIDURL ) {
|
|
253
|
+
logger.log( 'trace/CitoidService', 'PubMed URL detected' );
|
|
254
|
+
cit = new Citation( 'pmid', matchPMIDURL[ 1 ] || matchPMIDURL[ 2 ] );
|
|
255
|
+
cr.response.citations.push( cit );
|
|
256
|
+
cr.getResults.push( this.requestFromPM( cit, cr ) );
|
|
257
|
+
this.stats.input.increment( 1, [ 'url' ] ); // Though we handle this as a pmid, record as url input for metrics purposes
|
|
258
|
+
return BBPromise.resolve( cr );
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
if ( this.semanticScholarService && this.semanticScholarService.preferForArxiv &&
|
|
262
|
+
( matchArxivURL || matchArxivId ) ) {
|
|
263
|
+
logger.log( 'trace/CitoidService', 'arXiv identifier detected' );
|
|
264
|
+
idValue = ( matchArxivURL && matchArxivURL[ 1 ] ) ||
|
|
265
|
+
( matchArxivId && matchArxivId[ 1 ] );
|
|
266
|
+
cit = new Citation( 'any', idValue );
|
|
267
|
+
cr.response.citations.push( cit );
|
|
268
|
+
cr.getResults.push( this.requestFromArxiv( cit, cr ) );
|
|
269
|
+
this.stats.input.increment( 1, [ matchArxivURL ? 'url' : 'any' ] );
|
|
270
|
+
return BBPromise.resolve( cr );
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
if ( matchHTTP || matchWWW ) {
|
|
274
|
+
idValue = matchHTTP ? encodeURI( matchHTTP[ 0 ] ) : `http://${ encodeURI( matchWWW[ 0 ] ) }`;
|
|
275
|
+
logger.log( 'trace/CitoidService', 'Found URI' );
|
|
276
|
+
cit = new Citation( 'url', idValue );
|
|
277
|
+
cr.response.citations.push( cit );
|
|
278
|
+
cr.getResults.push( this.requestFromURL( cit, cr ) );
|
|
279
|
+
this.stats.input.increment( 1, [ 'url' ] );
|
|
280
|
+
return BBPromise.resolve( cr );
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
if ( matchDOI ) {
|
|
284
|
+
logger.log( 'trace/CitoidService', 'DOI detected' );
|
|
285
|
+
cit = new Citation( 'doi', matchDOI[ 0 ] );
|
|
286
|
+
cr.response.citations.push( cit );
|
|
287
|
+
cr.getResults.push( this.requestFromDOI( cit, cr ) );
|
|
288
|
+
this.stats.input.increment( 1, [ 'doi' ] );
|
|
289
|
+
return BBPromise.resolve( cr );
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
if ( matchQID ) {
|
|
293
|
+
logger.log( 'trace/CitoidService', 'QID detected' );
|
|
294
|
+
const wikidataURL = `https://www.wikidata.org/wiki/${ matchQID[ 0 ] }`;
|
|
295
|
+
cit = new Citation( 'url', wikidataURL );
|
|
296
|
+
cit.qid = matchQID[ 0 ].toUpperCase();
|
|
297
|
+
cr.response.citations.push( cit );
|
|
298
|
+
cr.getResults.push( this.requestFromURL( cit, cr ) );
|
|
299
|
+
this.stats.input.increment( 1, [ 'qid' ] );
|
|
300
|
+
return BBPromise.resolve( cr );
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
if ( matchPMCID ) {
|
|
304
|
+
logger.log( 'trace/CitoidService', 'PMCID detected' );
|
|
305
|
+
cit = new Citation( 'pmcid', matchPMCID[ 0 ] );
|
|
306
|
+
cr.response.citations.push( cit );
|
|
307
|
+
cr.getResults.push( this.requestFromPM( cit, cr ) );
|
|
308
|
+
this.stats.input.increment( 1, [ 'pmcid' ] );
|
|
309
|
+
return BBPromise.resolve( cr );
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
// Original isbn match is too lenient; this gets actual isbn more
|
|
313
|
+
// accurately by cleaning out non-numerical characters
|
|
314
|
+
if ( reISBN.test( search ) ) {
|
|
315
|
+
if ( zotero ) { // Enable isbn usage
|
|
316
|
+
const reDash = /[-–]+/g;
|
|
317
|
+
const reISBN2 = /((97[8-9] ?)[0-9]{10}|[0-9]{9}[0-9xX])/g;
|
|
318
|
+
const value = search.trim().replace( reDash, '' );
|
|
319
|
+
const match = value.match( reISBN2 );
|
|
320
|
+
if ( match ) {
|
|
321
|
+
logger.log( 'trace/CitoidService', 'ISBN detected' );
|
|
322
|
+
let matchISBN2 = match[ 0 ];
|
|
323
|
+
// Remove any spaces (e.g. 978 0810935310)
|
|
324
|
+
matchISBN2 = matchISBN2.replace( / +/g, '' );
|
|
325
|
+
cit = new Citation( 'isbn', matchISBN2 );
|
|
326
|
+
cr.response.citations.push( cit );
|
|
327
|
+
cr.getResults.push( this.requestToZotISBN( cit, cr ) );
|
|
328
|
+
this.stats.input.increment( 1, [ 'isbn' ] );
|
|
329
|
+
return BBPromise.resolve( cr );
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
} else {
|
|
333
|
+
// Avoid interpreting ISBNs as PMIDs if ISBNs are not enabled
|
|
334
|
+
// (since PMID regex captures strings of one to eight numbers)
|
|
335
|
+
// Accepts 'PMID 1234' or '1234'; No 9 digit pmids yet.
|
|
336
|
+
const rePMID = /^(?:PMID )?([1-9]\d{0,8})\b/;
|
|
337
|
+
const matchPMID = search.match( rePMID );
|
|
338
|
+
if ( matchPMID ) {
|
|
339
|
+
logger.log( 'trace/CitoidService', 'PMID or PMCID detected' );
|
|
340
|
+
cit = new Citation( 'pmid', matchPMID[ 1 ] );
|
|
341
|
+
cr.response.citations.push( cit );
|
|
342
|
+
cr.getResults.push( this.requestFromPM( cit, cr ) );
|
|
343
|
+
this.stats.input.increment( 1, [ 'pmid' ] );
|
|
344
|
+
// Possibly a PMCID or an OCLC
|
|
345
|
+
if ( matchPMID[ 0 ] === matchPMID[ 1 ] ) { // Just a string of less than 9 digits
|
|
346
|
+
cit = new Citation( 'pmcid', `PMC${ matchPMID[ 1 ] }` );
|
|
347
|
+
cr.response.citations.push( cit );
|
|
348
|
+
cr.getResults.push( this.requestFromPM( cit, cr ) );
|
|
349
|
+
}
|
|
350
|
+
return BBPromise.resolve( cr );
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
// If it has at least one period and no spaces, assume it's a url
|
|
355
|
+
// Matches things like 'example.com', excludes things like 'mediawiki' and 'Harry Potter'.
|
|
356
|
+
if ( url && search.includes( '.' ) && !search.includes( ' ' ) ) {
|
|
357
|
+
logger.log( 'trace/CitoidService', 'Trying URI' );
|
|
358
|
+
cit = new Citation( 'url', url );
|
|
359
|
+
cr.response.citations.push( cit );
|
|
360
|
+
cr.getResults.push( this.requestFromURL( cit, cr ) );
|
|
361
|
+
this.stats.input.increment( 1, [ 'url' ] );
|
|
362
|
+
return BBPromise.resolve( cr );
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
// Case: Unknown input
|
|
366
|
+
// Try open search, and also try to extract URI from inside input
|
|
367
|
+
|
|
368
|
+
// Try open search for all other queries
|
|
369
|
+
logger.log( 'trace/CitoidService', 'Trying open search query' );
|
|
370
|
+
cit = new Citation( 'any', search );
|
|
371
|
+
cr.response.citations.push( cit );
|
|
372
|
+
cr.getResults.push( this.requestFromSearch( cit, cr ) );
|
|
373
|
+
this.stats.input.increment( 1, [ 'any' ] );
|
|
374
|
+
|
|
375
|
+
// Pulls URL from inside a query contain spaces and other text, i.e. formatted
|
|
376
|
+
// citations like 'The Title. www.example.com. Accessed 5/3/18'
|
|
377
|
+
if ( matchURI ) {
|
|
378
|
+
setParsedURL( matchURI[ 0 ] );
|
|
379
|
+
idValue = encodeURI( url );
|
|
380
|
+
logger.log( 'trace/CitoidService', 'Found URI' );
|
|
381
|
+
cit = new Citation( 'url', idValue );
|
|
382
|
+
cr.response.citations.push( cit );
|
|
383
|
+
cr.getResults.push( this.requestFromURL( cit, cr ) );
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
return BBPromise.resolve( cr );
|
|
387
|
+
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
/**
|
|
391
|
+
* Generic function for citation objects which are unable to be created
|
|
392
|
+
*
|
|
393
|
+
* @param {Object} citation Citation object
|
|
394
|
+
* @param {Object} cr CitoidRequest object
|
|
395
|
+
* @param {Object} [error] optional CitoidError object
|
|
396
|
+
* @return {Object} CitoidRequest object
|
|
397
|
+
*/
|
|
398
|
+
rejectWithError( citation, cr, error ) {
|
|
399
|
+
if ( error ) {
|
|
400
|
+
citation.error = error;
|
|
401
|
+
}
|
|
402
|
+
if ( !citation.error ) {
|
|
403
|
+
citation.error = new CitoidError(); // internal server error
|
|
404
|
+
}
|
|
405
|
+
return cr;
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
/**
|
|
409
|
+
* Generic function for failed creation of ISBN requests
|
|
410
|
+
*
|
|
411
|
+
* @param {Object} citation Citation object
|
|
412
|
+
* @param {Object} cr CitoidRequest object
|
|
413
|
+
* @return {Object} CitoidRequest object
|
|
414
|
+
*/
|
|
415
|
+
rejectISBN( citation, cr ) {
|
|
416
|
+
const message = `Unable to retrieve data from ISBN ${ citation.isbn }`;
|
|
417
|
+
cr.logger.log( 'debug/ISBN', message );
|
|
418
|
+
citation.error = new CitoidError( null, message, 404 );
|
|
419
|
+
return cr;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
/**
|
|
423
|
+
* Promise of citation metadata from a DOI
|
|
424
|
+
*
|
|
425
|
+
* @param {Object} citation the citation object
|
|
426
|
+
* @param {Object} cr CitoidRequest object with doi and format
|
|
427
|
+
* @return {Object} BBPromise for CitoidRequest object
|
|
428
|
+
*/
|
|
429
|
+
requestFromDOI( citation, cr ) {
|
|
430
|
+
cr.logger.log( 'trace/CitoidService', 'requestFromDOI method' );
|
|
431
|
+
citation.format = cr.format;
|
|
432
|
+
const doi = citation.doi = citation.doi || cr.doi;
|
|
433
|
+
const timeout = this.conf.timeout; // Milliseconds to wait before returning w/ crossref data
|
|
434
|
+
|
|
435
|
+
if ( doi === undefined ) {
|
|
436
|
+
return BBPromise.reject( 'No doi in citoid request object' );
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
// We don't wait for this promise to finish because it can be quite slow;
|
|
440
|
+
// If it gets the IDs in time, good, if not, it won't.
|
|
441
|
+
if ( !citation.hasRequestedPubMed && ( doi || citation.pmcid || citation.pmid ) ) {
|
|
442
|
+
citation.hasRequestedPubMed = this.exporter.fetchPubMedIDs( citation, cr.request );
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
const onReject = () => {
|
|
446
|
+
const message = `Unable to resolve DOI ${ encodeURI( doi ) }`;
|
|
447
|
+
cr.logger.log( 'debug/DOI', message );
|
|
448
|
+
citation.error = new CitoidError( null, message, 404 );
|
|
449
|
+
return cr;
|
|
450
|
+
};
|
|
451
|
+
|
|
452
|
+
// Zotero
|
|
453
|
+
const onResolve = ( innerCr ) => {
|
|
454
|
+
innerCr.logger.log( 'trace/zotero', 'Successfully retrieved body from Zotero' );
|
|
455
|
+
return innerCr;
|
|
456
|
+
};
|
|
457
|
+
|
|
458
|
+
const doiLink = `https://doi.org/${ doi }`;
|
|
459
|
+
|
|
460
|
+
// Get data from crossref - reject promise if not 200
|
|
461
|
+
const crossref = () => this.crossRefService.doi( doi, cr.request ).then( ( metadata ) => {
|
|
462
|
+
if ( metadata.type && cRef.types[ metadata.type ] ) {
|
|
463
|
+
citation.content.itemType = cRef.types[ metadata.type ];
|
|
464
|
+
} else {
|
|
465
|
+
citation.content.itemType = 'journalArticle'; // Default itemType
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
const typeTranslator = cRef[ citation.content.itemType ];
|
|
469
|
+
// If there are no appropriate translators, return.
|
|
470
|
+
if ( !typeTranslator ) {
|
|
471
|
+
return onReject();
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
citation.content = this.translator.translate( citation.content,
|
|
475
|
+
metadata, typeTranslator );
|
|
476
|
+
|
|
477
|
+
citation.source.push( 'Crossref' );
|
|
478
|
+
|
|
479
|
+
citation.error = null; // Clear any previously existing citation errors
|
|
480
|
+
|
|
481
|
+
return BBPromise.resolve( cr );
|
|
482
|
+
// Rejection handler
|
|
483
|
+
}, () => {
|
|
484
|
+
cr.logger.log( 'debug/scraper', 'Failed to get crossRef data' );
|
|
485
|
+
return BBPromise.reject();
|
|
486
|
+
} ).catch( ( e ) => {
|
|
487
|
+
cr.logger.log( 'debug/citoidRequest', e );
|
|
488
|
+
return BBPromise.reject();
|
|
489
|
+
} );
|
|
490
|
+
|
|
491
|
+
const semanticScholar = () => {
|
|
492
|
+
if ( !this.semanticScholarService ) {
|
|
493
|
+
return BBPromise.reject();
|
|
494
|
+
}
|
|
495
|
+
return this.semanticScholarService.getPaper( `DOI:${ doi }`, cr.request )
|
|
496
|
+
.then( ( paper ) => {
|
|
497
|
+
citation.content = this.semanticScholarService.toCitation( paper, doiLink );
|
|
498
|
+
citation.source.push( 'Semantic Scholar' );
|
|
499
|
+
citation.error = null;
|
|
500
|
+
return cr;
|
|
501
|
+
}, () => BBPromise.reject() );
|
|
502
|
+
};
|
|
503
|
+
|
|
504
|
+
const openAlex = () => {
|
|
505
|
+
if ( !this.openAlexService ) {
|
|
506
|
+
return BBPromise.reject();
|
|
507
|
+
}
|
|
508
|
+
return this.openAlexService.getWork( `https://doi.org/${ doi }`, cr.request )
|
|
509
|
+
.then( ( work ) => {
|
|
510
|
+
citation.content = this.openAlexService.toCitation( work, doiLink );
|
|
511
|
+
citation.source.push( 'OpenAlex' );
|
|
512
|
+
citation.error = null;
|
|
513
|
+
return cr;
|
|
514
|
+
}, () => BBPromise.reject() );
|
|
515
|
+
};
|
|
516
|
+
|
|
517
|
+
// Resolve canonical URL from DOI URL - reject promise if not 200
|
|
518
|
+
// TODO: remove duplicate unshorten as requestFromUrl does this already
|
|
519
|
+
const fromURL = unshorten( doiLink, cr, citation )
|
|
520
|
+
.then( ( cit ) => {
|
|
521
|
+
// Send canonical URL to requestFromURL
|
|
522
|
+
cr.logger.log( 'debug/DOI', `Resolved DOI ${
|
|
523
|
+
doi } to URL ${ cit.resolvedUrl
|
|
524
|
+
}; Sending to requestFromURL` );
|
|
525
|
+
return this.requestFromURL( cit, cr, true ).then(
|
|
526
|
+
() => {
|
|
527
|
+
if ( cit.error ) {
|
|
528
|
+
return BBPromise.reject();
|
|
529
|
+
} else {
|
|
530
|
+
return cr;
|
|
531
|
+
}
|
|
532
|
+
} );
|
|
533
|
+
|
|
534
|
+
}, () => BBPromise.reject()
|
|
535
|
+
);
|
|
536
|
+
|
|
537
|
+
const tm = () => BBPromise.reject( `Timeout of ${ timeout } ms exceeded` ).delay( timeout );
|
|
538
|
+
|
|
539
|
+
const resolveAndScrape = () => {
|
|
540
|
+
// If no timeout is set, use crossref as back-up method
|
|
541
|
+
if ( !timeout ) {
|
|
542
|
+
return fromURL.then(
|
|
543
|
+
() => cr,
|
|
544
|
+
// Try cross if it fails
|
|
545
|
+
() => crossref().then(
|
|
546
|
+
() => cr,
|
|
547
|
+
() => openAlex().then(
|
|
548
|
+
() => cr,
|
|
549
|
+
() => semanticScholar().then(
|
|
550
|
+
() => cr,
|
|
551
|
+
// 404 response if semantic scholar fails as well
|
|
552
|
+
() => onReject()
|
|
553
|
+
)
|
|
554
|
+
)
|
|
555
|
+
) );
|
|
556
|
+
} else {
|
|
557
|
+
// Returns crossref data only if the data from the URL has exceeded
|
|
558
|
+
// the timeout; unless there is no data from crossref, in which case
|
|
559
|
+
// we wait the full amount of time for fromURL to complete.
|
|
560
|
+
return BBPromise.some( [ crossref(), fromURL, tm ], 2 ).then(
|
|
561
|
+
( res ) => cr,
|
|
562
|
+
() => openAlex().then(
|
|
563
|
+
() => cr,
|
|
564
|
+
() => semanticScholar().then( () => cr, () => onReject() )
|
|
565
|
+
)
|
|
566
|
+
);
|
|
567
|
+
}
|
|
568
|
+
};
|
|
569
|
+
|
|
570
|
+
// Only query Zotero if it is enabled
|
|
571
|
+
if ( this.conf.zotero ) {
|
|
572
|
+
return this.zoteroService.zoteroSearchRequest( doi, cr, citation )
|
|
573
|
+
.then( onResolve, resolveAndScrape )
|
|
574
|
+
.catch( ( error ) => {
|
|
575
|
+
cr.logger.log( 'warn/zotero', error );
|
|
576
|
+
this.stats.zotero.req.error.increment( 1 );
|
|
577
|
+
} );
|
|
578
|
+
// Resolve doi ourselves if zotero is disabled
|
|
579
|
+
} else {
|
|
580
|
+
return resolveAndScrape();
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
/**
|
|
585
|
+
* Requests citation metadata from a PMID or PMCID identifier.
|
|
586
|
+
*
|
|
587
|
+
* @param {Object} citation the citation object
|
|
588
|
+
* @param {Object} cr CitoidRequest object with pm(c)id, type and format
|
|
589
|
+
* @return {Object} BBPromise for CitoidRequest object
|
|
590
|
+
*/
|
|
591
|
+
requestFromPM( citation, cr ) {
|
|
592
|
+
cr.logger.log( 'trace/CitoidService', 'requestFromPM method' );
|
|
593
|
+
citation.format = cr.format;
|
|
594
|
+
citation.doi = citation.doi || cr.doi;
|
|
595
|
+
|
|
596
|
+
// If pubmed != true, we don't wait for this promise to finish because it can be quite slow
|
|
597
|
+
// If it gets the IDs in time, good, if not, it won't.
|
|
598
|
+
if ( !citation.hasRequestedPubMed && ( citation.doi || citation.pmcid || citation.pmid ) ) {
|
|
599
|
+
citation.hasRequestedPubMed = this.exporter.fetchPubMedIDs( citation, cr.request );
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
let message;
|
|
603
|
+
const type = citation.idType;
|
|
604
|
+
const pmcBaseURL = 'https://pmc.ncbi.nlm.nih.gov/articles/';
|
|
605
|
+
const pmidBaseUrl = 'https://pubmed.ncbi.nlm.nih.gov/';
|
|
606
|
+
const logger = cr.logger;
|
|
607
|
+
const zotero = this.conf.zotero;
|
|
608
|
+
|
|
609
|
+
switch ( type ) {
|
|
610
|
+
case 'pmid':
|
|
611
|
+
// Set url in Citation object for subsequent zoteroWebRequest
|
|
612
|
+
citation.url = `${ pmidBaseUrl }${ citation.pmid }`;
|
|
613
|
+
break;
|
|
614
|
+
case 'pmcid':
|
|
615
|
+
// Set url in Citation object for subsequent zoteroWebRequest
|
|
616
|
+
citation.url = `${ pmcBaseURL }${ citation.pmcid }/`;
|
|
617
|
+
break;
|
|
618
|
+
default:
|
|
619
|
+
message = `Unknown PubMed type: ${ type }`;
|
|
620
|
+
logger.log( 'warn/pubmed', message );
|
|
621
|
+
citation.error = new CitoidError( null, message, 404 );
|
|
622
|
+
return cr;
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
logger.log( 'debug/pubmed', {
|
|
626
|
+
from: citation.idValue,
|
|
627
|
+
to: citation.url,
|
|
628
|
+
type
|
|
629
|
+
} );
|
|
630
|
+
|
|
631
|
+
// Create error and return citoidResponse with error
|
|
632
|
+
const failure = ( innerCr ) => {
|
|
633
|
+
message = `Unable to locate resource with ${ type } ${ citation.idValue }`;
|
|
634
|
+
citation.error = new CitoidError( null, message, 404 );
|
|
635
|
+
logger.log( 'info/pubmed', message );
|
|
636
|
+
return innerCr;
|
|
637
|
+
};
|
|
638
|
+
|
|
639
|
+
// Fallback to pubmed doi translator if Zotero is down or translator not found
|
|
640
|
+
const fallback = ( innerCr ) => this.pubMedService
|
|
641
|
+
.convert( citation.idValue, innerCr.request )
|
|
642
|
+
.then( ( obj ) => {
|
|
643
|
+
const doi = obj.records[ 0 ].doi;
|
|
644
|
+
logger.log( 'debug/pubmed', `Got DOI ${ doi }` );
|
|
645
|
+
if ( doi ) {
|
|
646
|
+
innerCr.doi = doi;
|
|
647
|
+
citation.doi = doi;
|
|
648
|
+
citation.source.push( 'PubMed' );
|
|
649
|
+
|
|
650
|
+
return this.requestFromDOI( citation, innerCr ).catch( ( e ) => {
|
|
651
|
+
logger.log( 'debug/pubmed', e.Error );
|
|
652
|
+
return failure( innerCr );
|
|
653
|
+
} );
|
|
654
|
+
} else {
|
|
655
|
+
logger.log( 'debug/pubmed', 'No DOI found' );
|
|
656
|
+
return failure( innerCr );
|
|
657
|
+
}
|
|
658
|
+
}, () => {
|
|
659
|
+
logger.log( 'debug/pubmed', 'Pubmed request failed' );
|
|
660
|
+
return failure( innerCr );
|
|
661
|
+
} );
|
|
662
|
+
|
|
663
|
+
const fromOpenAlex = ( innerCr ) => {
|
|
664
|
+
if ( !this.openAlexService ) {
|
|
665
|
+
return BBPromise.reject();
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
const openAlexId = type === 'pmid' ? `pmid:${ citation.pmid }` : `pmcid:${ citation.pmcid }`;
|
|
669
|
+
return this.openAlexService.getWork( openAlexId, innerCr.request )
|
|
670
|
+
.then( ( work ) => {
|
|
671
|
+
citation.content = this.openAlexService.toCitation( work, citation.url );
|
|
672
|
+
citation.source.push( 'OpenAlex' );
|
|
673
|
+
citation.error = null;
|
|
674
|
+
return innerCr;
|
|
675
|
+
}, () => BBPromise.reject() );
|
|
676
|
+
};
|
|
677
|
+
|
|
678
|
+
const onResolve = ( innerCr ) => {
|
|
679
|
+
logger.log( 'trace/zotero', 'Successfully retrieved body from Zotero' );
|
|
680
|
+
return innerCr;
|
|
681
|
+
};
|
|
682
|
+
|
|
683
|
+
const onReject = ( response ) => {
|
|
684
|
+
// Case: Zotero service is unreachable
|
|
685
|
+
if ( response && response.status === 504 ) {
|
|
686
|
+
return fallback( cr );
|
|
687
|
+
}
|
|
688
|
+
// Case: Translator for pubmed is not present or is broken
|
|
689
|
+
// TODO: Test
|
|
690
|
+
if ( response && response.status === 501 ) {
|
|
691
|
+
return fallback( cr );
|
|
692
|
+
} else {
|
|
693
|
+
return fromOpenAlex( cr ).catch( () => fallback( cr ) );
|
|
694
|
+
}
|
|
695
|
+
};
|
|
696
|
+
|
|
697
|
+
let id; // pmid or doi; pmc not available from Zotero
|
|
698
|
+
// Only query Zotero if it is enabled
|
|
699
|
+
if ( zotero ) {
|
|
700
|
+
id = citation.doi || citation.pmid;
|
|
701
|
+
// Use more polite search eutils request if pmid or doi is available
|
|
702
|
+
if ( id ) {
|
|
703
|
+
return this.zoteroService.zoteroSearchRequest( id, cr, citation )
|
|
704
|
+
.then( onResolve, onReject )
|
|
705
|
+
.catch( ( error ) => {
|
|
706
|
+
logger.log( 'warn/zotero', error );
|
|
707
|
+
this.stats.zotero.req.error.increment( 1 );
|
|
708
|
+
} );
|
|
709
|
+
} else {
|
|
710
|
+
// Wait for extra ids to finish, even if pubmed !== true in config
|
|
711
|
+
return citation.hasRequestedPubMed.then( ( innerCit ) => {
|
|
712
|
+
id = innerCit.pmid || innerCit.doi;
|
|
713
|
+
return this.zoteroService.zoteroSearchRequest( id, cr, innerCit )
|
|
714
|
+
.then( onResolve, onReject )
|
|
715
|
+
.catch( ( error ) => {
|
|
716
|
+
logger.log( 'warn/zotero', error );
|
|
717
|
+
this.stats.zotero.req.error.increment( 1 );
|
|
718
|
+
} );
|
|
719
|
+
} );
|
|
720
|
+
}
|
|
721
|
+
} else {
|
|
722
|
+
return fallback( cr );
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
/**
|
|
728
|
+
* Promise of requested citation metadata from a URL
|
|
729
|
+
*
|
|
730
|
+
* @param {Object} citation Pointer to particular citation object
|
|
731
|
+
* @param {Object} cr CitoidRequest object with new functions added to getResults Array
|
|
732
|
+
* @param {boolean} reqDOI True if this method is being called from requestFromDOI
|
|
733
|
+
* @return {Object} BBPromise object for modified CitoidRequest object from input
|
|
734
|
+
*/
|
|
735
|
+
requestFromURL( citation, cr, reqDOI ) {
|
|
736
|
+
cr.logger.log( 'trace/CitoidService', 'requestFromURL method' );
|
|
737
|
+
citation.format = cr.format;
|
|
738
|
+
citation.doi = citation.doi || cr.doi;
|
|
739
|
+
reqDOI = reqDOI || false;
|
|
740
|
+
|
|
741
|
+
// If pubmed != true, we don't wait for this promise to finish because it can be quite slow
|
|
742
|
+
// If it gets the IDs in time, good, if not, it won't.
|
|
743
|
+
if ( !citation.hasRequestedPubMed && ( citation.doi || citation.pmcid || citation.pmid ) ) {
|
|
744
|
+
citation.hasRequestedPubMed = this.exporter.fetchPubMedIDs( citation, cr.request );
|
|
745
|
+
}
|
|
746
|
+
|
|
747
|
+
const zotero = this.conf.zotero;
|
|
748
|
+
const wayback = this.conf.wayback;
|
|
749
|
+
|
|
750
|
+
const url = citation.resolvedUrl || citation.url;
|
|
751
|
+
|
|
752
|
+
if ( !url ) {
|
|
753
|
+
citation.error = new CitoidError( null, 'No URL provided', 500 );
|
|
754
|
+
cr.logger.log( 'warn/CitoidService', 'requestFromURL called with no URL' );
|
|
755
|
+
return BBPromise.resolve( cr );
|
|
756
|
+
}
|
|
757
|
+
|
|
758
|
+
// Check if archive.org web url to bypass Zotero, which gives worse results
|
|
759
|
+
// eslint-disable-next-line security/detect-unsafe-regex
|
|
760
|
+
const archiveMatch = /^(?:https?:\/\/)?(?:web|wayback)\.archive\.org\/web\/\d{1,14}\//.test( url );
|
|
761
|
+
|
|
762
|
+
// Declare these even if they don't end up being needed
|
|
763
|
+
let checkWaybackProm;
|
|
764
|
+
let rejectWayback;
|
|
765
|
+
|
|
766
|
+
const storeRequestErrors = ( error ) => {
|
|
767
|
+
if ( error instanceof Error ) {
|
|
768
|
+
citation.error = new CitoidError( error );
|
|
769
|
+
} else if ( typeof error === 'string' ) {
|
|
770
|
+
citation.error = new CitoidError( null, error, 404 );
|
|
771
|
+
} else {
|
|
772
|
+
citation.error = new CitoidError( null, null, 404 );
|
|
773
|
+
}
|
|
774
|
+
};
|
|
775
|
+
|
|
776
|
+
// Define generic rejection handler
|
|
777
|
+
const reject = ( error ) => {
|
|
778
|
+
storeRequestErrors( error );
|
|
779
|
+
cr.logger.log( 'trace/CitoidService', 'Url request failed' );
|
|
780
|
+
if ( error instanceof Error ) {
|
|
781
|
+
cr.logger.log( 'warn/CitoidService', {
|
|
782
|
+
msg: `requestFromURL failed for ${ url }`,
|
|
783
|
+
outgoingReqResult: { error: error }
|
|
784
|
+
} );
|
|
785
|
+
} else if ( typeof error === 'string' ) {
|
|
786
|
+
cr.logger.log( 'warn/CitoidService', {
|
|
787
|
+
msg: `requestFromURL failed for ${ url }`,
|
|
788
|
+
outgoingReqResult: { uri: url, msg: error, status: 404 }
|
|
789
|
+
} );
|
|
790
|
+
} else {
|
|
791
|
+
citation.error = new CitoidError( null, null, 404 );
|
|
792
|
+
cr.logger.log( 'warn/CitoidService', {
|
|
793
|
+
msg: `requestFromURL failed for ${ url }`,
|
|
794
|
+
outgoingReqResult: { uri: url, status: 404 }
|
|
795
|
+
} );
|
|
796
|
+
}
|
|
797
|
+
|
|
798
|
+
// Try requesting from DOI if we haven't already done that
|
|
799
|
+
// Do this after creating error for url citation
|
|
800
|
+
if ( !reqDOI && citation.doi ) {
|
|
801
|
+
const doiCit = new Citation( 'doi', citation.doi );
|
|
802
|
+
cr.response.citations.push( doiCit );
|
|
803
|
+
doiCit.format = cr.format;
|
|
804
|
+
cr.logger.log( 'trace/CitoidService', 'Attempting requestFromDOI' );
|
|
805
|
+
return this.requestFromDOI( doiCit, cr ).catch( ( e ) => {
|
|
806
|
+
cr.logger.log( 'warn/CitoidService', {
|
|
807
|
+
msg: `requestFromURL failed for ${ url }`,
|
|
808
|
+
outgoingReqResult: { error: error }
|
|
809
|
+
} );
|
|
810
|
+
doiCit.error = new CitoidError( e );
|
|
811
|
+
return cr;
|
|
812
|
+
} );
|
|
813
|
+
}
|
|
814
|
+
|
|
815
|
+
return cr;
|
|
816
|
+
};
|
|
817
|
+
|
|
818
|
+
// Start request for archived urls if wayback fallback is enabled
|
|
819
|
+
if ( wayback ) {
|
|
820
|
+
let waybackError = false;
|
|
821
|
+
checkWaybackProm = this.waybackService.availability( url, cr.request )
|
|
822
|
+
.catch( ( e ) => {
|
|
823
|
+
// hacky way to deal with unhandled rejections that return before handlers added
|
|
824
|
+
waybackError = true;
|
|
825
|
+
} );
|
|
826
|
+
|
|
827
|
+
rejectWayback = ( error ) => {
|
|
828
|
+
cr.logger.log( 'trace/CitoidService', 'Checking wayback for url' );
|
|
829
|
+
return checkWaybackProm.then( ( results ) => {
|
|
830
|
+
if ( waybackError ) {
|
|
831
|
+
return reject( error );
|
|
832
|
+
}
|
|
833
|
+
citation.setWaybackParams( results );
|
|
834
|
+
cr.logger.log( 'trace/CitoidService', 'Wayback request succeeded, scraping archived version' );
|
|
835
|
+
storeRequestErrors( error );
|
|
836
|
+
return this.scraper.scrape( citation, cr, results.url );
|
|
837
|
+
},
|
|
838
|
+
() => reject( error ) );
|
|
839
|
+
};
|
|
840
|
+
}
|
|
841
|
+
|
|
842
|
+
/**
|
|
843
|
+
* Check content type from response header
|
|
844
|
+
*
|
|
845
|
+
* @param {Object} response response object with Buffer body
|
|
846
|
+
* @return {boolean} True if invalid type; false if not invalid or no type listed
|
|
847
|
+
*/
|
|
848
|
+
const invalidContentType = ( response ) => {
|
|
849
|
+
const validTypes = [
|
|
850
|
+
'application/xhtml+xml',
|
|
851
|
+
'text/html',
|
|
852
|
+
'text/plain'
|
|
853
|
+
];
|
|
854
|
+
|
|
855
|
+
try {
|
|
856
|
+
const ct = contentType.parse( response ); // Parsed content-type header
|
|
857
|
+
if ( ct && ct.type && !validTypes.includes( ct.type ) ) {
|
|
858
|
+
cr.logger.log( 'trace/CitoidService', `Invalid Content-type in head: ${ ct.type }` );
|
|
859
|
+
return true;
|
|
860
|
+
}
|
|
861
|
+
} catch ( e ) {} // Throws a TypeError if the Content-Type header is missing or invalid.
|
|
862
|
+
return false;
|
|
863
|
+
};
|
|
864
|
+
|
|
865
|
+
cr.logger.log( 'trace/CitoidService', 'Looking for redirects' );
|
|
866
|
+
return unshorten( url, cr, citation )
|
|
867
|
+
.then( ( cit ) => {
|
|
868
|
+
|
|
869
|
+
if ( cit.resolvedUrl !== cit.url ) {
|
|
870
|
+
cr.logger.log( 'debug/CitoidService', `Redirect detected to ${ cit.resolvedUrl }` );
|
|
871
|
+
}
|
|
872
|
+
|
|
873
|
+
if ( invalidContentType( cit.response ) ) {
|
|
874
|
+
// If called from requestFromDOI we're racing with crossRef so don't error
|
|
875
|
+
if ( reqDOI ) {
|
|
876
|
+
cr.logger.log( 'debug/CitoidService', 'requestFromURL found invalid content type' );
|
|
877
|
+
return BBPromise.reject( 'Invalid content type' );
|
|
878
|
+
}
|
|
879
|
+
cit.error = new CitoidError( null, null, 415,
|
|
880
|
+
contentType.parse( cit.response ).type );
|
|
881
|
+
cr.logger.log( 'debug/CitoidService', 'requestFromURL failed with 415 error' );
|
|
882
|
+
return cr;
|
|
883
|
+
}
|
|
884
|
+
|
|
885
|
+
// Uses Zotero
|
|
886
|
+
const zotReq = () => {
|
|
887
|
+
const logger = cr.logger;
|
|
888
|
+
logger.log( 'trace/zotero', 'Looking for redirects' );
|
|
889
|
+
return this.zoteroService.zoteroWebRequest( cr, citation )
|
|
890
|
+
.then(
|
|
891
|
+
// Success
|
|
892
|
+
( innerCr ) => {
|
|
893
|
+
logger.log( 'trace/zotero', 'Successfully retrieved body from Zotero' );
|
|
894
|
+
cr.logger.log( 'info/CitoidService', {
|
|
895
|
+
msg: `requestFromURL succeeded for url ${ citation.url }`,
|
|
896
|
+
outgoingReqResult: { uri: citation.url, status: 200 }
|
|
897
|
+
} );
|
|
898
|
+
return innerCr;
|
|
899
|
+
},
|
|
900
|
+
// Failure
|
|
901
|
+
() => {
|
|
902
|
+
logger.log( 'warn/zotero', `No Zot response available for ${ cit.resolvedUrl || citation.url }` );
|
|
903
|
+
citation.url = cit.resolvedUrl || url;
|
|
904
|
+
// Don't attempt to load urls ourselves that Zotero can't.
|
|
905
|
+
if ( cr.error && cr.error.responseCode === 415 ) {
|
|
906
|
+
cr.logger.log( 'trace/CitoidService', 'requestFromURL failed' );
|
|
907
|
+
citation.error = cr.error;
|
|
908
|
+
return cr;
|
|
909
|
+
} else {
|
|
910
|
+
return this.scraper.scrape( citation, cr );
|
|
911
|
+
}
|
|
912
|
+
} )
|
|
913
|
+
.catch( ( error ) => {
|
|
914
|
+
logger.log( 'warn/zotero', error );
|
|
915
|
+
this.stats.zotero.req.error.increment( 1 );
|
|
916
|
+
} );
|
|
917
|
+
};
|
|
918
|
+
|
|
919
|
+
// Don't query Zotero if disabled or if we need to bypass it
|
|
920
|
+
if ( zotero && !archiveMatch ) {
|
|
921
|
+
return zotReq();
|
|
922
|
+
} else {
|
|
923
|
+
return this.scraper.scrape( citation, cr )
|
|
924
|
+
.then( ( innerCr ) => {
|
|
925
|
+
if ( citation.error ) {
|
|
926
|
+
return reject( citation.error.error || citation.error.msg );
|
|
927
|
+
} else {
|
|
928
|
+
return innerCr;
|
|
929
|
+
}
|
|
930
|
+
} )
|
|
931
|
+
.catch( ( error ) => reject( error ) );
|
|
932
|
+
}
|
|
933
|
+
|
|
934
|
+
}
|
|
935
|
+
// Failure handler for unshorten
|
|
936
|
+
).catch( ( error ) => {
|
|
937
|
+
if ( wayback ) {
|
|
938
|
+
return rejectWayback( error );
|
|
939
|
+
} else {
|
|
940
|
+
return reject( error );
|
|
941
|
+
}
|
|
942
|
+
} );
|
|
943
|
+
}
|
|
944
|
+
|
|
945
|
+
/**
|
|
946
|
+
* Promise of requested citation metadata from an open search query,
|
|
947
|
+
* i.e. a plain text formatted citation or the title of a work.
|
|
948
|
+
* Currently only uses crossRef and returns ~2 results.
|
|
949
|
+
*
|
|
950
|
+
* @param {Object} citation Pointer to particular citation object
|
|
951
|
+
* @param {Object} cr CitoidRequest object with new functions added to getResults Array
|
|
952
|
+
* @return {Object} BBPromise object for modified CitoidRequest object from input
|
|
953
|
+
*/
|
|
954
|
+
requestFromSearch( citation, cr ) {
|
|
955
|
+
cr.logger.log( 'trace/CitoidService', 'requestFromSearch method' );
|
|
956
|
+
citation.format = cr.format;
|
|
957
|
+
|
|
958
|
+
const applyMetadataArray = ( metadataArray, translateMetadata, sourceName ) => {
|
|
959
|
+
// Handle array of metadata results
|
|
960
|
+
if ( !Array.isArray( metadataArray ) ) {
|
|
961
|
+
metadataArray = [ metadataArray ];
|
|
962
|
+
}
|
|
963
|
+
|
|
964
|
+
// Process each metadata result
|
|
965
|
+
metadataArray.forEach( ( metadata, index ) => {
|
|
966
|
+
let cit;
|
|
967
|
+
if ( index === 0 ) {
|
|
968
|
+
// Use the existing citation object for the first result
|
|
969
|
+
cit = citation;
|
|
970
|
+
} else {
|
|
971
|
+
// Create new citation objects for additional results
|
|
972
|
+
cit = new Citation( 'any', citation.any );
|
|
973
|
+
cit.format = cr.format;
|
|
974
|
+
cr.response.citations.push( cit );
|
|
975
|
+
}
|
|
976
|
+
|
|
977
|
+
// Set citation type from crossref type
|
|
978
|
+
// This will *not* overwrite previously set itemType i.e. from citationFromCR
|
|
979
|
+
if ( metadata.type && cRef.types[ metadata.type ] ) {
|
|
980
|
+
cit.content.itemType = cRef.types[ metadata.type ];
|
|
981
|
+
} else {
|
|
982
|
+
cit.content.itemType = 'journalArticle'; // Default itemType
|
|
983
|
+
}
|
|
984
|
+
|
|
985
|
+
const typeTranslator = cRef[ cit.content.itemType ];
|
|
986
|
+
// If there are no appropriate translators, return.
|
|
987
|
+
// This should not be reachable.
|
|
988
|
+
if ( !typeTranslator ) {
|
|
989
|
+
cr.logger.log( 'warn/scraper', 'No type translator' );
|
|
990
|
+
cit.error = new CitoidError( null, 'No type translator available', 500 );
|
|
991
|
+
return;
|
|
992
|
+
}
|
|
993
|
+
|
|
994
|
+
cit.content = translateMetadata( cit.content, metadata, typeTranslator );
|
|
995
|
+
|
|
996
|
+
cit.content.accessDate = ( new Date() ).toISOString().slice( 0, 10 );
|
|
997
|
+
|
|
998
|
+
cit.source.push( sourceName );
|
|
999
|
+
} );
|
|
1000
|
+
|
|
1001
|
+
return BBPromise.resolve( cr );
|
|
1002
|
+
};
|
|
1003
|
+
|
|
1004
|
+
return this.crossRefService.search( citation.any, cr.request )
|
|
1005
|
+
.then( ( metadataArray ) => applyMetadataArray(
|
|
1006
|
+
metadataArray,
|
|
1007
|
+
( content, metadata, typeTranslator ) => this.translator.translate(
|
|
1008
|
+
content, metadata, typeTranslator
|
|
1009
|
+
),
|
|
1010
|
+
'Crossref'
|
|
1011
|
+
) ).catch( () => {
|
|
1012
|
+
if ( this.openAlexService ) {
|
|
1013
|
+
return this.openAlexService.searchWorks( citation.any, cr.request )
|
|
1014
|
+
.then( ( works ) => {
|
|
1015
|
+
works.forEach( ( work, index ) => {
|
|
1016
|
+
let cit = citation;
|
|
1017
|
+
if ( index > 0 ) {
|
|
1018
|
+
cit = new Citation( 'any', citation.any );
|
|
1019
|
+
cit.format = cr.format;
|
|
1020
|
+
cr.response.citations.push( cit );
|
|
1021
|
+
}
|
|
1022
|
+
cit.content = this.openAlexService.toCitation( work, citation.any );
|
|
1023
|
+
cit.source.push( 'OpenAlex' );
|
|
1024
|
+
} );
|
|
1025
|
+
return cr;
|
|
1026
|
+
} ).catch( () => BBPromise.reject() );
|
|
1027
|
+
}
|
|
1028
|
+
return BBPromise.reject();
|
|
1029
|
+
} ).catch( () => {
|
|
1030
|
+
if ( !this.semanticScholarService ) {
|
|
1031
|
+
return BBPromise.reject();
|
|
1032
|
+
}
|
|
1033
|
+
return this.semanticScholarService.search( citation.any, cr.request )
|
|
1034
|
+
.then( ( papers ) => {
|
|
1035
|
+
if ( !Array.isArray( papers ) || !papers.length ) {
|
|
1036
|
+
return BBPromise.reject();
|
|
1037
|
+
}
|
|
1038
|
+
papers.forEach( ( paper, index ) => {
|
|
1039
|
+
let cit = citation;
|
|
1040
|
+
if ( index > 0 ) {
|
|
1041
|
+
cit = new Citation( 'any', citation.any );
|
|
1042
|
+
cit.format = cr.format;
|
|
1043
|
+
cr.response.citations.push( cit );
|
|
1044
|
+
}
|
|
1045
|
+
cit.content = this.semanticScholarService.toCitation(
|
|
1046
|
+
paper, citation.any
|
|
1047
|
+
);
|
|
1048
|
+
cit.source.push( 'Semantic Scholar' );
|
|
1049
|
+
} );
|
|
1050
|
+
return cr;
|
|
1051
|
+
} );
|
|
1052
|
+
} ).catch( ( e ) => {
|
|
1053
|
+
cr.logger.log( 'debug/citoidRequest', e );
|
|
1054
|
+
const message = `No results for search term ${ citation.any }`;
|
|
1055
|
+
citation.error = new CitoidError( null, message, 404 );
|
|
1056
|
+
return cr;
|
|
1057
|
+
} );
|
|
1058
|
+
}
|
|
1059
|
+
|
|
1060
|
+
requestFromArxiv( citation, cr ) {
|
|
1061
|
+
if ( !this.semanticScholarService ) {
|
|
1062
|
+
citation.error = new CitoidError( null, 'Semantic Scholar is not enabled', 404 );
|
|
1063
|
+
return BBPromise.resolve( cr );
|
|
1064
|
+
}
|
|
1065
|
+
|
|
1066
|
+
cr.logger.log( 'trace/CitoidService', 'requestFromArxiv method' );
|
|
1067
|
+
citation.format = cr.format;
|
|
1068
|
+
return this.semanticScholarService.getPaper( `ARXIV:${ citation.any }`, cr.request )
|
|
1069
|
+
.then( ( paper ) => {
|
|
1070
|
+
citation.content = this.semanticScholarService.toCitation( paper,
|
|
1071
|
+
`https://arxiv.org/abs/${ citation.any }` );
|
|
1072
|
+
citation.source.push( 'Semantic Scholar' );
|
|
1073
|
+
return cr;
|
|
1074
|
+
} ).catch( () => {
|
|
1075
|
+
const fallback = new Citation( 'url', `https://arxiv.org/abs/${ citation.any }` );
|
|
1076
|
+
fallback.format = cr.format;
|
|
1077
|
+
cr.response.citations.push( fallback );
|
|
1078
|
+
citation.error = new CitoidError(
|
|
1079
|
+
null,
|
|
1080
|
+
`Unable to locate resource with arXiv ${ citation.any }`,
|
|
1081
|
+
404
|
|
1082
|
+
);
|
|
1083
|
+
return this.requestFromURL( fallback, cr ).then( () => cr );
|
|
1084
|
+
} );
|
|
1085
|
+
}
|
|
1086
|
+
|
|
1087
|
+
/**
|
|
1088
|
+
* Promise of requested citation metadata from an ISBN. Uses zotero search endpoint.
|
|
1089
|
+
*
|
|
1090
|
+
* @param {Object} citation Pointer to particular citation object
|
|
1091
|
+
* @param {Object} cr CitoidRequest object with pm(c)id, type and format
|
|
1092
|
+
* @return {Object} BBPromise object for modified CitoidRequest object from input
|
|
1093
|
+
*/
|
|
1094
|
+
requestToZotISBN( citation, cr ) {
|
|
1095
|
+
cr.logger.log( 'trace/CitoidService', 'requestToZotISBN method' );
|
|
1096
|
+
citation.format = cr.format;
|
|
1097
|
+
citation.doi = cr.doi;
|
|
1098
|
+
|
|
1099
|
+
// Make request to zotero search endpoint
|
|
1100
|
+
return this.zoteroService.zoteroSearchRequest( citation.isbn, cr, citation ).then(
|
|
1101
|
+
( body ) => {
|
|
1102
|
+
cr.logger.log( 'trace/zotero', 'Successfully retrieved body from Zotero' );
|
|
1103
|
+
// add library catalog to source
|
|
1104
|
+
if ( citation.content.libraryCatalog ) {
|
|
1105
|
+
citation.source.push( citation.content.libraryCatalog );
|
|
1106
|
+
}
|
|
1107
|
+
return cr;
|
|
1108
|
+
},
|
|
1109
|
+
// Rejection handler
|
|
1110
|
+
() => {
|
|
1111
|
+
cr.logger.log( 'warn/zotero', `Unable to retrieve metadata from ISBN ${ citation.isbn } from Zotero` );
|
|
1112
|
+
return this.rejectISBN( citation, cr );
|
|
1113
|
+
} );
|
|
1114
|
+
|
|
1115
|
+
}
|
|
1116
|
+
}
|
|
1117
|
+
|
|
1118
|
+
module.exports = CitoidService;
|