From 2c61710c02e03fd83df986af6f7123f0ed90672c Mon Sep 17 00:00:00 2001 From: dmitrymk Date: Tue, 28 Jul 2026 16:11:45 -0300 Subject: [PATCH] Adding new project --- package-lock.json | 482 ++++++++---------- src/assets/projects/projects.json | 9 + .../usdm-biomedical-concept-mapper/logo.png | Bin 0 -> 32383 bytes .../usdm-biomedical-concept-mapper.json | 46 ++ .../usdm-biomedical-concept-mapper.yaml | 96 ++++ 5 files changed, 370 insertions(+), 263 deletions(-) create mode 100644 src/assets/projects/usdm-biomedical-concept-mapper/logo.png create mode 100644 src/assets/projects/usdm-biomedical-concept-mapper/usdm-biomedical-concept-mapper.json create mode 100644 src/assets/projects/usdm-biomedical-concept-mapper/usdm-biomedical-concept-mapper.yaml diff --git a/package-lock.json b/package-lock.json index 2c88946..113d4c4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -72,27 +72,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", - "license": "MIT", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", + "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -101,32 +86,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.3.tgz", - "integrity": "sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", - "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.0", - "@babel/generator": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.0", - "@babel/parser": "^7.26.0", - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.26.0", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -198,15 +181,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.3.tgz", - "integrity": "sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.26.3", - "@babel/types": "^7.26.3", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", + "dependencies": { + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" }, "engines": { @@ -227,14 +209,13 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", - "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -330,6 +311,14 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", @@ -345,28 +334,26 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", - "license": "MIT", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -389,11 +376,10 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", - "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -449,29 +435,26 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "license": "MIT", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "license": "MIT", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -492,26 +475,24 @@ } }, "node_modules/@babel/helpers": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", - "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4" + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", - "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", - "license": "MIT", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", "dependencies": { - "@babel/types": "^7.28.5" + "@babel/types": "^7.29.7" }, "bin": { "parser": "bin/babel-parser.js" @@ -1451,16 +1432,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", - "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.7.tgz", + "integrity": "sha512-TM2ZcQLoG2/y4HODiStCo10DibYhWhGWAwVv+EQKmG/7GFl0N+AAmUiXOMKM+aiJ9XBJ9AHVZBvTzMnJ2sM3cQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -2180,45 +2160,42 @@ } }, "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", - "license": "MIT", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.26.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.4.tgz", - "integrity": "sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==", - "license": "MIT", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.3", - "@babel/parser": "^7.26.3", - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.3", - "debug": "^4.3.1", - "globals": "^11.1.0" + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", - "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", - "license": "MIT", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -2995,11 +2972,10 @@ } }, "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.0.tgz", + "integrity": "sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -3365,17 +3341,22 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", - "license": "MIT", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { @@ -3387,15 +3368,6 @@ "node": ">=6.0.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@jridgewell/source-map": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", @@ -3414,10 +3386,9 @@ "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "license": "MIT", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -6555,11 +6526,10 @@ } }, "node_modules/body-parser": { - "version": "1.20.5", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.5.tgz", - "integrity": "sha512-3grm+/2tUOvu2cjJkvsIxrv/wVpfXQW4PsQHYm7yk4vfpu7Ekl6nEsYBoJUL6qDwZUx8wUhQ8tR2qz+ad9c9OA==", + "version": "1.20.6", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.6.tgz", + "integrity": "sha512-p5tAzS57i5MV9fZFDj9LeIiTZEufbSe2eDozP+ElheSUq1m74CRq1jI4mYNDdVs9vQztXFLuk/Gd6BWTdwRJ5g==", "dev": true, - "license": "MIT", "dependencies": { "bytes": "~3.1.2", "content-type": "~1.0.5", @@ -6630,22 +6600,6 @@ "dev": true, "license": "MIT" }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.15.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz", - "integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/body-parser/node_modules/statuses": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", @@ -6675,11 +6629,10 @@ "license": "ISC" }, "node_modules/brace-expansion": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", - "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.3.tgz", + "integrity": "sha512-DRdx5neNsG/QXbniLFWi2YmC/68oeOOmKz6zOjVk6ZS1ZLXgLIKqVEc6hWsmkjBbgii0SwaBTcJ5XKj5gzY/4A==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -9642,15 +9595,14 @@ } }, "node_modules/express": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", - "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.2.tgz", + "integrity": "sha512-IuL+Elrou2ZvCFHs18/CIzy2Nzvo25nZ1/D2eIZlz7c+QUayAcYoiM2BthCjs+EBHVpjYjcuLDAiCWgeIX3X1Q==", "dev": true, - "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "~1.20.3", + "body-parser": "~1.20.5", "content-disposition": "~0.5.4", "content-type": "~1.0.4", "cookie": "~0.7.1", @@ -9669,7 +9621,7 @@ "parseurl": "~1.3.3", "path-to-regexp": "~0.1.12", "proxy-addr": "~2.0.7", - "qs": "~6.14.0", + "qs": "~6.15.1", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", "send": "~0.19.0", @@ -9770,11 +9722,20 @@ "license": "MIT" }, "node_modules/fast-uri": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", - "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.4.tgz", + "integrity": "sha512-8JnbkQ4juDyvYs4mgFGQqg4yCYtFDtUtmp2QIQq11ZZe5CFQ5wcqm1rqDgAh/QdMySuBnPzMUiJUNZG5N/AiQw==", "dev": true, - "license": "BSD-3-Clause" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ] }, "node_modules/fastparse": { "version": "1.1.2", @@ -10229,16 +10190,15 @@ } }, "node_modules/form-data": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.4.tgz", - "integrity": "sha512-f0cRzm6dkyVYV3nPoooP8XlccPQukegwhAnpoLcXy+X+A8KfpGOoXwDr9FLZd3wzgLaBGQBE3lY93Zm/i1JvIQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.5.tgz", + "integrity": "sha512-j23EibVLnp4zNXGW7LjryXYa2X6U/M96yoOX+ybZxwkYajdxRNEqYY3zhh7y0i6kfISKS2jr+EJq1YTUDEv5+w==", "dev": true, - "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", + "hasown": "^2.0.4", "mime-types": "^2.1.35" }, "engines": { @@ -10612,6 +10572,7 @@ "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -10791,10 +10752,9 @@ } }, "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", "dependencies": { "function-bind": "^1.1.2" }, @@ -11259,11 +11219,10 @@ } }, "node_modules/http-proxy-middleware": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", - "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.10.tgz", + "integrity": "sha512-RKzRWNPxUZqbuk3BC5mGVJbBnWgr+diEnjJexIOytFbBzDy88Fbh/YvBr3DsNrl1jYAfjWfpATEv0NO35FDuPQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/http-proxy": "^1.17.8", "http-proxy": "^1.18.1", @@ -11402,11 +11361,10 @@ } }, "node_modules/immutable": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.5.tgz", - "integrity": "sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==", - "dev": true, - "license": "MIT" + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.9.tgz", + "integrity": "sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==", + "dev": true }, "node_modules/import-fresh": { "version": "3.3.0", @@ -13281,11 +13239,20 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz", + "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==", "dev": true, - "license": "MIT", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], "dependencies": { "argparse": "^2.0.1" }, @@ -13496,14 +13463,13 @@ } }, "node_modules/launch-editor": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.9.1.tgz", - "integrity": "sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==", + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.14.1.tgz", + "integrity": "sha512-QWBrQsMpH7gPr965dsKD/3cKWiNoTjpATQf++Xq63N6sKRGMwlVXz41O1IZTMfZQgBctD/K5Zt06+/I6pP6+HA==", "dev": true, - "license": "MIT", "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.8.1" + "picocolors": "^1.1.1", + "shell-quote": "^1.8.4" } }, "node_modules/less": { @@ -14878,9 +14844,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.12", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", - "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "version": "3.3.16", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz", + "integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==", "dev": true, "funding": [ { @@ -14888,7 +14854,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -15074,11 +15039,10 @@ } }, "node_modules/object-inspect": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", - "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -15754,9 +15718,9 @@ } }, "node_modules/postcss": { - "version": "8.5.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.14.tgz", - "integrity": "sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==", + "version": "8.5.24", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.24.tgz", + "integrity": "sha512-8RyVklq0owXUTa4xlpzu4l9AaVKIdQvAcOHZWaMh98HgySsUtxRVf/chRe3dsSLqb6i40BzGRzEUddRaI+9TSw==", "dev": true, "funding": [ { @@ -15772,9 +15736,8 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { - "nanoid": "^3.3.11", + "nanoid": "^3.3.16", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -17675,13 +17638,13 @@ } }, "node_modules/qs": { - "version": "6.14.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", - "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", + "version": "6.15.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz", + "integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.1.0" + "es-define-property": "^1.0.1", + "side-channel": "^1.1.1" }, "engines": { "node": ">=0.6" @@ -19232,11 +19195,10 @@ } }, "node_modules/shell-quote": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", - "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.10.0.tgz", + "integrity": "sha512-w1aiOKwKuRgtwAReIIj89puqg+I7GvX4IbLrvmhXbzQsj1+Zwi4VO3+fa6ZF91TWSjIxoEkKnMeHcLEODK5ZXA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -19245,15 +19207,14 @@ } }, "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", "dev": true, - "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" }, @@ -19265,14 +19226,13 @@ } }, "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", "dev": true, - "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" + "object-inspect": "^1.13.4" }, "engines": { "node": ">= 0.4" @@ -20090,11 +20050,10 @@ "license": "MIT" }, "node_modules/svgo": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.3.tgz", - "integrity": "sha512-+wn7I4p7YgJhHs38k2TNjy1vCfPIfLIJWR5MnCStsN8WuuTcBnRKcMHQLMM2ijxGZmDoZwNv8ipl5aTTen62ng==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.4.tgz", + "integrity": "sha512-GsNRis4e8jxn2Y9ENz/8lbJ93CstG8svtMnuRaHbiF2LTJ5tK0/q3t/URPq9Zc7zVWBJnNnJMIp6bevK7bSmNg==", "dev": true, - "license": "MIT", "dependencies": { "commander": "^7.2.0", "css-select": "^5.1.0", @@ -21457,11 +21416,10 @@ } }, "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "version": "8.21.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.1.tgz", + "integrity": "sha512-+0NTnW77fFN/DjQi6k/Sq/Yvk4Sgajw7urW8V+asjXnRgDs9gyGkdb7EzgfhA4goXsRIZKE28fzIXBHEzhuiWw==", "dev": true, - "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -21540,11 +21498,10 @@ } }, "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.5.tgz", + "integrity": "sha512-ZL2+3c7kMBdIRCMz6l8jQMHyGVxj+UL+xVk74Ombiciboca8rHa15L86B19E5oh1pL9Ii/uj54gtsIrZGMo6zA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", @@ -22160,11 +22117,10 @@ } }, "node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "version": "7.5.13", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.13.tgz", + "integrity": "sha512-rsKI6xDBFVf4r/x8XyChGK04QR/XHroxs/jUcoWvtEZM8TPU/X/uIY9B1CsSzYws9ZJb/6bbBu7dPhFW00CAoA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8.3.0" }, diff --git a/src/assets/projects/projects.json b/src/assets/projects/projects.json index 63f33ae..2f29248 100644 --- a/src/assets/projects/projects.json +++ b/src/assets/projects/projects.json @@ -314,5 +314,14 @@ "categories": [ "USDM" ] + }, + { + "id": "usdm-biomedical-concept-mapper", + "name": "USDM Biomedical Concept Mapper", + "description": "Delivers a metadata-driven workflow that retrieves candidate biomedical concepts, reasons across them with large language models, and writes validated mappings back into USDM packages.", + "categories": [ + "USDM", + "SDTM" + ] } ] \ No newline at end of file diff --git a/src/assets/projects/usdm-biomedical-concept-mapper/logo.png b/src/assets/projects/usdm-biomedical-concept-mapper/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..7bdf02c0fe9c283ff202aecf116c2ed3385b2269 GIT binary patch literal 32383 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 literal 0 HcmV?d00001 diff --git a/src/assets/projects/usdm-biomedical-concept-mapper/usdm-biomedical-concept-mapper.json b/src/assets/projects/usdm-biomedical-concept-mapper/usdm-biomedical-concept-mapper.json new file mode 100644 index 0000000..98b9b49 --- /dev/null +++ b/src/assets/projects/usdm-biomedical-concept-mapper/usdm-biomedical-concept-mapper.json @@ -0,0 +1,46 @@ +{ + "projectInfo": { + "projectName": "USDM Biomedical Concept Mapper", + "projectOwner": "AI-LENS", + "projectContact": [ + "pritamdey@ailens.ai", + "rchpradeep@ailens.ai", + "chekresh.hosbect@ailens.ai" + ], + "projectLandingPage": "https://github.com/AI-LENS/usdm-bc-mapper", + "projectRepository": "https://github.com/AI-LENS/usdm-bc-mapper", + "programmingLanguage": [ + "Python" + ], + "openSourceLicense": [ + "GPL-3.0" + ], + "cdiscStandards": [ + "USDM", + "SDTM" + ], + "projectMaturity": "Beta", + "agreeWithCdiscCodeOfEthics": true, + "user": [ + "Clinical standards leads", + "Clinical programmers", + "Study data managers" + ], + "logoUrl": "" + }, + "detailedDescription": { + "problem": "Clinical teams need dependable ways to express protocol and study activities as structured metadata that can drive automation across design, build, and analysis. Today, mappings between planned activities and CDISC biomedical concepts within the Unified Study Data Model (USDM) is done manually, which is hard to replicate, audit, and scale. This slows study startup,increases rework, and limits the ability to standardize processes.", + "solution": "The USDM Biomedical Concept Mapper delivers a metadata-driven workflow that\nretrieves candidate biomedical concepts, reasons across them with commercial or\nopen-source large language models, and writes validated mappings back into USDM\npackages. The lightweight CLI (`bcm`) supports mapping full studies, targeted\nconcept lookups, and retrieval-only searches, providing explainable outputs and\nconfidence scoring. Retrieval uses BM25 plus Polars indices over the latest CDISC\nbiomedical concepts and SDTM dataset specializations, while the mapper writes\ndeterministic JSON aligned with the official USDM SDK to enable automation across\nstudy design and build.", + "openSourceConsiderations": "The project is released under the GNU General Public License v3.0 to encourage\ncollaboration, transparency, and community auditability. Core dependencies are\npermissively licensed, and the repository ships with reproducible retrieval\ndatasets under the CDISC terms-of-use. Open-source distribution ensures\norganizations can deploy the agent with their preferred infrastructure, including\nself-hosted LLMs.", + "maintenanceModel": "AI-LENS stewards the GitHub repository, tags semantic versions (current release\n0.3.2), and tracks issues and feature requests through GitHub Issues. Continuous\nintegration relies on pytest and pre-commit hooks, and data updates to the CDISC\nindices are scripted to keep pace with COSMoS exports. Roadmap discussions happen\nin pull requests to maintain traceable decision history.", + "projectSize": "Medium. The codebase spans multiple modules, packaged datasets (~40 MB of CDISC\nterminology), and a CLI surface. Active development began in 2025 and continues\nwith frequent releases.", + "contributors": "Contributors follow the repository's contributing guidelines, run `pre-commit run\n--all-files`, and add pytest coverage for new features. Pull requests require\ndescriptive change logs and must respect the GPL-3.0 licensing obligations and\nCDISC data usage terms.", + "userDetails": "Target users are CDISC standards teams, study data managers, and clinical\nprogrammers who want explainable USDM-to-biomedical concept mappings to drive\nmetadata reuse and automation. Users are expected to understand USDM structures,\nCDISC controlled terminology, and basic command-line workflows. Output artifacts\nare designed for downstream study build, analytics, and documentation pipelines.", + "preRequisites": "Python 3.13+, `uv` or another PEP 668-compliant environment manager, and read\naccess to CDISC biomedical concept data packaged with the repository. For\nLLM-assisted mapping, users must configure API credentials (e.g., OpenAI, Gemini,\nor self-hosted endpoints) in `config.yaml`.", + "projectServiceOptions": "Community support is offered through the GitHub issue tracker. Enterprise users\ncan engage AI-LENS for collaboration or validation partnerships on request; there\nis no mandatory commercial service.", + "sponsors": "Self-funded by AI-LENS", + "goalsObjectives": "Deliver a production-ready, transparent pipeline that:\n- Keeps USDM artifacts aligned with authoritative CDISC biomedical concepts\n- Improves metadata reuse and traceability across studies\n- Reduces manual reconciliation and review effort\n- Standardizes mappings with explainability\n- Enables downstream automation across study build, analytics, and documentation\n- Integrates with existing metadata repositories and CI workflows via a CLI", + "communications": "Primary communication channels are GitHub Issues and pull requests. Project news\nis shared via repository releases and README updates; contributors may reach the\nmaintainers directly via the published email contacts.", + "additonalInformation": "The CLI exposes `usdm`, `find-bc-cdisc`, and `search-bc-cdisc` commands. Detailed\nconfiguration guidance, architecture diagrams, and AI SDK compatibility notes are\navailable in the README and `docs` folder. Early adopters can iterate on automated\ndata flows today and contribute improvements via GitHub issues and pull requests." + } +} \ No newline at end of file diff --git a/src/assets/projects/usdm-biomedical-concept-mapper/usdm-biomedical-concept-mapper.yaml b/src/assets/projects/usdm-biomedical-concept-mapper/usdm-biomedical-concept-mapper.yaml new file mode 100644 index 0000000..d6dc159 --- /dev/null +++ b/src/assets/projects/usdm-biomedical-concept-mapper/usdm-biomedical-concept-mapper.yaml @@ -0,0 +1,96 @@ +projectInfo: + projectName: USDM Biomedical Concept Mapper + projectOwner: AI-LENS + projectContact: + - pritamdey@ailens.ai + - rchpradeep@ailens.ai + - chekresh.hosbect@ailens.ai + projectLandingPage: https://github.com/AI-LENS/usdm-bc-mapper + projectRepository: https://github.com/AI-LENS/usdm-bc-mapper + programmingLanguage: + - Python + openSourceLicense: + - GPL-3.0 + cdiscStandards: + - USDM + - SDTM + projectMaturity: Beta + agreeWithCdiscCodeOfEthics: true + user: + - Clinical standards leads + - Clinical programmers + - Study data managers + logoUrl: +detailedDescription: + problem: >- + Clinical teams need dependable ways to express protocol and study activities as + structured metadata that can drive automation across design, build, and analysis. + Today, mappings between planned activities and CDISC biomedical concepts within + the Unified Study Data Model (USDM) is done manually, which is hard to replicate, + audit, and scale. This slows study startup,increases rework, and limits the ability + to standardize processes. + solution: |- + The USDM Biomedical Concept Mapper delivers a metadata-driven workflow that + retrieves candidate biomedical concepts, reasons across them with commercial or + open-source large language models, and writes validated mappings back into USDM + packages. The lightweight CLI (`bcm`) supports mapping full studies, targeted + concept lookups, and retrieval-only searches, providing explainable outputs and + confidence scoring. Retrieval uses BM25 plus Polars indices over the latest CDISC + biomedical concepts and SDTM dataset specializations, while the mapper writes + deterministic JSON aligned with the official USDM SDK to enable automation across + study design and build. + openSourceConsiderations: |- + The project is released under the GNU General Public License v3.0 to encourage + collaboration, transparency, and community auditability. Core dependencies are + permissively licensed, and the repository ships with reproducible retrieval + datasets under the CDISC terms-of-use. Open-source distribution ensures + organizations can deploy the agent with their preferred infrastructure, including + self-hosted LLMs. + maintenanceModel: |- + AI-LENS stewards the GitHub repository, tags semantic versions (current release + 0.3.2), and tracks issues and feature requests through GitHub Issues. Continuous + integration relies on pytest and pre-commit hooks, and data updates to the CDISC + indices are scripted to keep pace with COSMoS exports. Roadmap discussions happen + in pull requests to maintain traceable decision history. + projectSize: |- + Medium. The codebase spans multiple modules, packaged datasets (~40 MB of CDISC + terminology), and a CLI surface. Active development began in 2025 and continues + with frequent releases. + contributors: |- + Contributors follow the repository's contributing guidelines, run `pre-commit run + --all-files`, and add pytest coverage for new features. Pull requests require + descriptive change logs and must respect the GPL-3.0 licensing obligations and + CDISC data usage terms. + userDetails: |- + Target users are CDISC standards teams, study data managers, and clinical + programmers who want explainable USDM-to-biomedical concept mappings to drive + metadata reuse and automation. Users are expected to understand USDM structures, + CDISC controlled terminology, and basic command-line workflows. Output artifacts + are designed for downstream study build, analytics, and documentation pipelines. + preRequisites: |- + Python 3.13+, `uv` or another PEP 668-compliant environment manager, and read + access to CDISC biomedical concept data packaged with the repository. For + LLM-assisted mapping, users must configure API credentials (e.g., OpenAI, Gemini, + or self-hosted endpoints) in `config.yaml`. + projectServiceOptions: |- + Community support is offered through the GitHub issue tracker. Enterprise users + can engage AI-LENS for collaboration or validation partnerships on request; there + is no mandatory commercial service. + sponsors: Self-funded by AI-LENS + goalsObjectives: |- + Deliver a production-ready, transparent pipeline that: + - Keeps USDM artifacts aligned with authoritative CDISC biomedical concepts + - Improves metadata reuse and traceability across studies + - Reduces manual reconciliation and review effort + - Standardizes mappings with explainability + - Enables downstream automation across study build, analytics, and documentation + - Integrates with existing metadata repositories and CI workflows via a CLI + communications: |- + Primary communication channels are GitHub Issues and pull requests. Project news + is shared via repository releases and README updates; contributors may reach the + maintainers directly via the published email contacts. + additonalInformation: |- + The CLI exposes `usdm`, `find-bc-cdisc`, and `search-bc-cdisc` commands. Detailed + configuration guidance, architecture diagrams, and AI SDK compatibility notes are + available in the README and `docs` folder. Early adopters can iterate on automated + data flows today and contribute improvements via GitHub issues and pull requests.