From 5a999b47372617b9669d06f597fc4eac01e1a4ba Mon Sep 17 00:00:00 2001 From: hamed musallam Date: Thu, 19 Feb 2026 14:56:01 +0100 Subject: [PATCH 1/4] chore(nmr-cli): update dependencies --- app/scripts/nmr-cli/package-lock.json | 18 +++++++++--------- app/scripts/nmr-cli/package.json | 4 ++-- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/app/scripts/nmr-cli/package-lock.json b/app/scripts/nmr-cli/package-lock.json index e2ea469..022e78f 100644 --- a/app/scripts/nmr-cli/package-lock.json +++ b/app/scripts/nmr-cli/package-lock.json @@ -12,7 +12,7 @@ "@zakodium/nmr-types": "^0.5.0", "@zakodium/nmrium-core": "^0.5.6", "@zakodium/nmrium-core-plugins": "^0.6.25", - "axios": "^1.13.2", + "axios": "^1.13.5", "file-collection": "^6.5.0", "json-stream-stringify": "^3.1.6", "lodash.merge": "^4.6.2", @@ -28,7 +28,7 @@ }, "devDependencies": { "@types/lodash.merge": "^4.6.9", - "@types/node": "^25.0.8", + "@types/node": "^25.3.0", "@types/yargs": "^17.0.35", "ts-node": "^10.9.2", "typescript": "^5.9.3" @@ -127,14 +127,14 @@ } }, "node_modules/@types/node": { - "version": "25.2.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.3.tgz", - "integrity": "sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ==", + "version": "25.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.0.tgz", + "integrity": "sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "undici-types": "~7.16.0" + "undici-types": "~7.18.0" } }, "node_modules/@types/yargs": { @@ -1483,9 +1483,9 @@ "license": "MIT" }, "node_modules/undici-types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", "dev": true, "license": "MIT" }, diff --git a/app/scripts/nmr-cli/package.json b/app/scripts/nmr-cli/package.json index 4d66360..874d4f1 100644 --- a/app/scripts/nmr-cli/package.json +++ b/app/scripts/nmr-cli/package.json @@ -18,7 +18,7 @@ "@zakodium/nmr-types": "^0.5.0", "@zakodium/nmrium-core": "^0.5.6", "@zakodium/nmrium-core-plugins": "^0.6.25", - "axios": "^1.13.2", + "axios": "^1.13.5", "file-collection": "^6.5.0", "json-stream-stringify": "^3.1.6", "lodash.merge": "^4.6.2", @@ -31,7 +31,7 @@ }, "devDependencies": { "@types/lodash.merge": "^4.6.9", - "@types/node": "^25.0.8", + "@types/node": "^25.3.0", "@types/yargs": "^17.0.35", "ts-node": "^10.9.2", "typescript": "^5.9.3" From d5fc45177004cbf54bc4237a26d4b59ab1a1ccd0 Mon Sep 17 00:00:00 2001 From: hamed musallam Date: Thu, 19 Feb 2026 14:58:59 +0100 Subject: [PATCH 2/4] feat(nmr-cli): update nmrium core dependencies --- app/scripts/nmr-cli/package-lock.json | 90 +++++++++++++-------------- app/scripts/nmr-cli/package.json | 14 ++--- 2 files changed, 52 insertions(+), 52 deletions(-) diff --git a/app/scripts/nmr-cli/package-lock.json b/app/scripts/nmr-cli/package-lock.json index 022e78f..994470e 100644 --- a/app/scripts/nmr-cli/package-lock.json +++ b/app/scripts/nmr-cli/package-lock.json @@ -9,17 +9,17 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "@zakodium/nmr-types": "^0.5.0", - "@zakodium/nmrium-core": "^0.5.6", - "@zakodium/nmrium-core-plugins": "^0.6.25", + "@zakodium/nmr-types": "^0.5.2", + "@zakodium/nmrium-core": "^0.6.5", + "@zakodium/nmrium-core-plugins": "^0.6.39", "axios": "^1.13.5", - "file-collection": "^6.5.0", + "file-collection": "^6.6.0", "json-stream-stringify": "^3.1.6", "lodash.merge": "^4.6.2", "mf-parser": "^3.6.0", - "ml-spectra-processing": "^14.19.0", - "nmr-processing": "^22.1.0", - "openchemlib": "^9.19.0", + "ml-spectra-processing": "^14.20.0", + "nmr-processing": "^22.5.0", + "openchemlib": "^9.20.0", "playwright": "1.56.1", "yargs": "^18.0.0" }, @@ -155,59 +155,59 @@ "license": "MIT" }, "node_modules/@zakodium/nmr-types": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@zakodium/nmr-types/-/nmr-types-0.5.0.tgz", - "integrity": "sha512-GjxJ8JQJ3DOzKY/ucxvCJ0X3nlGl8Qk9J6Kng4XTm+rZSKgwj2Xu98IDSZvpJKxr9v0bS0reXfmvNRvSe+fPgg==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@zakodium/nmr-types/-/nmr-types-0.5.2.tgz", + "integrity": "sha512-tT7mezDYiiIFrgE1xunmobO9vbMOCMRHtJ3Ei3ArHHq49oGBPoe7a5rWWK6mX4YCUsahhgO503HKwufwge8pLg==", "license": "CC-BY-NC-SA-4.0", "dependencies": { "ml-peak-shape-generator": "^4.2.0", - "ml-signal-processing": "^2.1.0", - "ml-spectra-processing": "^14.18.1" + "ml-signal-processing": "^2.2.0", + "ml-spectra-processing": "^14.19.0" } }, "node_modules/@zakodium/nmrium-core": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/@zakodium/nmrium-core/-/nmrium-core-0.5.6.tgz", - "integrity": "sha512-upeFb+KZECOIik3wxra9tjrbjiZvivIR4UDdQF3REibzyqB8zxsZrT4WMpdRkphqTvj51OK+yQgyc1R1TNqeLQ==", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@zakodium/nmrium-core/-/nmrium-core-0.6.5.tgz", + "integrity": "sha512-xSlz1uL1xFZQkFyIqd3c8dffDfixHFrDU7MuZzDJcomC1lu8/uFqnveqq0I+XFhRrFPlf48gXTF9AuOb9GLA/g==", "license": "CC-BY-NC-SA-4.0", "dependencies": { - "cheminfo-types": "^1.8.1", + "cheminfo-types": "^1.10.0", "fifo-logger": "^2.0.1", - "file-collection": "^6.5.0", + "file-collection": "^6.6.0", "is-any-array": "^2.0.1", "lodash.merge": "^4.6.2", - "ml-spectra-processing": "^14.18.2", + "ml-spectra-processing": "^14.19.0", "nmr-correlation": "^2.3.5" } }, "node_modules/@zakodium/nmrium-core-plugins": { - "version": "0.6.25", - "resolved": "https://registry.npmjs.org/@zakodium/nmrium-core-plugins/-/nmrium-core-plugins-0.6.25.tgz", - "integrity": "sha512-11BfZNDKj1ei0q4TruBvSfE8VNoLEddm0WYHnOjY9yDDHHSmj0dqECvAnCRCnRbm0d/9IPx130bY4PQGHcMtQA==", + "version": "0.6.39", + "resolved": "https://registry.npmjs.org/@zakodium/nmrium-core-plugins/-/nmrium-core-plugins-0.6.39.tgz", + "integrity": "sha512-1kgPHIpP7vDXGgG17w9NkeGx0TQJNTXokzKYw/CIh5SqYNuPSZut4r28gWcqP3QBZzlnK+fXUFL2eSjZm35VFg==", "license": "CC-BY-NC-SA-4.0", "dependencies": { "@date-fns/utc": "^2.1.1", - "@zakodium/nmrium-core": "^0.5.6", - "cheminfo-types": "^1.8.1", + "@zakodium/nmrium-core": "^0.6.5", + "cheminfo-types": "^1.10.0", "convert-to-jcamp": "^6.0.0", "date-fns": "^4.1.0", - "file-collection": "^6.5.0", + "file-collection": "^6.6.0", "gyromagnetic-ratio": "^2.0.0", "is-any-array": "^2.0.1", - "jcampconverter": "^12.1.0", + "jcampconverter": "^12.2.0", "linear-sum-assignment": "^1.0.9", "lodash.merge": "^4.6.2", - "ml-spectra-processing": "^14.18.2", - "nmr-processing": "^22.1.0", - "openchemlib": "^9.18.2", - "openchemlib-utils": "^8.8.1", + "ml-spectra-processing": "^14.19.0", + "nmr-processing": "^22.5.0", + "openchemlib": "^9.20.0", + "openchemlib-utils": "^8.12.1", "sdf-parser": "^7.0.4" } }, "node_modules/@zip.js/zip.js": { - "version": "2.8.20", - "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.8.20.tgz", - "integrity": "sha512-oJzVhK9gnSKD++WLG37QEgeTgm5W8XUYmNv0EhOxytSr85vXn9EMpOoKNTK3yWDLa55Z0MovKW/6RNeh9OUmnA==", + "version": "2.8.21", + "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.8.21.tgz", + "integrity": "sha512-fkyzXISE3IMrstDO1AgPkJCx14MYHP/suIGiAovEYEuBjq3mffsuL6aMV7ohOSjW4rXtuACuUfpA3GtITgdtYg==", "license": "BSD-3-Clause", "engines": { "bun": ">=0.7.0", @@ -553,9 +553,9 @@ } }, "node_modules/file-collection": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/file-collection/-/file-collection-6.5.0.tgz", - "integrity": "sha512-c54WgyKBiiFtEVrmmhGvHa5wY/diPr26ecFHm8T0k6YNUcnETx+Vm+LjfPa4wan0d8qT92Tmf8t8wRp9WuaZVA==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/file-collection/-/file-collection-6.6.0.tgz", + "integrity": "sha512-QO1CaaSoqslwib8atFXiavl7OXQMf8JzlRmsDWg1rCWwdFjmzZDnpfkvrrS32XL4Q47Z8fKXOr21r2SMTt/EBQ==", "license": "MIT", "dependencies": { "@zip.js/zip.js": "^2.8.8", @@ -1153,9 +1153,9 @@ } }, "node_modules/ml-spectra-processing": { - "version": "14.19.0", - "resolved": "https://registry.npmjs.org/ml-spectra-processing/-/ml-spectra-processing-14.19.0.tgz", - "integrity": "sha512-PbvRh/cFneCDY629qpURsaq58oz0pF+TM8w5lLtvAVfZmA6QOHEf5eh93n73HXS7HgkAzLJNXnKefCW8kSBmKQ==", + "version": "14.20.0", + "resolved": "https://registry.npmjs.org/ml-spectra-processing/-/ml-spectra-processing-14.20.0.tgz", + "integrity": "sha512-wuhhxYNyNfIzD1QkMtE8mH0zcM8dn/ZrvAyZWVjKmdQxAl8wJMaBfUO+BW2RoGtX5tIqi3moh1ukat4ft10bAw==", "license": "MIT", "dependencies": { "binary-search": "^1.3.6", @@ -1208,9 +1208,9 @@ } }, "node_modules/nmr-processing": { - "version": "22.1.0", - "resolved": "https://registry.npmjs.org/nmr-processing/-/nmr-processing-22.1.0.tgz", - "integrity": "sha512-l/IFlmY6akhsIolRMMWnG4Mpp7KMqwidZJR7NEWNkySmKYI8NhVMNBiCbc3e3QSu4yVyhl0hEU7ToHobpDgpPg==", + "version": "22.5.0", + "resolved": "https://registry.npmjs.org/nmr-processing/-/nmr-processing-22.5.0.tgz", + "integrity": "sha512-/FLaMtROD1gwf8qqOfpynYNdtwRwqjSWzVtgcJvQekmHKFoALFwuxTV3Wj+LGmjCNWtAUauw/xb6fQ0DHAT0Tg==", "license": "CC-BY-NC-SA-4.0", "dependencies": { "binary-search": "^1.3.6", @@ -1234,16 +1234,16 @@ "ml-regression-polynomial": "^3.0.2", "ml-regression-simple-linear": "^3.0.1", "ml-savitzky-golay-generalized": "^4.2.0", - "ml-signal-processing": "^2.1.0", + "ml-signal-processing": "^2.2.0", "ml-simple-clustering": "^1.0.0", "ml-sparse-matrix": "^3.1.0", - "ml-spectra-processing": "^14.18.2", + "ml-spectra-processing": "^14.19.0", "ml-tree-set": "^1.0.1", "multiplet-analysis": "^2.1.5", "nmr-correlation": "^3.0.0", "numeral": "^2.0.6", - "openchemlib": "^9.18.2", - "openchemlib-utils": "^8.8.1", + "openchemlib": "^9.20.0", + "openchemlib-utils": "^8.12.1", "spectrum-generator": "^8.1.1" } }, diff --git a/app/scripts/nmr-cli/package.json b/app/scripts/nmr-cli/package.json index 874d4f1..036b2b7 100644 --- a/app/scripts/nmr-cli/package.json +++ b/app/scripts/nmr-cli/package.json @@ -15,17 +15,17 @@ "nmr-cli": "./build/index.js" }, "dependencies": { - "@zakodium/nmr-types": "^0.5.0", - "@zakodium/nmrium-core": "^0.5.6", - "@zakodium/nmrium-core-plugins": "^0.6.25", + "@zakodium/nmr-types": "^0.5.2", + "@zakodium/nmrium-core": "^0.6.5", + "@zakodium/nmrium-core-plugins": "^0.6.39", "axios": "^1.13.5", - "file-collection": "^6.5.0", + "file-collection": "^6.6.0", "json-stream-stringify": "^3.1.6", "lodash.merge": "^4.6.2", "mf-parser": "^3.6.0", - "ml-spectra-processing": "^14.19.0", - "nmr-processing": "^22.1.0", - "openchemlib": "^9.19.0", + "ml-spectra-processing": "^14.20.0", + "nmr-processing": "^22.5.0", + "openchemlib": "^9.20.0", "playwright": "1.56.1", "yargs": "^18.0.0" }, From 80e73d4b092eb9f6b5821f2e3711938962df1dcc Mon Sep 17 00:00:00 2001 From: hamed musallam Date: Thu, 19 Feb 2026 15:01:28 +0100 Subject: [PATCH 3/4] refactor(nmr-cli): replace 'chromium' with 'firefox' for spectra image capture --- app/scripts/nmr-cli/src/parse/prase-spectra.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/scripts/nmr-cli/src/parse/prase-spectra.ts b/app/scripts/nmr-cli/src/parse/prase-spectra.ts index c40cf3e..d560e75 100644 --- a/app/scripts/nmr-cli/src/parse/prase-spectra.ts +++ b/app/scripts/nmr-cli/src/parse/prase-spectra.ts @@ -38,7 +38,7 @@ function generateNMRiumURL() { } async function launchBrowser() { - return playwright.chromium.launch(); + return playwright.firefox.launch(); } async function captureSpectraViewAsBase64(nmriumState: Partial): Promise { From e83e4ff8354a3b5cfc5b5a899b4b6cc62f4bda56 Mon Sep 17 00:00:00 2001 From: hamed musallam Date: Thu, 19 Feb 2026 15:25:01 +0100 Subject: [PATCH 4/4] chore(nmr-cli): update playwright to version 1.58.2 --- app/scripts/nmr-cli/Dockerfile | 9 +++++---- app/scripts/nmr-cli/package-lock.json | 16 ++++++++-------- app/scripts/nmr-cli/package.json | 2 +- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/app/scripts/nmr-cli/Dockerfile b/app/scripts/nmr-cli/Dockerfile index 1887a51..dc94d69 100644 --- a/app/scripts/nmr-cli/Dockerfile +++ b/app/scripts/nmr-cli/Dockerfile @@ -1,10 +1,12 @@ # build the image ` docker build --tag nmr-cli . ` # run the container ` docker run -it nmr-cli bash ` -FROM mcr.microsoft.com/playwright:v1.56.1-noble +FROM mcr.microsoft.com/playwright:v1.58.2-noble SHELL ["/bin/bash", "-o", "pipefail", "-c"] +# Downgrade to Node 22 +RUN npm install -g n && n 22 && hash -r WORKDIR /app @@ -26,10 +28,9 @@ COPY . ./ RUN npm run build + # Install the nmr-cli as a global package +# For example, nmr-cli parse-spectra -u https://s3.uni-jena.de/nmrxiv/production/archive/d5ec45db-d984-46e9-bb72-c43fd4a463fa/Sali_Eth.zip -s # For example, nmr-cli parse-spectra -u https://cheminfo.github.io/bruker-data-test/data/zipped/aspirin-1h.zip # nmr-cli predict -n "1H" --id 1 --type "nmr;1H;1d" --shifts "1" --solvent "Dimethylsulphoxide-D6 (DMSO-D6, C2D6SO)" -m $"\n Ketcher 6122516162D 1 1.00000 0.00000 0\n\n 16 17 0 0 0 0 0 0 0 0999 V2000\n 1.1954 -4.6484 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.9258 -4.6479 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.0622 -4.1483 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.9258 -5.6488 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.1954 -5.6533 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.0644 -6.1483 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.7902 -4.1495 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 4.6574 -4.6498 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.7964 -6.1512 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 4.6596 -5.6458 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5228 -4.1488 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5277 -6.1421 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 6.3895 -4.6477 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5216 -3.1488 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 7.2548 -4.1466 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.1215 -4.6455 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3 1 2 0 0 0 0\n 1 5 1 0 0 0 0\n 5 6 2 0 0 0 0\n 6 4 1 0 0 0 0\n 4 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 4 9 1 0 0 0 0\n 9 10 2 0 0 0 0\n 10 8 1 0 0 0 0\n 8 7 2 0 0 0 0\n 7 2 1 0 0 0 0\n 8 11 1 0 0 0 0\n 10 12 1 0 0 0 0\n 11 13 1 0 0 0 0\n 11 14 2 0 0 0 0\n 13 15 1 0 0 0 0\n 15 16 1 0 0 0 0\nM END" RUN npm install . -g - - - diff --git a/app/scripts/nmr-cli/package-lock.json b/app/scripts/nmr-cli/package-lock.json index 994470e..df27a3e 100644 --- a/app/scripts/nmr-cli/package-lock.json +++ b/app/scripts/nmr-cli/package-lock.json @@ -20,7 +20,7 @@ "ml-spectra-processing": "^14.20.0", "nmr-processing": "^22.5.0", "openchemlib": "^9.20.0", - "playwright": "1.56.1", + "playwright": "1.58.2", "yargs": "^18.0.0" }, "bin": { @@ -1330,12 +1330,12 @@ "license": "MIT" }, "node_modules/playwright": { - "version": "1.56.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.56.1.tgz", - "integrity": "sha512-aFi5B0WovBHTEvpM3DzXTUaeN6eN0qWnTkKx4NQaH4Wvcmc153PdaY2UBdSYKaGYw+UyWXSVyxDUg5DoPEttjw==", + "version": "1.58.2", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.58.2.tgz", + "integrity": "sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==", "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.56.1" + "playwright-core": "1.58.2" }, "bin": { "playwright": "cli.js" @@ -1348,9 +1348,9 @@ } }, "node_modules/playwright-core": { - "version": "1.56.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.56.1.tgz", - "integrity": "sha512-hutraynyn31F+Bifme+Ps9Vq59hKuUCz7H1kDOcBs+2oGguKkWTU50bBWrtz34OUWmIwpBTWDxaRPXrIXkgvmQ==", + "version": "1.58.2", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.2.tgz", + "integrity": "sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==", "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" diff --git a/app/scripts/nmr-cli/package.json b/app/scripts/nmr-cli/package.json index 036b2b7..3f4c9d0 100644 --- a/app/scripts/nmr-cli/package.json +++ b/app/scripts/nmr-cli/package.json @@ -26,7 +26,7 @@ "ml-spectra-processing": "^14.20.0", "nmr-processing": "^22.5.0", "openchemlib": "^9.20.0", - "playwright": "1.56.1", + "playwright": "1.58.2", "yargs": "^18.0.0" }, "devDependencies": {