diff --git a/CHANGELOG.md b/CHANGELOG.md index 354ba42..b16277e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,32 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [3.10.0](https://github.com/biothings/biomedical_id_resolver.js/compare/v3.9.1...v3.10.0) (2021-08-16) + + +### Features + +* support Disease NCIT, SNOMEDCT IDs ([9cc4908](https://github.com/biothings/biomedical_id_resolver.js/commit/9cc4908a62fe176212e0f2b23ed0d9ca381b7c83)) + + +### Bug Fixes + +* add BiologicalProcess KEGG back in ([ccf257a](https://github.com/biothings/biomedical_id_resolver.js/commit/ccf257a6041d01157d6646113b1ff699145d63f6)) +* add ClinicalFinding semantic type ([56f083f](https://github.com/biothings/biomedical_id_resolver.js/commit/56f083ff06406bdb5d8ebc59d0ebe40319928c4b)) +* add Disease, SequenceVariant mappings ([e36bc09](https://github.com/biothings/biomedical_id_resolver.js/commit/e36bc091d1f1988441fd96f987829fe146f65de0)) +* add MEDDRA id mapping for Disease semantic type ([e914976](https://github.com/biothings/biomedical_id_resolver.js/commit/e9149760a1361389b27d5b674545f897068a16a6)) +* add Pathway GO, SMPDB IDs ([c8b2556](https://github.com/biothings/biomedical_id_resolver.js/commit/c8b2556846dcf8d482cfabab85cb39afdf6b37db)) +* adjust fields for mapping SNOMEDCT ([88dd2a4](https://github.com/biothings/biomedical_id_resolver.js/commit/88dd2a49021bfc42b22ade2936fb0f56d7a80e80)) +* config + types file: ChemicalSubstance -> SmallMolecule, drug semantic type ([2cfbe88](https://github.com/biothings/biomedical_id_resolver.js/commit/2cfbe889bc32d070a2712a7dbbc43649ecdaa754)) +* quick fixes to README to match config file ([da6df54](https://github.com/biothings/biomedical_id_resolver.js/commit/da6df549d54837d340501a8424e7a7166be241a0)) +* reformatting, add mappings + ID prefixes ([546f5a7](https://github.com/biothings/biomedical_id_resolver.js/commit/546f5a70f6f2a003e737e27a0133440829d8095a)) +* remove ChemicalSubstance support ([d78a30f](https://github.com/biothings/biomedical_id_resolver.js/commit/d78a30f7fd254812a808ca2479d0a3c759d7b3ff)) +* simple changes ([df2139c](https://github.com/biothings/biomedical_id_resolver.js/commit/df2139c70c3be0292fddf9e1a6bcfa78961874d6)) +* try to add backwards compatibility for ChemicalSubstance ([987ab97](https://github.com/biothings/biomedical_id_resolver.js/commit/987ab97fb52fb9baa94f3bd425f19857c130065e)) +* update README to reflect config/types file changes ([3792602](https://github.com/biothings/biomedical_id_resolver.js/commit/3792602fcc361b65f5551b13451f3fa7f4d2b1a1)) +* update rhea tests ([95ec48f](https://github.com/biothings/biomedical_id_resolver.js/commit/95ec48f23e9eca197f1d31db61815afb163fb845)) +* update tests for ChemicalSubstance -> SmallMolecule ([0699af0](https://github.com/biothings/biomedical_id_resolver.js/commit/0699af00ede0dedbb063bf405c7d59159ce517f7)) + ### [3.9.1](https://github.com/biothings/biomedical_id_resolver.js/compare/v3.9.0...v3.9.1) (2021-06-22) ## [3.9.0](https://github.com/kevinxin90/biomedical_id_resolver.js/compare/v3.8.0...v3.9.0) (2021-04-27) diff --git a/README.md b/README.md index e11f8b5..f89d816 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ -![Test Coveralls](https://github.com/kevinxin90/biomedical_id_resolver.js/workflows/Test%20Coveralls/badge.svg) -[![Coverage Status](https://coveralls.io/repos/github/kevinxin90/biomedical_id_resolver.js/badge.svg?branch=master)](https://coveralls.io/github/kevinxin90/biomedical_id_resolver.js?branch=master) +![Test Coveralls](https://github.com/biothings/biomedical_id_resolver.js/workflows/Test%20Coveralls/badge.svg) +[![Coverage Status](https://coveralls.io/repos/github/biothings/biomedical_id_resolver.js/badge.svg?branch=main)](https://coveralls.io/github/biothings/biomedical_id_resolver.js?branch=main) ![npm](https://img.shields.io/npm/dw/biomedical_id_resolver) -![GitHub issues](https://img.shields.io/github/issues/kevinxin90/biomedical_id_resolver.js) +![GitHub issues](https://img.shields.io/github/issues/biothings/biomedical_id_resolver.js) ![NPM](https://img.shields.io/npm/l/biomedical_id_resolver) ![npm](https://img.shields.io/npm/v/biomedical_id_resolver?style=plastic) -![GitHub tag (latest by date)](https://img.shields.io/github/v/tag/kevinxin90/biomedical_id_resolver.js) +![GitHub tag (latest by date)](https://img.shields.io/github/v/tag/biothings/biomedical_id_resolver.js) @@ -25,7 +25,7 @@ const resolve = require('biomedical_id_resolver'); // input should be an object, with semantic type as the key, and array of CURIEs as value let input = { "Gene": ["NCBIGene:1017", "NCBIGene:1018", "HGNC:1177"], - "ChemicalSubstance": ["CHEBI:15377"], + "SmallMolecule": ["CHEBI:15377"], "Disease": ["MONDO:0004976"], "Cell": ["CL:0002372"] }; @@ -104,43 +104,76 @@ let input = { ## Available Semantic Types & prefixes -> Gene ID resolution is done through MyGene.info API +> Gene, Transcript, Protein ID resolution is done through MyGene.info API - Gene 1. NCBIGene 2. ENSEMBL 3. HGNC - 4. SYMBOL + 4. MGI 5. OMIM - 6. UniProtKB - 7. UMLS - 8. name + 6. UMLS + 7. SYMBOL + 8. UniProtKB + 9. name + +- Transcript + 1. ENSEMBL + 2. SYMBOL + 3. name + +- Protein + 1. UniProtKB + 2. ENSEMBL + 3. UMLS + 4. SYMBOL + 5. name > Variant ID resolution is done through MyVariant.info API - SequenceVariant - 1. HGVS + 1. CLINVAR 2. DBSNP - 3. MYVARIANT_HG19 - 4. ClinVar + 3. HGVS + 4. MYVARIANT_HG19 -> ChemicalSubstance ID resolution is done through MyChem.info API +> SmallMolecule, Drug ID resolution is done through MyChem.info API -- ChemicalSubstance - 1. CHEBI +- SmallMolecule + 1. PUBCHEM.COMPOUND 2. CHEMBL.COMPOUND + 3. UNII + 4. CHEBI + 5. DRUGBANK + 6. MESH + 7. CAS + 8. HMDB + 9. KEGG.COMPOUND + 10. INCHI + 11. INCHIKEY + 12. UMLS + 13. LINCS + 14. name + +- Drug + 1. RXCUI + 2. NDC 3. DRUGBANK - 4. PUBCHEM - 5. MESH - 6. INCHI - 7. INCHIKEY - 8. UNII - 9. KEGG - 10. UMLS - 11. name - 12. id - -> Disease ID Resolution is done through MyDisease.info API + 4. PUBCHEM.COMPOUND + 5. CHEMBL.COMPOUND + 6. UNII + 7. CHEBI + 8. MESH + 9. CAS + 10. HMDB + 11. KEGG.COMPOUND + 12. INCHI + 13. INCHIKEY + 14. UMLS + 15. LINCS + 16. name + +> Disease, ClinicalFinding ID Resolution is done through MyDisease.info API - Disease @@ -151,80 +184,88 @@ let input = { 5. EFO 6. UMLS 7. MESH - 8. GARD - 9. name + 8. MEDDRA + 9. NCIT + 10. SNOMEDCT + 11. HP + 12. GARD + 13. name + +- ClinicalFinding + 1. LOINC + 2. NCIT + 3. EFO + 4. name > Pathway ID Resolution is done through biothings.ncats.io/geneset API - Pathway - 1. Reactome - 2. KEGG - 3. PHARMGKB - 4. WIKIPATHWAYS - 5. name + 1. GO + 2. REACT + 3. KEGG + 4. SMPDB + 5. PHARMGKB.PATHWAYS + 6. WIKIPATHWAYS + 7. BIOCARTA + 8. name > MolecularActivity ID Resolution is done through BioThings Gene Ontology Molecular Activity API - MolecularActivity 1. GO - 2. MetaCyc + 2. REACT 3. RHEA - 4. KEGG.REACTION - 5. Reactome + 4. MetaCyc + 5. KEGG.REACTION + 6. name > CellularComponent ID Resolution is done through BioThings Gene Ontology Cellular Component API - CellularComponent 1. GO - 2. MESH - 3. UMLS - 4. NCIT - 5. SNOMEDCT - 6. UBERON - 7. CL - 8. name + 2. MetaCyc + 3. name > BiologicalProcess ID Resolution is done through BioThings Gene Ontology Biological Process API - BiologicalProcess 1. GO - 2. MetaCyc - 3. Reactome - 4. name + 2. REACT + 3. MetaCyc + 4. KEGG + 5. name > AnatomicalEntity ID Resolution is done through BioThings UBERON API - AnatomicalEntity 1. UBERON 2. UMLS - 3. NCIT - 4. MESH + 3. MESH + 4. NCIT 5. name > PhenotypicFeature ID Resolution is done through BioThings HPO API - PhenotypicFeature - 1. UMLS - 2. SNOMEDCT - 3. HP - 4. MEDDRA - 5. EFO - 6. NCIT - 7. MESH - 8. MP + 1. HP + 2. EFO + 3. NCIT + 4. UMLS + 5. MEDDRA + 6. MP + 7. SNOMEDCT + 8. MESH 9. name -> Cell ID Resolution is done through nodenormalization API +> Cell ID Resolution is done through Biothings Cell Ontology API - Cell 1. CL - 2. UMLS - 3. NCIT - 4. MESH - 5. UBERON - 6. SNOMEDCT - 7. name + 2. NCIT + 3. MESH + 4. EFO + 5. name ## Development @@ -234,9 +275,9 @@ let input = { 3. Run `npm ci` to install the dependencies. 4. scripts are stored in `/src` folder 5. Add test to `/__tests__` folder -6. run `npm run release` to bump version and generte change log +6. run `npm run release` to bump version and generate change log 7. run `npx depcheck` to check for unused packages in package.json ## CHANGELOG -See [CHANGELOG.md](https://github.com/kevinxin90/biomedical_id_resolver.js/blob/master/CHANGELOG.md) +See [CHANGELOG.md](https://github.com/biothings/biomedical_id_resolver.js/blob/main/CHANGELOG.md) diff --git a/__tests__/integration/biolink_based_resolver.test.ts b/__tests__/integration/biolink_based_resolver.test.ts index c778366..30baba0 100644 --- a/__tests__/integration/biolink_based_resolver.test.ts +++ b/__tests__/integration/biolink_based_resolver.test.ts @@ -16,14 +16,14 @@ describe("Test ID Resolver", () => { test("Test BioThings output include integer should be converted to string", async () => { const resolver = new BioLinkBasedResolver(); - const res = await resolver.resolve({ "ChemicalSubstance": ["CHEMBL.COMPOUND:CHEMBL744"] }); + const res = await resolver.resolve({ "SmallMolecule": ["CHEMBL.COMPOUND:CHEMBL744"] }); expect(res['CHEMBL.COMPOUND:CHEMBL744'][0]).toBeInstanceOf(ResolvableBioEntity); expect(res['CHEMBL.COMPOUND:CHEMBL744'][0].dbIDs["PUBCHEM.COMPOUND"]).toEqual(["5070"]); }) test("Test valid inputs from multiple semantic types should be corretly resolved", async () => { const resolver = new BioLinkBasedResolver(); - const res = await resolver.resolve({ "Gene": ["NCBIGene:1017"], "ChemicalSubstance": ["DRUGBANK:DB01609"] }); + const res = await resolver.resolve({ "Gene": ["NCBIGene:1017"], "SmallMolecule": ["DRUGBANK:DB01609"] }); expect(res).toHaveProperty("NCBIGene:1017"); expect(res['NCBIGene:1017']).toHaveLength(1); expect(res['NCBIGene:1017'][0]).toBeInstanceOf(ResolvableBioEntity); @@ -52,7 +52,7 @@ describe("Test ID Resolver", () => { const resolver = new BioLinkBasedResolver(); const res = await resolver.resolve({ Gene: [...fakeNCBIGeneInputs, ...fakeOMIMGeneInputs], - ChemicalSubstance: fakeDrugbankInputs + SmallMolecule: fakeDrugbankInputs }) expect(Object.keys(res)).toHaveLength(fakeDrugbankInputs.length + fakeNCBIGeneInputs.length + fakeOMIMGeneInputs.length); expect(res['OMIM:0'][0]).toBeInstanceOf(IrresolvableBioEntity) @@ -127,7 +127,7 @@ describe("Test ID Resolver", () => { test("Test input with space in it should be correctly resolved", async () => { const resolver = new BioLinkBasedResolver(); - const res = await resolver.resolve({ "ChemicalSubstance": ["name:Regorafenib", "name:Sunitinib", "name:Imatinib", "name:Ponatinib", "name:Dasatinib", "name:Bosutinib", "name:Imatinib Mesylate"] }); + const res = await resolver.resolve({ "SmallMolecule": ["name:Regorafenib", "name:Sunitinib", "name:Imatinib", "name:Ponatinib", "name:Dasatinib", "name:Bosutinib", "name:Imatinib Mesylate"] }); expect(res).toHaveProperty("name:Imatinib Mesylate"); expect(res).toHaveProperty("name:Regorafenib"); expect(res["name:Imatinib Mesylate"]).toHaveLength(1); diff --git a/__tests__/integration/biolink_based_validator.test.ts b/__tests__/integration/biolink_based_validator.test.ts index 5273e01..29624ed 100644 --- a/__tests__/integration/biolink_based_validator.test.ts +++ b/__tests__/integration/biolink_based_validator.test.ts @@ -79,11 +79,11 @@ describe("Integration test for BioLink Based Validator", () => { test("Item with comma in it should be counted as irresolvable", () => { const input = { - ChemicalSubstance: ["KEGG:1,2"] + SmallMolecule: ["KEGG:1,2"] } const validator = new BioLinkBasedValidator(input); validator.validate(); expect(validator.resolvable).toEqual({}); - expect(validator.irresolvable).toHaveProperty('ChemicalSubstance', ["KEGG:1,2"]); + expect(validator.irresolvable).toHaveProperty('SmallMolecule', ["KEGG:1,2"]); }) }) \ No newline at end of file diff --git a/__tests__/integration/default_resolver.test.ts b/__tests__/integration/default_resolver.test.ts index ad1007e..e4ac5f5 100644 --- a/__tests__/integration/default_resolver.test.ts +++ b/__tests__/integration/default_resolver.test.ts @@ -26,11 +26,11 @@ describe("Test ID Resolver", () => { test("Test LINCS ID should be resolved", async () => { const resolver = new DefaultIDResolver(); - const res = await resolver.resolve({ "ChemicalSubstance": ["LINCS:LSM-2471"] }); + const res = await resolver.resolve({ "SmallMolecule": ["LINCS:LSM-2471"] }); expect(res).toHaveProperty("LINCS:LSM-2471"); expect(res['LINCS:LSM-2471']).toHaveLength(1); expect(res['LINCS:LSM-2471'][0]).toBeInstanceOf(ResolvableBioEntity); - expect(res['LINCS:LSM-2471'][0].primaryID).toEqual("CHEBI:8863"); + expect(res['LINCS:LSM-2471'][0].primaryID).toEqual("PUBCHEM.COMPOUND:5070"); expect(res['LINCS:LSM-2471'][0].dbIDs.LINCS).toEqual(["LSM-2471"]); }) @@ -76,14 +76,14 @@ describe("Test ID Resolver", () => { test("Test BioThings output include integer should be converted to string", async () => { const resolver = new DefaultIDResolver(); - const res = await resolver.resolve({ "ChemicalSubstance": ["CHEMBL.COMPOUND:CHEMBL744"] }); + const res = await resolver.resolve({ "SmallMolecule": ["CHEMBL.COMPOUND:CHEMBL744"] }); expect(res['CHEMBL.COMPOUND:CHEMBL744'][0]).toBeInstanceOf(ResolvableBioEntity); expect(res['CHEMBL.COMPOUND:CHEMBL744'][0].dbIDs["PUBCHEM.COMPOUND"]).toEqual(["5070"]); }) test("Test valid inputs from multiple semantic types should be corretly resolved", async () => { const resolver = new DefaultIDResolver(); - const res = await resolver.resolve({ "Gene": ["NCBIGene:1017"], "ChemicalSubstance": ["DRUGBANK:DB01609"] }); + const res = await resolver.resolve({ "Gene": ["NCBIGene:1017"], "SmallMolecule": ["DRUGBANK:DB01609"] }); expect(res).toHaveProperty("NCBIGene:1017"); expect(res['NCBIGene:1017']).toHaveLength(1); expect(res['NCBIGene:1017'][0]).toBeInstanceOf(ResolvableBioEntity); @@ -112,7 +112,7 @@ describe("Test ID Resolver", () => { const resolver = new DefaultIDResolver(); const res = await resolver.resolve({ Gene: [...fakeNCBIGeneInputs, ...fakeOMIMGeneInputs], - ChemicalSubstance: fakeDrugbankInputs + SmallMolecule: fakeDrugbankInputs }) expect(Object.keys(res)).toHaveLength(fakeDrugbankInputs.length + fakeNCBIGeneInputs.length + fakeOMIMGeneInputs.length); expect(res['OMIM:0'][0]).toBeInstanceOf(IrresolvableBioEntity) @@ -172,7 +172,7 @@ describe("Test ID Resolver", () => { test("Test chemical attributes are correctly retrieved", async () => { const resolver = new DefaultIDResolver(); - const res = await resolver.resolve({ "ChemicalSubstance": ["CHEMBL.COMPOUND:CHEMBL744"] }); + const res = await resolver.resolve({ "SmallMolecule": ["CHEMBL.COMPOUND:CHEMBL744"] }); expect(res["CHEMBL.COMPOUND:CHEMBL744"][0].attributes.drugbank_taxonomy_class).toContain("Benzothiazoles"); expect(res["CHEMBL.COMPOUND:CHEMBL744"][0].attributes.chembl_max_phase).toContain("4"); expect(res["CHEMBL.COMPOUND:CHEMBL744"][0].attributes.chembl_molecule_type).toContain("Small molecule"); @@ -232,20 +232,20 @@ describe("Test ID Resolver", () => { expect(res["NCIT:C116936"][0]).toBeInstanceOf(ResolvableBioEntity); }) - // skip RHEA test below per https://github.com/biothings/biomedical_id_resolver.js/pull/56 - test.skip("Test chemical ids can be resolved as RHEA ids", async () => { + // update RHEA test to use MolecularActivity semantic type + test("Test molecular activity ids can be resolved as RHEA ids", async () => { const resolver = new DefaultIDResolver(); - const res = await resolver.resolve({ "ChemicalSubstance": ["PUBCHEM.COMPOUND:5460389"] }); - expect(res["PUBCHEM.COMPOUND:5460389"][0]).toBeInstanceOf(ResolvableBioEntity); - expect(res["PUBCHEM.COMPOUND:5460389"][0].dbIDs).toHaveProperty("RHEA"); - expect(res["PUBCHEM.COMPOUND:5460389"][0].dbIDs.RHEA).toContain("RHEA:37975") + const res = await resolver.resolve({ "MolecularActivity": ["GO:0010176"] }); + expect(res["GO:0010176"][0]).toBeInstanceOf(ResolvableBioEntity); + expect(res["GO:0010176"][0].dbIDs).toHaveProperty("RHEA"); + expect(res["GO:0010176"][0].dbIDs.RHEA).toContain("RHEA:37975") }) - // skip RHEA test below per https://github.com/biothings/biomedical_id_resolver.js/pull/56 - test.skip("Test RHEA ids can be correctly resolved", async () => { + // update RHEA test to use MolecularActivity semantic type + test("Test RHEA ids can be correctly resolved", async () => { const resolver = new DefaultIDResolver(); - const res = await resolver.resolve({ "ChemicalSubstance": ["RHEA:37975"] }); + const res = await resolver.resolve({ "MolecularActivity": ["RHEA:37975"] }); expect(res["RHEA:37975"][0]).toBeInstanceOf(ResolvableBioEntity); - expect(res["RHEA:37975"][0].primaryID).toEqual("CHEBI:16169") + expect(res["RHEA:37975"][0].primaryID).toEqual("GO:0010176") }) }) \ No newline at end of file diff --git a/__tests__/scheduler.test.ts b/__tests__/scheduler.test.ts index 5fa3d6f..fd9fbeb 100644 --- a/__tests__/scheduler.test.ts +++ b/__tests__/scheduler.test.ts @@ -10,7 +10,7 @@ describe("Test Scheduler Class", () => { }) test("Promises with from multiple API with less than 1000 ids should return one promise", () => { - const scheduler = new Scheduler({ "Gene": ["NCBIGene:1017"], "ChemicalSubstance": ["DRUGBANK:DB0001"] }); + const scheduler = new Scheduler({ "Gene": ["NCBIGene:1017"], "SmallMolecule": ["DRUGBANK:DB0001"] }); scheduler.schedule(); expect(scheduler.buckets[0]).toHaveLength(2); }) @@ -19,7 +19,7 @@ describe("Test Scheduler Class", () => { const fakeNCBIGeneInputs = [...Array(1990).keys()].map(item => 'NCBIGene:' + item.toString()); const fakeOMIMGeneInputs = [...Array(2300).keys()].map(item => "OMIM:" + item.toString()); const fakeDrugbankInputs = [...Array(3500).keys()].map(item => "DRUGBANK:DB00" + item.toString()); - const scheduler = new Scheduler({ "Gene": [...fakeNCBIGeneInputs, ...fakeOMIMGeneInputs], "ChemicalSubstance": fakeDrugbankInputs }); + const scheduler = new Scheduler({ "Gene": [...fakeNCBIGeneInputs, ...fakeOMIMGeneInputs], "SmallMolecule": fakeDrugbankInputs }); scheduler.schedule(); expect(scheduler.buckets[0]).toHaveLength(6); expect(scheduler.buckets[1]).toHaveLength(3); diff --git a/__tests__/unittest/bioentity.test.ts b/__tests__/unittest/bioentity.test.ts index 9819457..06d9399 100644 --- a/__tests__/unittest/bioentity.test.ts +++ b/__tests__/unittest/bioentity.test.ts @@ -11,7 +11,7 @@ const CDK2_DB_IDs = { const RILUZOLE_DB_IDS = { "CHEMBL.COMPOUND": ["CHEMBL744"], "name": ["Riluzole", "RILUZOLE"], - "PUBCHEM": ["5070"], + "PUBCHEM.COMPOUND": ["5070"], } const DB_ID_WITH_NO_PRIMARY = { @@ -22,7 +22,11 @@ const DISEASE_DB_IDS = { "MONDO": ["MONDO:12345"] } -const CHEMBL7512_DB_IDS = { "CHEMBL.COMPOUND": ["CHEMBL7512"], "PUBCHEM": ["53428"] } +const CHEMBL7512_DB_IDS = { + "CHEMBL.COMPOUND": ["CHEMBL7512"], + "PUBCHEM.COMPOUND": ["53428"] +} + describe("Test ResolvableBioEntity Class", () => { test("return semanticType when called semanticType property", () => { const entity = new ResolvableBioEntity("Gene", CDK2_DB_IDs, {}); @@ -57,21 +61,21 @@ describe("Test ResolvableBioEntity Class", () => { }) test("if SYMBOL not provided in db ids and name is provided, should return name", () => { - const entity = new ResolvableBioEntity("ChemicalSubstance", RILUZOLE_DB_IDS, {}); + const entity = new ResolvableBioEntity("SmallMolecule", RILUZOLE_DB_IDS, {}); const label = entity.label; expect(label).toBe("Riluzole"); }) test("if both SYMBOL and name are not provided in db ids, should return primary id", () => { - const entity = new ResolvableBioEntity("ChemicalSubstance", CHEMBL7512_DB_IDS, {}); + const entity = new ResolvableBioEntity("SmallMolecule", CHEMBL7512_DB_IDS, {}); const label = entity.label; - expect(label).toBe("CHEMBL.COMPOUND:CHEMBL7512"); + expect(label).toBe("PUBCHEM.COMPOUND:53428"); }) }); describe("Test getCuries function", () => { test("test getCuries", () => { - const entity = new ResolvableBioEntity("ChemicalSubstance", CHEMBL7512_DB_IDS, {}); + const entity = new ResolvableBioEntity("SmallMolecule", CHEMBL7512_DB_IDS, {}); const curies = entity.curies; expect(curies).toContain("CHEMBL.COMPOUND:CHEMBL7512"); expect(curies).toHaveLength(2); @@ -81,7 +85,7 @@ describe("Test ResolvableBioEntity Class", () => { describe("Test getDBIDs function", () => { test("test getDBIDs", () => { - const entity = new ResolvableBioEntity("ChemicalSubstance", CHEMBL7512_DB_IDS, {}); + const entity = new ResolvableBioEntity("SmallMolecule", CHEMBL7512_DB_IDS, {}); const dbIDs = entity.dbIDs; expect(dbIDs).toEqual(CHEMBL7512_DB_IDS); }) @@ -114,7 +118,7 @@ describe("Test IrresolvableBioEntity Class", () => { describe("Test getCuries function", () => { test("test getCuries", () => { - const entity = new IrresolvableBioEntity("ChemicalSubstance", "KK:123"); + const entity = new IrresolvableBioEntity("SmallMolecule", "KK:123"); const curies = entity.curies; expect(curies).toEqual(["KK:123"]); }) @@ -123,7 +127,7 @@ describe("Test IrresolvableBioEntity Class", () => { describe("Test getDBIDs function", () => { test("test getDBIDs", () => { - const entity = new IrresolvableBioEntity("ChemicalSubstance", "KK:123"); + const entity = new IrresolvableBioEntity("SmallMolecule", "KK:123"); const dbIDs = entity.dbIDs; expect(dbIDs).toEqual( { @@ -136,7 +140,7 @@ describe("Test IrresolvableBioEntity Class", () => { describe("Test getAttributes function", () => { test("test getAttributes", () => { - const entity = new IrresolvableBioEntity("ChemicalSubstance", "KK:123"); + const entity = new IrresolvableBioEntity("SmallMolecule", "KK:123"); const attributes = entity.attributes; expect(attributes).toEqual( { diff --git a/__tests__/validate.test.ts b/__tests__/validate.test.ts index c22358a..8f5756f 100644 --- a/__tests__/validate.test.ts +++ b/__tests__/validate.test.ts @@ -117,13 +117,13 @@ describe("Test Validator Class", () => { describe("Test validate function", () => { test("valid answers can be retrieved through valid property of the class", () => { - const test_data = { "Gene": ["NCBIGene:1017", "kkk:1323"], "ChemicalSubstance": ["DRUGBANK:DB0001"] }; + const test_data = { "Gene": ["NCBIGene:1017", "kkk:1323"], "SmallMolecule": ["DRUGBANK:DB0001"] }; const vd = new DefaultValidator(test_data); vd.validate(); expect(vd.resolvable).toHaveProperty("Gene"); expect(vd.resolvable.Gene).toEqual(['NCBIGene:1017']); - expect(vd.resolvable).toHaveProperty("ChemicalSubstance"); - expect(vd.resolvable.ChemicalSubstance).toEqual(["DRUGBANK:DB0001"]) + expect(vd.resolvable).toHaveProperty("SmallMolecule"); + expect(vd.resolvable.SmallMolecule).toEqual(["DRUGBANK:DB0001"]) }) }) }) diff --git a/package-lock.json b/package-lock.json index c091b6c..330a192 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "biomedical_id_resolver", - "version": "3.9.1", + "version": "3.10.0", "lockfileVersion": 2, "requires": true, "packages": { @@ -12,7 +12,7 @@ "@commitlint/cli": "^11.0.0", "@commitlint/config-conventional": "^11.0.0", "axios": "^0.21.1", - "biolink-model": "^0.3.1", + "biolink-model": "^0.4.0", "debug": "^4.3.1", "husky": "^4.3.8", "lodash": "^4.17.21" @@ -1665,9 +1665,9 @@ } }, "node_modules/biolink-model": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/biolink-model/-/biolink-model-0.3.1.tgz", - "integrity": "sha512-kqGMG68FkNjYxyOI8D7ZWyDtrRhIVkkEXt977VjomxAUbwgmhVjTqg39QkTvXdfn/SDKs/+HU2wv3xak/vFs+g==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/biolink-model/-/biolink-model-0.4.0.tgz", + "integrity": "sha512-nu0lJsF1jQYM/82/gOnxXypJ1lO5Ip0WTpXiDQUKxYRqpALpHmExlmXWA4B7Je53BnP9cgZMGlNaP3ZZX1F33w==", "dependencies": { "axios": "^0.21.1", "debug": "^4.3.1", @@ -10427,9 +10427,9 @@ } }, "biolink-model": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/biolink-model/-/biolink-model-0.3.1.tgz", - "integrity": "sha512-kqGMG68FkNjYxyOI8D7ZWyDtrRhIVkkEXt977VjomxAUbwgmhVjTqg39QkTvXdfn/SDKs/+HU2wv3xak/vFs+g==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/biolink-model/-/biolink-model-0.4.0.tgz", + "integrity": "sha512-nu0lJsF1jQYM/82/gOnxXypJ1lO5Ip0WTpXiDQUKxYRqpALpHmExlmXWA4B7Je53BnP9cgZMGlNaP3ZZX1F33w==", "requires": { "axios": "^0.21.1", "debug": "^4.3.1", diff --git a/package.json b/package.json index 05dcaed..bb215e7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "biomedical_id_resolver", - "version": "3.9.1", + "version": "3.10.0", "description": "js library for converting biomedical entity ids in batch", "main": "built/index.js", "scripts": { @@ -48,10 +48,10 @@ "typescript": "^4.2.3" }, "dependencies": { + "biolink-model": "^0.4.0", "@commitlint/cli": "^11.0.0", "@commitlint/config-conventional": "^11.0.0", "axios": "^0.21.1", - "biolink-model": "^0.3.1", "debug": "^4.3.1", "husky": "^4.3.8", "lodash": "^4.17.21" diff --git a/src/common/types.ts b/src/common/types.ts index 892469d..5ad2e59 100644 --- a/src/common/types.ts +++ b/src/common/types.ts @@ -13,11 +13,15 @@ export interface BioThingsAPIFailedQueryResponse extends BioThingsAPIQueryRespon export type ResolvableSemanticTypes = | 'Gene' + | 'Transcript' + | 'Protein' | 'SequenceVariant' - | 'ChemicalSubstance' + | 'SmallMolecule' + | 'Drug' | 'Disease' | 'DiseaseOrPhenotypicFeature' | 'PhenotypicFeature' + | 'ClinicalFinding' | 'MolecularActivity' | 'BiologicalProcess' | 'CellularComponent' @@ -27,11 +31,15 @@ export type ResolvableSemanticTypes = export enum ResolvableTypes { Gene = 'Gene', + Transcript = 'Transcript', + Protein = 'Protein', SequenceVariant = 'SequenceVariant', - ChemicalSubstance = 'ChemicalSubstance', + SmallMolecule = 'SmallMolecule', + Drug = 'Drug', Disease = 'Disease', DiseaseOrPhenotypicFeature = 'DiseaseOrPhenotypicFeature', PhenotypicFeature = 'PhenotypicFeature', + ClinicalFinding = 'ClinicalFinding', MolecularActivity = 'MolecularActivity', BiologicalProcess = 'BiologicalProcess', CellularComponent = 'CellularComponent', diff --git a/src/config.ts b/src/config.ts index 3c9d6f6..70a541a 100644 --- a/src/config.ts +++ b/src/config.ts @@ -12,7 +12,7 @@ export const MAX_CONCURRENT_QUERIES = 3; export const APIMETA: MetaDataItemsObject = { Gene: { - id_ranks: ['NCBIGene', 'ENSEMBL', 'HGNC', 'SYMBOL', 'OMIM', 'UniProtKB', 'UMLS', 'MGI', 'name'], + id_ranks: ['NCBIGene', 'ENSEMBL', 'HGNC', 'MGI', 'OMIM', 'UMLS', 'SYMBOL', 'UniProtKB', 'name'], semantic: 'Gene', api_name: 'mygene.info', url: 'https://mygene.info/v3/query', @@ -32,8 +32,22 @@ export const APIMETA: MetaDataItemsObject = { type_of_gene: ['type_of_gene'], }, }, + Transcript: { + id_ranks: ['ENSEMBL', 'SYMBOL', 'name'], + semantic: 'Transcript', + api_name: 'mygene.info', + url: 'https://mygene.info/v3/query', + mapping: { + ENSEMBL: ['ensembl.transcript'], + SYMBOL: ['symbol'], + name: ['name'], + }, + additional_attributes_mapping: { + interpro: ['interpro.desc'], + }, + }, Protein: { - id_ranks: ['UniProtKB', 'ENSEMBL', 'SYMBOL', 'UMLS', 'name'], + id_ranks: ['UniProtKB', 'ENSEMBL', 'UMLS', 'SYMBOL', 'name'], semantic: 'Protein', api_name: 'mygene.info', url: 'https://mygene.info/v3/query', @@ -49,14 +63,14 @@ export const APIMETA: MetaDataItemsObject = { }, }, SequenceVariant: { - id_ranks: ['HGVS', 'DBSNP', 'MYVARIANT_HG19', 'CLINVAR'], + id_ranks: ['CLINVAR', 'DBSNP', 'HGVS', 'MYVARIANT_HG19'], api_name: 'myvariant.info', semantic: 'SequenceVariant', url: 'https://myvariant.info/v1/query', mapping: { MYVARIANT_HG19: ['_id'], DBSNP: ['dbsnp.rsid', 'clinvar.rsid', 'dbnsfp.rsid'], - HGVS: ['clinvar.hgvs.genomic', 'clinvar.hgvs.protein', 'clinvar.hgvs.coding'], + HGVS: ['clinvar.hgvs.genomic', 'clinvar.hgvs.protein', 'clinvar.hgvs.coding', 'dbnsfp.clinvar.hgvs'], ClINVAR: ['clinvar.variant_id', 'dbnsfp.clinvar.clinvar_id'], }, additional_attributes_mapping: { @@ -67,40 +81,58 @@ export const APIMETA: MetaDataItemsObject = { sift_category: ['cadd.sift.cat'], }, }, - ChemicalSubstance: { - id_ranks: [ - 'CHEBI', - 'CHEMBL.COMPOUND', - 'DRUGBANK', - 'PUBCHEM.COMPOUND', - 'MESH', - 'INCHI', - 'INCHIKEY', - 'UNII', - 'KEGG', - 'UMLS', - 'name', - ], - semantic: 'ChemicalSubstance', + SmallMolecule: { + id_ranks: ['PUBCHEM.COMPOUND', 'CHEMBL.COMPOUND', 'UNII', 'CHEBI', 'DRUGBANK', 'MESH', 'CAS', 'HMDB', 'KEGG.COMPOUND', + 'INCHI', 'INCHIKEY', 'UMLS', 'LINCS', 'name'], + semantic: 'SmallMolecule', api_name: 'mychem.info', url: 'https://mychem.info/v1/query', mapping: { - 'CHEMBL.COMPOUND': ['chembl.molecule_chembl_id', 'drugbank.xrefs.chembl', 'drugcentral.xrefs.chembl_id'], - DRUGBANK: ['drugcentral.xrefs.drugbank_id', 'pharmgkb.xrefs.drugbank', 'chebi.xrefs.drugbank', 'drugbank.id'], + 'CHEMBL.COMPOUND': [ + 'chembl.molecule_chembl_id', + 'drugbank.xrefs.chembl', + 'drugcentral.xrefs.chembl_id', + 'unichem.chembl', + ], + DRUGBANK: [ + 'drugcentral.xrefs.drugbank_id', + 'pharmgkb.xrefs.drugbank', + 'chebi.xrefs.drugbank', + 'drugbank.id', + 'unichem.drugbank', + ], 'PUBCHEM.COMPOUND': [ 'pubchem.cid', 'drugbank.xrefs.pubchem.cid', 'drugcentral.xrefs.pubchem_cid', 'pharmgkb.xrefs.pubchem.cid', + 'chebi.xrefs.pubchem.cid', + 'unichem.pubchem', + ], + CHEBI: [ + 'chebi.id', + 'chembl.chebi_par_id', + 'drugbank.xrefs.chebi', + 'drugcentral.xrefs.chebi', + 'pharmgkb.xrefs.chebi', + 'unichem.chebi', ], - CHEBI: ['chebi.id', 'chembl.chebi_par_id', 'drugbank.xrefs.chebi', 'drugcentral.xrefs.chebi'], UMLS: ['drugcentral.xrefs.umlscui', 'pharmgkb.xrefs.umls', 'umls.cui'], MESH: ['umls.mesh', 'drugcentral.xrefs.mesh_descriptor_ui', 'ginas.xrefs.MESH', 'pharmgkb.xrefs.mesh'], UNII: ['drugcentral.xrefs.unii', 'unii.unii', 'aeolus.unii', 'ginas.unii'], - INCHIKEY: ['drugbank.inchi_key', 'ginas.inchikey', 'unii.inchikey', 'chebi.inchikey'], - INCHI: ['drugbank.inchi', 'chebi.inchi', 'chembl.inchi'], - KEGG: ['drugbank.xrefs.kegg.cid'], - LINCS: ['unichem.lincs'], + INCHIKEY: [ + 'drugbank.inchi_key', + 'ginas.inchikey', + 'unii.inchikey', + 'chebi.inchikey', + 'chembl.inchi_key', + 'pubchem.inchi_key', + ], + INCHI: ['drugbank.inchi', 'chebi.inchi', 'chembl.inchi', 'pharmgkb.inchi', 'pubchem.inchi'], + 'KEGG.COMPOUND': ['drugbank.xrefs.kegg.cid', 'chebi.xrefs.kegg_compound', 'pharmgkb.xrefs.kegg_compound'], + LINCS: ['unichem.lincs', 'chebi.xrefs.lincs'], + CAS: ['chebi.xrefs.cas', 'ginas.cas_primary', 'pharmgkb.xrefs.cas'], + HMDB: ['chebi.xrefs.hmdb', 'pharmgkb.xrefs.hmdb'], name: ['chembl.pref_name', 'drugbank.name', 'umls.name', 'ginas.preferred_name', 'pharmgkb.name', 'chebi.name'], }, additional_attributes_mapping: { @@ -118,39 +150,58 @@ export const APIMETA: MetaDataItemsObject = { }, }, Drug: { - id_ranks: [ - 'CHEBI', - 'CHEMBL.COMPOUND', - 'DRUGBANK', - 'PUBCHEM.COMPOUND', - 'MESH', - 'INCHI', - 'INCHIKEY', - 'UNII', - 'KEGG', - 'UMLS', - 'LINCS', - 'name', - ], - semantic: 'ChemicalSubstance', + id_ranks: ['RXCUI', 'NDC', 'DRUGBANK', 'PUBCHEM.COMPOUND', 'CHEMBL.COMPOUND', 'UNII', 'CHEBI', 'MESH', 'CAS', 'HMDB', 'KEGG.COMPOUND', 'INCHI', 'INCHIKEY', 'UMLS', 'LINCS', 'name'], + semantic: 'Drug', api_name: 'mychem.info', url: 'https://mychem.info/v1/query', mapping: { - 'CHEMBL.COMPOUND': ['chembl.molecule_chembl_id', 'drugbank.xrefs.chembl', 'drugcentral.xrefs.chembl_id'], - DRUGBANK: ['drugcentral.xrefs.drugbank_id', 'pharmgkb.xrefs.drugbank', 'chebi.xrefs.drugbank', 'drugbank.id'], + 'CHEMBL.COMPOUND': [ + 'chembl.molecule_chembl_id', + 'drugbank.xrefs.chembl', + 'drugcentral.xrefs.chembl_id', + 'unichem.chembl', + ], + DRUGBANK: [ + 'drugcentral.xrefs.drugbank_id', + 'pharmgkb.xrefs.drugbank', + 'chebi.xrefs.drugbank', + 'drugbank.id', + 'unichem.drugbank', + ], 'PUBCHEM.COMPOUND': [ 'pubchem.cid', 'drugbank.xrefs.pubchem.cid', 'drugcentral.xrefs.pubchem_cid', 'pharmgkb.xrefs.pubchem.cid', + 'chebi.xrefs.pubchem.cid', + 'unichem.pubchem', + ], + CHEBI: [ + 'chebi.id', + 'chembl.chebi_par_id', + 'drugbank.xrefs.chebi', + 'drugcentral.xrefs.chebi', + 'pharmgkb.xrefs.chebi', + 'unichem.chebi', ], - CHEBI: ['chebi.id', 'chembl.chebi_par_id', 'drugbank.xrefs.chebi', 'drugcentral.xrefs.chebi'], UMLS: ['drugcentral.xrefs.umlscui', 'pharmgkb.xrefs.umls', 'umls.cui'], MESH: ['umls.mesh', 'drugcentral.xrefs.mesh_descriptor_ui', 'ginas.xrefs.MESH', 'pharmgkb.xrefs.mesh'], UNII: ['drugcentral.xrefs.unii', 'unii.unii', 'aeolus.unii', 'ginas.unii'], - INCHIKEY: ['drugbank.inchi_key', 'ginas.inchikey', 'unii.inchikey', 'chebi.inchikey'], - INCHI: ['drugbank.inchi', 'chebi.inchi', 'chembl.inchi'], - KEGG: ['drugbank.xrefs.kegg.cid'], + INCHIKEY: [ + 'drugbank.inchi_key', + 'ginas.inchikey', + 'unii.inchikey', + 'chebi.inchikey', + 'chembl.inchi_key', + 'pubchem.inchi_key', + ], + INCHI: ['drugbank.inchi', 'chebi.inchi', 'chembl.inchi', 'pharmgkb.inchi', 'pubchem.inchi'], + 'KEGG.COMPOUND': ['drugbank.xrefs.kegg.cid', 'chebi.xrefs.kegg_compound', 'pharmgkb.xrefs.kegg_compound'], + LINCS: ['unichem.lincs', 'chebi.xrefs.lincs'], + CAS: ['chebi.xrefs.cas', 'ginas.cas_primary', 'pharmgkb.xrefs.cas'], + HMDB: ['chebi.xrefs.hmdb', 'pharmgkb.xrefs.hmdb'], + RXCUI: ['ginas.xrefs.RXCUI', 'unii.rxcui', 'aeolus.rxcui'], + NDC: ['pharmgkb.xrefs.ndc'], name: ['chembl.pref_name', 'drugbank.name', 'umls.name', 'ginas.preferred_name', 'pharmgkb.name', 'chebi.name'], }, additional_attributes_mapping: { @@ -168,13 +219,13 @@ export const APIMETA: MetaDataItemsObject = { }, }, PhenotypicFeature: { - id_ranks: ['UMLS', 'SNOMEDCT', 'HP', 'MEDDRA', 'EFO', 'NCIT', 'MESH', 'MP', 'name'], + id_ranks: ['HP', 'EFO', 'NCIT', 'UMLS', 'MEDDRA', 'MP', 'SNOMEDCT', 'MESH', 'name'], semantic: 'PhenotypicFeature', api_name: 'HPO API', url: 'https://biothings.ncats.io/hpo/query', mapping: { UMLS: ['xrefs.umls'], - SNOMEDCT: ['xrefs.snomed_ct'], + SNOMEDCT: ['xrefs.snomed_ct', 'xrefs.snomedct_us'], HP: ['_id'], MEDDRA: ['xrefs.meddra'], EFO: ['xrefs.efo'], @@ -185,13 +236,13 @@ export const APIMETA: MetaDataItemsObject = { }, }, Disease: { - id_ranks: ['MONDO', 'DOID', 'OMIM', 'ORPHANET', 'SNOMEDCT', 'NCIT', 'EFO', 'UMLS', 'MESH', 'HP', 'GARD', 'name'], + id_ranks: ['MONDO', 'DOID', 'OMIM', 'ORPHANET', 'EFO', 'UMLS', 'MESH', 'MEDDRA', 'NCIT', 'SNOMEDCT', 'HP', 'GARD', 'name'], semantic: 'Disease', api_name: 'mydisease.info', url: 'https://mydisease.info/v1/query', mapping: { - MONDO: ['mondo.mondo'], - DOID: ['mondo.xrefs.doid'], + MONDO: ['mondo.mondo', 'disgenet.xrefs.mondo'], + DOID: ['mondo.xrefs.doid', 'disease_ontology.doid', 'disgenet.xrefs.doid'], UMLS: [ 'mondo.xrefs.umls', 'mondo.xrefs.umls_cui', @@ -199,19 +250,32 @@ export const APIMETA: MetaDataItemsObject = { 'umls.umls', 'disease_ontology.xrefs.umls_cui', ], - name: ['mondo.label', 'disgenet.xrefs.disease_name'], + name: ['mondo.label', 'disgenet.xrefs.disease_name', 'disease_ontology.name'], MESH: ['mondo.xrefs.mesh', 'disease_ontology.xrefs.mesh', 'ctd.mesh'], - OMIM: ['mondo.xrefs.omim', 'hpo.omim', 'disgenet.xrefs.omim'], - EFO: ['mondo.xrefs.efo'], + OMIM: ['mondo.xrefs.omim', 'hpo.omim', 'disgenet.xrefs.omim', 'disease_ontology.xrefs.omim'], + EFO: ['mondo.xrefs.efo', 'disgenet.xrefs.efo', 'disease_ontology.xrefs.efo'], ORPHANET: ['hpo.orphanet', 'mondo.xrefs.orphanet'], GARD: ['mondo.xrefs.gard', 'disease_ontology.xrefs.gard'], - HP: ['mondo.xrefs.hp'], + HP: ['mondo.xrefs.hp', 'disgenet.xrefs.hp'], SNOMEDCT: ['mondo.xrefs.sctid', 'umls.snomed.preferred', 'umls.snomed.non-preferred'], - NCIT: ['mondo.xrefs.ncit', 'disease_ontology.xrefs.ncit'] + NCIT: ['mondo.xrefs.ncit', 'disease_ontology.xrefs.ncit'], + MEDDRA: ['mondo.xrefs.meddra', 'disease_ontology.xrefs.meddra'], + }, + }, + ClinicalFinding: { + id_ranks: ['LOINC', 'NCIT', 'EFO', 'name'], + semantic: 'Disease', + api_name: 'mydisease.info', + url: 'https://mydisease.info/v1/query', + mapping: { + LOINC: ['mondo.xrefs.loinc'], + NCIT: ['mondo.xrefs.ncit', 'disease_ontology.xrefs.ncit'], + EFO: ['mondo.xrefs.efo', 'disgenet.xrefs.efo', 'disease_ontology.xrefs.efo'], + name: ['mondo.label', 'disgenet.xrefs.disease_name', 'disease_ontology.name'], }, }, MolecularActivity: { - id_ranks: ['GO', 'MetaCyc', 'RHEA', 'KEGG', 'REACT', 'name'], + id_ranks: ['GO', 'REACT', 'RHEA', 'MetaCyc', 'KEGG.REACTION', 'name'], semantic: 'MolecularActivity', api_name: 'Gene Ontology Molecular Function API', url: 'https://biothings.ncats.io/go_mf/query', @@ -219,13 +283,13 @@ export const APIMETA: MetaDataItemsObject = { GO: ['_id'], MetaCyc: ['xrefs.metacyc'], RHEA: ['xrefs.rhea'], - KEGG: ['xrefs.kegg_reaction'], + 'KEGG.REACTION': ['xrefs.kegg_reaction'], REACT: ['xrefs.reactome'], name: ['name'], }, }, BiologicalProcess: { - id_ranks: ['GO', 'MetaCyc', 'REACT', 'KEGG', 'name'], + id_ranks: ['GO', 'REACT', 'MetaCyc', 'KEGG', 'name'], semantic: 'BiologicalProcess', api_name: 'Gene Ontology Biological Process API', url: 'https://biothings.ncats.io/go_bp/query', @@ -244,21 +308,23 @@ export const APIMETA: MetaDataItemsObject = { url: 'https://biothings.ncats.io/go_cc/query', mapping: { GO: ['_id'], - MetaCyc: ['xrefs.metacyc'], + MetaCyc: ['xrefs.metacyc'], // field missing in the API? name: ['name'], }, }, Pathway: { - id_ranks: ['REACT', 'KEGG', 'PHARMGKB', 'WIKIPATHWAYS', 'BIOCARTA', 'name'], + id_ranks: ['GO', 'REACT', 'KEGG', 'SMPDB', 'PHARMGKB.PATHWAYS', 'WIKIPATHWAYS', 'BIOCARTA', 'name'], semantic: 'Pathway', - api_name: 'geneset API', + api_name: 'Geneset API', url: 'https://biothings.ncats.io/geneset/query', mapping: { REACT: ['reactome'], WIKIPATHWAYS: ['wikipathways'], KEGG: ['kegg'], BIOCARTA: ['biocarta'], - PHARMGKB: ['pharmgkb'], + 'PHARMGKB.PATHWAYS': ['pharmgkb'], + GO: ['go'], + SMPDB: ['smpdb'], name: ['name'], }, additional_attributes_mapping: { @@ -274,20 +340,20 @@ export const APIMETA: MetaDataItemsObject = { UBERON: ['_id'], UMLS: ['xrefs.umls'], MESH: ['xrefs.mesh'], - NCIT: ['xrefs.ncit'], + NCIT: ['xrefs.ncit'], // field missing in the API? name: ['name'], }, }, Cell: { id_ranks: ['CL', 'NCIT', 'MESH', 'EFO', 'name'], semantic: 'Cell', - api_name: 'Cell Onotlogy API', + api_name: 'Cell Ontology API', url: 'https://biothings.ncats.io/cell_ontology/query', mapping: { CL: ['_id'], NCIT: ['xrefs.ncit'], MESH: ['xrefs.mesh'], - EFO: ['xrefs.efo'], + EFO: ['xrefs.efo'], // field missing in the API? name: ['name'], }, },