From b4b57cdd15a9afac588a5d3830eae9bfbc8d7b67 Mon Sep 17 00:00:00 2001 From: hamed musallam Date: Mon, 24 Aug 2026 09:08:36 +0200 Subject: [PATCH 1/5] feat(nmr-cli): update NMRium core packages to v2.6.0 --- app/scripts/nmr-cli/package-lock.json | 264 +++++++++----------------- app/scripts/nmr-cli/package.json | 16 +- 2 files changed, 97 insertions(+), 183 deletions(-) diff --git a/app/scripts/nmr-cli/package-lock.json b/app/scripts/nmr-cli/package-lock.json index dd4eebf..2291433 100644 --- a/app/scripts/nmr-cli/package-lock.json +++ b/app/scripts/nmr-cli/package-lock.json @@ -9,18 +9,18 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "@zakodium/nmr-types": "^0.5.12", - "@zakodium/nmrium-core": "0.7.30", - "@zakodium/nmrium-core-plugins": "0.7.39", + "@zakodium/nmr-types": "^0.5.25", + "@zakodium/nmrium-core": "0.7.62", + "@zakodium/nmrium-core-plugins": "0.7.83", "axios": "^1.13.6", "fifo-logger": "^2.0.1", - "file-collection": "^6.6.1", + "file-collection": "^6.7.0", "json-stream-stringify": "^3.1.6", "lodash.merge": "^4.6.2", - "mf-parser": "^3.7.1", - "ml-spectra-processing": "^14.22.0", - "nmr-processing": "^22.5.2", - "openchemlib": "^9.20.0", + "mf-parser": "^3.9.2", + "ml-spectra-processing": "^14.33.0", + "nmr-processing": "^22.23.5", + "openchemlib": "^9.25.0", "playwright": "1.58.2", "yargs": "^18.0.0" }, @@ -155,73 +155,84 @@ "license": "MIT" }, "node_modules/@zakodium/nmr-types": { - "version": "0.5.23", - "resolved": "https://registry.npmjs.org/@zakodium/nmr-types/-/nmr-types-0.5.23.tgz", - "integrity": "sha512-a8zmplUHOevUeOQ69yFwzCNNiUi867q2RY63GXg4Clhm+3BnXonBeHXicSycOoJzSz2V0pQ4LFPuqJMxKNjLvw==", + "version": "0.5.25", + "resolved": "https://registry.npmjs.org/@zakodium/nmr-types/-/nmr-types-0.5.25.tgz", + "integrity": "sha512-Flxfn3CoC7J9mSwEcFFRO0omp9aqbf6t8+M1j4BUWbeLJAw6IZu4mdWSLgHZRvCo/VRF9EW7MlOy3BZdv3RcRQ==", "license": "CC-BY-NC-SA-4.0", "dependencies": { + "cheminfo-types": "^1.15.0", "ml-peak-shape-generator": "^5.5.0", "ml-signal-processing": "^2.2.2", - "ml-spectra-processing": "^14.33.0" - } - }, - "node_modules/@zakodium/nmr-types/node_modules/ml-peak-shape-generator": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/ml-peak-shape-generator/-/ml-peak-shape-generator-5.5.0.tgz", - "integrity": "sha512-DyBq/u5S+/0F49Hm0OWHwWvPPM1aaCZIs/eI7/fUTWfIm86Yu03YXWMQ3874eq33MLZVgM8KguGkfeGDffCLog==", - "license": "MIT", - "dependencies": { - "cheminfo-types": "^1.15.0" + "ml-spectra-processing": "^14.33.0", + "zod": "^4.4.3" } }, "node_modules/@zakodium/nmrium-core": { - "version": "0.7.30", - "resolved": "https://registry.npmjs.org/@zakodium/nmrium-core/-/nmrium-core-0.7.30.tgz", - "integrity": "sha512-uds3UysKrAgm38Yt2swNnt8nmf5SHqt1LuVnewwDTolztl3Lead0RtgOYsRjnL30k6gpvGrgaoENkIMxSY0/kQ==", + "version": "0.7.62", + "resolved": "https://registry.npmjs.org/@zakodium/nmrium-core/-/nmrium-core-0.7.62.tgz", + "integrity": "sha512-bwD4wttFKuXmNNotWuVZI6ddpuO2A0Ul2xi2NIrywHjJiNpJ4HiEX5oBBEboBa+UuuSonhTOKA6iKXbH2jQgWw==", "license": "CC-BY-NC-SA-4.0", "dependencies": { + "@zakodium/utils": "^0.5.1", "cheminfo-types": "^1.15.0", "fifo-logger": "^2.0.1", - "file-collection": "^6.6.1", + "file-collection": "^6.7.0", "is-any-array": "^3.0.0", "lodash.merge": "^4.6.2", - "ml-spectra-processing": "^14.28.1", - "nmr-correlation": "^2.3.5" + "ml-spectra-processing": "^14.33.0" }, "peerDependencies": { "zod": "^4.4.3" } }, "node_modules/@zakodium/nmrium-core-plugins": { - "version": "0.7.39", - "resolved": "https://registry.npmjs.org/@zakodium/nmrium-core-plugins/-/nmrium-core-plugins-0.7.39.tgz", - "integrity": "sha512-WFO8UmUB4ZGwO+eCTjC1RfUBeCtv+raQmsuVx6L7zf1/BuD0N3Lq0q+JpKkdn85sfFGckyejJr1yo2qd91EVMQ==", + "version": "0.7.83", + "resolved": "https://registry.npmjs.org/@zakodium/nmrium-core-plugins/-/nmrium-core-plugins-0.7.83.tgz", + "integrity": "sha512-Y7IFXV7dTcUIxaJrHwWV6HtLcLeBQp0Ehs2VJ+QW54I1GVVd+E7d62Ufa5USAe84N60jrAcli7X46TtGLalfvw==", "license": "CC-BY-NC-SA-4.0", "dependencies": { "@date-fns/utc": "^2.1.1", - "@zakodium/nmrium-core": "^0.7.30", + "@zakodium/nmrium-core": "^0.7.62", "cheminfo-types": "^1.15.0", - "convert-to-jcamp": "^7.0.0", - "date-fns": "^4.1.0", - "file-collection": "^6.6.1", + "convert-to-jcamp": "^7.0.1", + "date-fns": "^4.4.0", + "file-collection": "^6.7.0", "gyromagnetic-ratio": "^2.0.0", "is-any-array": "^3.0.0", - "jcampconverter": "^12.3.3", + "jcampconverter": "^12.5.5", "linear-sum-assignment": "^1.0.9", "lodash.merge": "^4.6.2", - "ml-spectra-processing": "^14.28.1", - "nmr-processing": "^22.13.0", - "openchemlib": "^9.22.0", - "openchemlib-utils": "^8.15.0", - "sdf-parser": "^8.0.0", + "ml-spectra-processing": "^14.33.0", + "nmr-processing": "^22.23.5", + "openchemlib": "^9.24.0", + "openchemlib-utils": "^8.17.1", + "sdf-parser": "^9.0.0", "ts-pattern": "^5.9.0", "zod": "^4.4.3" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } } }, + "node_modules/@zakodium/utils": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@zakodium/utils/-/utils-0.5.1.tgz", + "integrity": "sha512-aRtHXol0w/nL4ZYiVNicw/7batBasftRDmYSCXj54AWf1MvLrKZNk9hthzp8I+wm7jL938HAIv8eg/45J+XyOg==", + "license": "MIT" + }, "node_modules/@zip.js/zip.js": { - "version": "2.8.23", - "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.8.23.tgz", - "integrity": "sha512-RB+RLnxPJFPrGvQ9rgO+4JOcsob6lD32OcF0QE0yg24oeW9q8KnTTNlugcDaIveEcCbclobJcZP+fLQ++sH0bw==", + "version": "2.8.57", + "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.8.57.tgz", + "integrity": "sha512-cd5a0s7CS0MOD52f7FW4ju84wc/+b+YNu5XIG72PfXRLk6rInEdvIrB/BjR8D8hS4fMKuYJOBjv6FoLh3e7DHw==", "license": "BSD-3-Clause", "engines": { "bun": ">=0.7.0", @@ -341,9 +352,9 @@ } }, "node_modules/chemical-elements": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/chemical-elements/-/chemical-elements-2.2.2.tgz", - "integrity": "sha512-EL7cKE8FSyTcsWbs3uECKfYtdZW6Z8tD2OAeRXK4+rRc3+AMsJUqu/Sl790Ej4qbcy11/35ErdfnI5Yy7zQopw==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chemical-elements/-/chemical-elements-2.3.2.tgz", + "integrity": "sha512-3q1h/yFUqTFitGAEShu5AcC9KWHZqtFDuiqxgnViVx77zIvrVJH1jSNHPzQGSsCkCe+czVcFdF/E9XyexOIuaw==", "license": "MIT" }, "node_modules/chemical-groups": { @@ -431,9 +442,9 @@ } }, "node_modules/date-fns": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", - "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.4.0.tgz", + "integrity": "sha512-+1UMbeh68lH1SegH83CGWwpb6OHHbpSgr3+s5Eww5M4CAgswBpoWS0AjTOfEJ33HiYKz1hdj/KTFprzXHmq/6w==", "license": "MIT", "funding": { "type": "github", @@ -564,12 +575,12 @@ } }, "node_modules/file-collection": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/file-collection/-/file-collection-6.6.1.tgz", - "integrity": "sha512-YJtg82Xo3pqhfXdM3tT7+vYAYj2GgC+J4jQvhYT2GDk3UsochfrHr7BxGEiQQmjIPu05ogQx9ZJ1VclhNViPJQ==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/file-collection/-/file-collection-6.7.0.tgz", + "integrity": "sha512-IQEIgbRZIJgU91DVQXMjq6zSK0lcwsG/p1Sx0HqfvdsSrCnjtvcME9xsNB5qzNVZH8TyJ9sYJDt1QvIWoVvnNQ==", "license": "MIT", "dependencies": { - "@zip.js/zip.js": "^2.8.15", + "@zip.js/zip.js": "^2.8.23", "cheminfo-types": "^1.10.0" } }, @@ -766,9 +777,9 @@ "license": "MIT" }, "node_modules/jcampconverter": { - "version": "12.5.3", - "resolved": "https://registry.npmjs.org/jcampconverter/-/jcampconverter-12.5.3.tgz", - "integrity": "sha512-KoUW2KSG561Mz/rt8Jg1SNZInqRgdltU5ZDn0Xdl7AfC5b90ExF+LYzBdgbcgDf1cBFc+WA9eJFysijkhRmquA==", + "version": "12.5.5", + "resolved": "https://registry.npmjs.org/jcampconverter/-/jcampconverter-12.5.5.tgz", + "integrity": "sha512-D5s2gsklqBv6IASEjp1gze7d0gG1BsRcNDm7ZC8esMfv1iVVVoVuehkp0Kg3SRJ09k3N9r1RSTUe1KQeYlxQ2g==", "license": "CC-BY-NC-SA-4.0", "dependencies": { "cheminfo-types": "^1.15.0", @@ -828,13 +839,13 @@ "license": "ISC" }, "node_modules/mf-parser": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/mf-parser/-/mf-parser-3.7.1.tgz", - "integrity": "sha512-JgVo43b7rkb/miykgXpE0eT+udACCvKWg2BYPysLnkOOQtosI3wP2dq7mUS8guGx2I75PnVs8/HLXbXM4K+IdQ==", + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/mf-parser/-/mf-parser-3.9.2.tgz", + "integrity": "sha512-b/ZweyvktEly+zg3DMI/9UmwX3RriuwNh6kB0xd+NgI0wzDgl3fqyZGa4E8Gbp149N0jAXfT70FQgqGb53GvBg==", "license": "MIT", "dependencies": { "atom-sorter": "^2.2.1", - "chemical-elements": "^2.2.2", + "chemical-elements": "^2.3.2", "chemical-groups": "^2.2.3" } }, @@ -984,15 +995,6 @@ "ml-spectra-processing": "^14.29.0" } }, - "node_modules/ml-gsd/node_modules/ml-peak-shape-generator": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/ml-peak-shape-generator/-/ml-peak-shape-generator-5.5.0.tgz", - "integrity": "sha512-DyBq/u5S+/0F49Hm0OWHwWvPPM1aaCZIs/eI7/fUTWfIm86Yu03YXWMQ3874eq33MLZVgM8KguGkfeGDffCLog==", - "license": "MIT", - "dependencies": { - "cheminfo-types": "^1.15.0" - } - }, "node_modules/ml-hash-table": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/ml-hash-table/-/ml-hash-table-1.0.0.tgz", @@ -1036,31 +1038,31 @@ } }, "node_modules/ml-matrix-convolution": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ml-matrix-convolution/-/ml-matrix-convolution-1.0.0.tgz", - "integrity": "sha512-+gS36VTRjBMtUDXlKlAgSs+pZLfOEY0JF/64QRRNq+6KIPCfPlzVO3P41iSEjp1NPwofhLcIJBgKIZyH6ylSVA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ml-matrix-convolution/-/ml-matrix-convolution-2.0.0.tgz", + "integrity": "sha512-XuEZf4ZTffAz7oDMG4olkh9aZmsIMr343gPTY+ZvnLWTlMiG+TegRbP4fpA1ju7/IK9q8u3TcC2cxf/N3ydtRA==", "license": "MIT", "dependencies": { - "ml-fft": "1.3.5" + "ml-fft": "^1.3.5" } }, "node_modules/ml-matrix-peaks-finder": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ml-matrix-peaks-finder/-/ml-matrix-peaks-finder-1.0.0.tgz", - "integrity": "sha512-a3SZrvADI6kAbOvICnnNbacC+UB6xPRbgbKxGhFeISUCoe4M3g3RMp9UaUFNFA/rRjWNtW+rGioeOH8UNPZT/Q==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ml-matrix-peaks-finder/-/ml-matrix-peaks-finder-2.0.1.tgz", + "integrity": "sha512-PSMwStdTMtnLAhnKlFuKU0PCeQhSZxyNuKPx/t9qQ2N/00+ZkQRoY/+pGlJSG3V7BG5Rz8xz90tyYDno7FDlhw==", "license": "MIT", "dependencies": { "ml-disjoint-set": "^1.0.0", - "ml-matrix-convolution": "^1.0.0" + "ml-matrix-convolution": "^2.0.0" } }, "node_modules/ml-peak-shape-generator": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ml-peak-shape-generator/-/ml-peak-shape-generator-4.2.0.tgz", - "integrity": "sha512-BDtR0rhUor5/4J9pJOEMRnD+QQ5v6ohx+o6MfRRg2e2IOTeZfp/uJcy5Y852v5CsNec1GmYMkd5PYrY0245qlQ==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/ml-peak-shape-generator/-/ml-peak-shape-generator-5.5.0.tgz", + "integrity": "sha512-DyBq/u5S+/0F49Hm0OWHwWvPPM1aaCZIs/eI7/fUTWfIm86Yu03YXWMQ3874eq33MLZVgM8KguGkfeGDffCLog==", "license": "MIT", "dependencies": { - "cheminfo-types": "^1.1.0" + "cheminfo-types": "^1.15.0" } }, "node_modules/ml-regression-base": { @@ -1164,15 +1166,6 @@ "ml-spectra-processing": "^14.29.0" } }, - "node_modules/ml-spectra-fitting/node_modules/ml-peak-shape-generator": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/ml-peak-shape-generator/-/ml-peak-shape-generator-5.5.0.tgz", - "integrity": "sha512-DyBq/u5S+/0F49Hm0OWHwWvPPM1aaCZIs/eI7/fUTWfIm86Yu03YXWMQ3874eq33MLZVgM8KguGkfeGDffCLog==", - "license": "MIT", - "dependencies": { - "cheminfo-types": "^1.15.0" - } - }, "node_modules/ml-spectra-processing": { "version": "14.33.0", "resolved": "https://registry.npmjs.org/ml-spectra-processing/-/ml-spectra-processing-14.33.0.tgz", @@ -1217,21 +1210,10 @@ "integrity": "sha512-+z6QY1SxkDk6CQJAeaIZKmcNubBCRP7J8DMQUBglz/sSkNsZoJ1kULjqk9skNPPplzs4i9PFhYrvNDdtQleF/A==", "license": "MIT" }, - "node_modules/nmr-correlation": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/nmr-correlation/-/nmr-correlation-2.3.5.tgz", - "integrity": "sha512-WmJXckcF+epK0u2DVv+LBahvtlbFiCbTtXQsYmq07fze6i6XLPHnFcE1q6HKtiYYbePd6ks2PMOmWQEDdU2XbA==", - "license": "MIT", - "dependencies": { - "cheminfo-types": "^1.8.1", - "ml-matrix-peaks-finder": "^1.0.0", - "ml-peak-shape-generator": "^4.1.4" - } - }, "node_modules/nmr-processing": { - "version": "22.23.0", - "resolved": "https://registry.npmjs.org/nmr-processing/-/nmr-processing-22.23.0.tgz", - "integrity": "sha512-DNmi9ybVqnNDTGp8UlJx4ZLqACuynz4AlBVhzi3M4Vp2jy7K7C2wbJRVuBMH5rI3ZkZBHe11nm+JWW56Qtvrpw==", + "version": "22.23.5", + "resolved": "https://registry.npmjs.org/nmr-processing/-/nmr-processing-22.23.5.tgz", + "integrity": "sha512-B/7co/EGOv2TKi8zaVHfZ5SN6zVWzQ1Y+QQKzytV0W5mwe4397zQ/VPQI8LBJzXmW6br2iANYDjfJ63+Ddjq7w==", "license": "CC-BY-NC-SA-4.0", "dependencies": { "binary-search": "^1.3.6", @@ -1261,61 +1243,12 @@ "ml-spectra-processing": "^14.33.0", "ml-tree-set": "^1.0.1", "multiplet-analysis": "^3.0.2", - "nmr-correlation": "^3.0.0", "numeral": "^2.0.6", "openchemlib": "^9.24.0", "openchemlib-utils": "^8.17.1", "spectrum-generator": "^8.2.1" } }, - "node_modules/nmr-processing/node_modules/ml-matrix-convolution": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ml-matrix-convolution/-/ml-matrix-convolution-2.0.0.tgz", - "integrity": "sha512-XuEZf4ZTffAz7oDMG4olkh9aZmsIMr343gPTY+ZvnLWTlMiG+TegRbP4fpA1ju7/IK9q8u3TcC2cxf/N3ydtRA==", - "license": "MIT", - "dependencies": { - "ml-fft": "^1.3.5" - } - }, - "node_modules/nmr-processing/node_modules/ml-matrix-peaks-finder": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ml-matrix-peaks-finder/-/ml-matrix-peaks-finder-2.0.1.tgz", - "integrity": "sha512-PSMwStdTMtnLAhnKlFuKU0PCeQhSZxyNuKPx/t9qQ2N/00+ZkQRoY/+pGlJSG3V7BG5Rz8xz90tyYDno7FDlhw==", - "license": "MIT", - "dependencies": { - "ml-disjoint-set": "^1.0.0", - "ml-matrix-convolution": "^2.0.0" - } - }, - "node_modules/nmr-processing/node_modules/ml-peak-shape-generator": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/ml-peak-shape-generator/-/ml-peak-shape-generator-5.5.0.tgz", - "integrity": "sha512-DyBq/u5S+/0F49Hm0OWHwWvPPM1aaCZIs/eI7/fUTWfIm86Yu03YXWMQ3874eq33MLZVgM8KguGkfeGDffCLog==", - "license": "MIT", - "dependencies": { - "cheminfo-types": "^1.15.0" - } - }, - "node_modules/nmr-processing/node_modules/nmr-correlation": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/nmr-correlation/-/nmr-correlation-3.0.1.tgz", - "integrity": "sha512-0iuce3dLBpdcHn0Q/SX3gHvshRCUyN8X6iL6Y97VcK7JS3g8yZSQCIKjft8jsAOUzWP1rX8c1aCxw3BnCjrBEQ==", - "license": "MIT", - "dependencies": { - "cheminfo-types": "^1.8.1", - "ml-matrix-peaks-finder": "^2.0.0", - "ml-peak-shape-generator": "^4.2.0" - } - }, - "node_modules/nmr-processing/node_modules/nmr-correlation/node_modules/ml-peak-shape-generator": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ml-peak-shape-generator/-/ml-peak-shape-generator-4.2.0.tgz", - "integrity": "sha512-BDtR0rhUor5/4J9pJOEMRnD+QQ5v6ohx+o6MfRRg2e2IOTeZfp/uJcy5Y852v5CsNec1GmYMkd5PYrY0245qlQ==", - "license": "MIT", - "dependencies": { - "cheminfo-types": "^1.1.0" - } - }, "node_modules/num-sort": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/num-sort/-/num-sort-2.1.0.tgz", @@ -1361,16 +1294,6 @@ "openchemlib": ">=9.25.0" } }, - "node_modules/openchemlib-utils/node_modules/sdf-parser": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/sdf-parser/-/sdf-parser-9.0.0.tgz", - "integrity": "sha512-yi69gjBudryiKrLsT35OkyoGmskvXbVpUjkcd9tX4M4sLVmqeptsZtcx6Etf/bvdk9Ts1Wy6PuyXVIPktn6ZNQ==", - "license": "MIT", - "dependencies": { - "dynamic-typing": "^2.0.0", - "ensure-string": "^2.0.0" - } - }, "node_modules/papaparse": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.6.0.tgz", @@ -1414,9 +1337,9 @@ "license": "MIT" }, "node_modules/sdf-parser": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/sdf-parser/-/sdf-parser-8.0.0.tgz", - "integrity": "sha512-Mh+FbnUGfu+I7/xN0JOiuQ9GP3H36USFXg3ZpeuUMXpGmYHmzmv763poF1u152Xz76nmqRLTL2ibA4dfU0yzjw==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/sdf-parser/-/sdf-parser-9.0.0.tgz", + "integrity": "sha512-yi69gjBudryiKrLsT35OkyoGmskvXbVpUjkcd9tX4M4sLVmqeptsZtcx6Etf/bvdk9Ts1Wy6PuyXVIPktn6ZNQ==", "license": "MIT", "dependencies": { "dynamic-typing": "^2.0.0", @@ -1433,15 +1356,6 @@ "ml-spectra-processing": "^14.28.1" } }, - "node_modules/spectrum-generator/node_modules/ml-peak-shape-generator": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/ml-peak-shape-generator/-/ml-peak-shape-generator-5.5.0.tgz", - "integrity": "sha512-DyBq/u5S+/0F49Hm0OWHwWvPPM1aaCZIs/eI7/fUTWfIm86Yu03YXWMQ3874eq33MLZVgM8KguGkfeGDffCLog==", - "license": "MIT", - "dependencies": { - "cheminfo-types": "^1.15.0" - } - }, "node_modules/string-width": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", diff --git a/app/scripts/nmr-cli/package.json b/app/scripts/nmr-cli/package.json index 0d3bd4d..c6076ae 100644 --- a/app/scripts/nmr-cli/package.json +++ b/app/scripts/nmr-cli/package.json @@ -15,18 +15,18 @@ "nmr-cli": "./build/index.js" }, "dependencies": { - "@zakodium/nmr-types": "^0.5.12", - "@zakodium/nmrium-core": "0.7.30", - "@zakodium/nmrium-core-plugins": "0.7.39", + "@zakodium/nmr-types": "^0.5.25", + "@zakodium/nmrium-core": "0.7.62", + "@zakodium/nmrium-core-plugins": "0.7.83", "axios": "^1.13.6", "fifo-logger": "^2.0.1", - "file-collection": "^6.6.1", + "file-collection": "^6.7.0", "json-stream-stringify": "^3.1.6", "lodash.merge": "^4.6.2", - "mf-parser": "^3.7.1", - "ml-spectra-processing": "^14.22.0", - "nmr-processing": "^22.5.2", - "openchemlib": "^9.20.0", + "mf-parser": "^3.9.2", + "ml-spectra-processing": "^14.33.0", + "nmr-processing": "^22.23.5", + "openchemlib": "^9.25.0", "playwright": "1.58.2", "yargs": "^18.0.0" }, From bddfa4ac40883b6060b209c20dda725f01b0835f Mon Sep 17 00:00:00 2001 From: hamed musallam Date: Mon, 24 Aug 2026 09:40:59 +0200 Subject: [PATCH 2/5] chore(nmr-cli): update dependencies --- app/scripts/nmr-cli/Dockerfile | 16 ++- app/scripts/nmr-cli/package-lock.json | 178 ++++++++++++++++++-------- app/scripts/nmr-cli/package.json | 10 +- 3 files changed, 140 insertions(+), 64 deletions(-) diff --git a/app/scripts/nmr-cli/Dockerfile b/app/scripts/nmr-cli/Dockerfile index 2e38276..f7877d5 100644 --- a/app/scripts/nmr-cli/Dockerfile +++ b/app/scripts/nmr-cli/Dockerfile @@ -1,13 +1,21 @@ # build the image ` docker build --tag nmr-cli . ` # run the container ` docker run -it nmr-cli bash ` -FROM mcr.microsoft.com/playwright:v1.58.2-noble +# NOTE: if `docker run` prints +# "Error while loading conda entry point: conda-libmamba-solver (module 'libmambapy' has no attribute 'QueryFormat')" +# this is unrelated to this image/container — it comes from a version mismatch between +# conda-libmamba-solver and libmambapy in your HOST shell's conda (base) environment. +# It does not affect the container. To fix it on the host, run: +# conda update -n base -c conda-forge conda conda-libmamba-solver libmambapy +# or, if that doesn't resolve it: +# conda install -n base -c conda-forge --force-reinstall conda-libmamba-solver libmambapy +# or, to bypass libmamba entirely: +# conda config --set solver classic + +FROM mcr.microsoft.com/playwright:v1.62.1-noble SHELL ["/bin/bash", "-o", "pipefail", "-c"] -# Downgrade to Node 22 -RUN npm install -g n && n 22 && hash -r - WORKDIR /app #ENV BASE_NMRIUM_URL=https://nmrium.nmrxiv.org/ diff --git a/app/scripts/nmr-cli/package-lock.json b/app/scripts/nmr-cli/package-lock.json index 2291433..a503acd 100644 --- a/app/scripts/nmr-cli/package-lock.json +++ b/app/scripts/nmr-cli/package-lock.json @@ -12,24 +12,24 @@ "@zakodium/nmr-types": "^0.5.25", "@zakodium/nmrium-core": "0.7.62", "@zakodium/nmrium-core-plugins": "0.7.83", - "axios": "^1.13.6", + "axios": "^1.19.0", "fifo-logger": "^2.0.1", "file-collection": "^6.7.0", - "json-stream-stringify": "^3.1.6", + "json-stream-stringify": "^3.1.7", "lodash.merge": "^4.6.2", "mf-parser": "^3.9.2", "ml-spectra-processing": "^14.33.0", "nmr-processing": "^22.23.5", "openchemlib": "^9.25.0", - "playwright": "1.58.2", - "yargs": "^18.0.0" + "playwright": "1.62.1", + "yargs": "^18.1.0" }, "bin": { "nmr-cli": "build/index.js" }, "devDependencies": { "@types/lodash.merge": "^4.6.9", - "@types/node": "^25.3.5", + "@types/node": "^26.2.0", "@types/yargs": "^17.0.35", "ts-node": "^10.9.2", "typescript": "^5.9.3" @@ -128,13 +128,13 @@ } }, "node_modules/@types/node": { - "version": "25.3.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.5.tgz", - "integrity": "sha512-oX8xrhvpiyRCQkG1MFchB09f+cXftgIXb3a7UUa4Y3wpmZPw5tyZGTLWhlESOLq1Rq6oDlc8npVU2/9xiCuXMA==", + "version": "26.2.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.2.0.tgz", + "integrity": "sha512-5IviulTZeRNp2vAJ514cc/HUlY5nZ9fCbq9DMyC52BrhFZACo3nI0R7qBxhQmo/d27NFe96ur/b7Wwxklda+kg==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~7.18.0" + "undici-types": "~8.3.0" } }, "node_modules/@types/yargs": { @@ -266,6 +266,18 @@ "node": ">=0.4.0" } }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/ansi-regex": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", @@ -310,14 +322,15 @@ "license": "MIT" }, "node_modules/axios": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.6.tgz", - "integrity": "sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ==", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.19.0.tgz", + "integrity": "sha512-ht/iuYZXEjFxLH/Hkezgd7m6JKlHHXEUSneaDz8uZe1Gj5QZtCnpyDsckvAiEnT89OEbCLmnte4R4sn7P0EKFw==", "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.11", - "form-data": "^4.0.5", - "proxy-from-env": "^1.1.0" + "follow-redirects": "^1.16.0", + "form-data": "^4.0.6", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" } }, "node_modules/baselines": { @@ -451,6 +464,23 @@ "url": "https://github.com/sponsors/kossnocorp" } }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -524,9 +554,9 @@ } }, "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -585,9 +615,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", "funding": [ { "type": "individual", @@ -605,16 +635,16 @@ } }, "node_modules/form-data": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" + "hasown": "^2.0.4", + "mime-types": "^2.1.35" }, "engines": { "node": ">= 6" @@ -653,9 +683,9 @@ } }, "node_modules/get-east-asian-width": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", - "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz", + "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==", "license": "MIT", "engines": { "node": ">=18" @@ -753,9 +783,9 @@ } }, "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "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==", "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -770,6 +800,19 @@ "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", "license": "MIT" }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/is-any-array": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-any-array/-/is-any-array-3.0.0.tgz", @@ -791,9 +834,9 @@ } }, "node_modules/json-stream-stringify": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz", - "integrity": "sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.1.7.tgz", + "integrity": "sha512-F4MWetLtY42YMaAKw5cV4e47zMD5aOT+tjjQWjX18ACtdkQ5Y/vrcfbcQ107Rh+MXjOCIx4KhW0wPmOvG8iQ5w==", "license": "MIT", "engines": { "node": ">=7.10.1" @@ -1192,6 +1235,12 @@ "integrity": "sha512-Fz2q6dwgzGM8wYKGArTUTZDGa4lQFA2Vi6orjGeTVRy22ZnQFKlJuwS9n8NRviqz1KHAHAzdKJwbnYhdo38uYg==", "license": "MIT" }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, "node_modules/multiplet-analysis": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/multiplet-analysis/-/multiplet-analysis-3.0.2.tgz", @@ -1301,40 +1350,43 @@ "license": "MIT" }, "node_modules/playwright": { - "version": "1.58.2", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.58.2.tgz", - "integrity": "sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==", + "version": "1.62.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.62.1.tgz", + "integrity": "sha512-0M+L3LAD8/nm554LOla9Ayx0j0tmFZ0FBcoQ7F1VuVHpM/XpiC8RcDzBQB8W5+hA8L22THxELzeF+2WcUzvcLg==", "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.58.2" + "playwright-core": "1.62.1" }, "bin": { "playwright": "cli.js" }, "engines": { - "node": ">=18" + "node": ">=20" }, "optionalDependencies": { "fsevents": "2.3.2" } }, "node_modules/playwright-core": { - "version": "1.58.2", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.2.tgz", - "integrity": "sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==", + "version": "1.62.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.62.1.tgz", + "integrity": "sha512-wPYSwEBJY9GHraISXqyqtx0na0LpO3XEX7jNDhntbex7tzUS7kLnZsOlFruFJB4Hi/rhDMjXGqHewDZ68nYZVw==", "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" }, "engines": { - "node": ">=18" + "node": ">=20" } }, "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "license": "MIT" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } }, "node_modules/sdf-parser": { "version": "9.0.0", @@ -1459,9 +1511,9 @@ "license": "MIT" }, "node_modules/undici-types": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.3.0.tgz", + "integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==", "dev": true, "license": "MIT" }, @@ -1499,15 +1551,15 @@ } }, "node_modules/yargs": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", - "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.1.0.tgz", + "integrity": "sha512-2rAgRKu54VsHkqI0/tYkmluGXHD4KW7yZoycuqDQ15QOTnc2VVfy0nN/1eMhnQLO00A+dwtK20xuCnc1YGeUyg==", "license": "MIT", "dependencies": { "cliui": "^9.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", - "string-width": "^7.2.0", + "string-width": "^8.2.1", "y18n": "^5.0.5", "yargs-parser": "^22.0.0" }, @@ -1524,6 +1576,22 @@ "node": "^20.19.0 || ^22.12.0 || >=23" } }, + "node_modules/yargs/node_modules/string-width": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.2.tgz", + "integrity": "sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==", + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", diff --git a/app/scripts/nmr-cli/package.json b/app/scripts/nmr-cli/package.json index c6076ae..48100d7 100644 --- a/app/scripts/nmr-cli/package.json +++ b/app/scripts/nmr-cli/package.json @@ -18,21 +18,21 @@ "@zakodium/nmr-types": "^0.5.25", "@zakodium/nmrium-core": "0.7.62", "@zakodium/nmrium-core-plugins": "0.7.83", - "axios": "^1.13.6", + "axios": "^1.19.0", "fifo-logger": "^2.0.1", "file-collection": "^6.7.0", - "json-stream-stringify": "^3.1.6", + "json-stream-stringify": "^3.1.7", "lodash.merge": "^4.6.2", "mf-parser": "^3.9.2", "ml-spectra-processing": "^14.33.0", "nmr-processing": "^22.23.5", "openchemlib": "^9.25.0", - "playwright": "1.58.2", - "yargs": "^18.0.0" + "playwright": "1.62.1", + "yargs": "^18.1.0" }, "devDependencies": { "@types/lodash.merge": "^4.6.9", - "@types/node": "^25.3.5", + "@types/node": "^26.2.0", "@types/yargs": "^17.0.35", "ts-node": "^10.9.2", "typescript": "^5.9.3" From 0cf106f96ebb0557f3ed550ae75262694707b175 Mon Sep 17 00:00:00 2001 From: hamed musallam Date: Mon, 24 Aug 2026 09:55:30 +0200 Subject: [PATCH 3/5] feat(nmr-cli): add include/exclude file filters to parse-spectra --- app/scripts/nmr-cli/src/index.ts | 24 +++++++++++++++++++ .../nmr-cli/src/parse/prase-spectra.ts | 7 +++--- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/app/scripts/nmr-cli/src/index.ts b/app/scripts/nmr-cli/src/index.ts index 74c7000..ec4c449 100755 --- a/app/scripts/nmr-cli/src/index.ts +++ b/app/scripts/nmr-cli/src/index.ts @@ -26,6 +26,8 @@ Options for 'parse-spectra' command: -d, --auto-detection Enable ranges and zones automatic detection. -o, --output Output file path (optional) -r, --raw-data Include raw data in the output instead of data source + --include Include only files matching pattern(s) (glob/regex string, repeatable) + --exclude Exclude files matching pattern(s) (glob/regex string, repeatable) Arguments for 'parse-publication-string' command: publicationString Publication string @@ -133,6 +135,18 @@ export interface FileOptionsArgs { */ r?: boolean; + /** + * --include + * Only include files matching these pattern(s) when reading a directory (file-collection's filter.include). + */ + include?: string[]; + + /** + * --exclude + * Exclude files matching these pattern(s) when reading a directory (file-collection's filter.exclude). + */ + exclude?: string[]; + } // Define options for parsing a spectra file @@ -175,6 +189,16 @@ const fileOptions: { [key in keyof FileOptionsArgs]: Options } = { default: false, description: 'Include raw data in the output (default: dataSource)', }, + include: { + type: 'array', + string: true, + description: 'Only include files matching pattern(s) when reading a directory (glob/regex string)', + }, + exclude: { + type: 'array', + string: true, + description: 'Exclude files matching pattern(s) when reading a directory (glob/regex string)', + }, } as const const parseFileCommand: CommandModule<{}, FileOptionsArgs> = { diff --git a/app/scripts/nmr-cli/src/parse/prase-spectra.ts b/app/scripts/nmr-cli/src/parse/prase-spectra.ts index 06b521d..d4d24c4 100644 --- a/app/scripts/nmr-cli/src/parse/prase-spectra.ts +++ b/app/scripts/nmr-cli/src/parse/prase-spectra.ts @@ -197,7 +197,7 @@ async function processAndSerialize( } async function loadSpectrumFromURL(options: RequiredKey, logger: FifoLogger) { - const { u: url } = options; + const { u: url, include, exclude } = options; const { pathname: relativePath, origin: baseURL } = new URL(url) const source = { @@ -210,19 +210,20 @@ async function loadSpectrumFromURL(options: RequiredKey, l } - const { state } = await core.readFromWebSource(source, { ...parsingOptions, logger }); + const { state } = await core.readFromWebSource(source, { ...parsingOptions, fileFilter: { include, exclude }, logger }); processAndSerialize(state, options, logger) } async function loadSpectrumFromFilePath(options: RequiredKey, logger: FifoLogger) { - const { dir: path } = options; + const { dir: path, include, exclude } = options; const dirPath = isAbsolute(path) ? path : join(process.cwd(), path) const fileCollection = await FileCollection.fromPath(dirPath, { unzip: { zipExtensions: ['zip', 'nmredata'] }, + filter: { include, exclude }, }) const { From c23070bf60fe74b6003a80b0eb5b49a0ffae0feb Mon Sep 17 00:00:00 2001 From: hamed musallam Date: Mon, 24 Aug 2026 10:00:22 +0200 Subject: [PATCH 4/5] feat(API): add include/exclude file filters to spectra parse endpoints --- app/routers/spectra.py | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/app/routers/spectra.py b/app/routers/spectra.py index 1e46e3c..1fa8ef9 100644 --- a/app/routers/spectra.py +++ b/app/routers/spectra.py @@ -3,7 +3,7 @@ import io from app.schemas import HealthCheck from pydantic import BaseModel, HttpUrl, Field -from typing import Optional +from typing import Optional, List import subprocess import tempfile import os @@ -50,6 +50,10 @@ class UrlParseRequest(BaseModel): ) raw_data: bool = Field( False, description="Include raw data in the output (default: data source)") + include: Optional[List[str]] = Field( + None, description="Only include files matching pattern(s) (glob/regex string)") + exclude: Optional[List[str]] = Field( + None, description="Exclude files matching pattern(s) (glob/regex string)") model_config = { "json_schema_extra": { @@ -95,6 +99,8 @@ def run_command( auto_processing: bool = False, auto_detection: bool = False, raw_data: bool = False, + include: Optional[List[str]] = None, + exclude: Optional[List[str]] = None, ) -> StreamingResponse: """Execute nmr-cli parse-spectra command in Docker container.""" @@ -113,6 +119,12 @@ def run_command( cmd.append("-d") if raw_data: cmd.append("-r") + if include: + cmd.append("--include") + cmd.extend(include) + if exclude: + cmd.append("--exclude") + cmd.extend(exclude) try: result = subprocess.run( @@ -362,7 +374,11 @@ async def parse_spectra_from_file( description="Enable ranges and zones automatic detection", ), raw_data: bool = Form( - False, description="Include raw data in the output (default: data source references)") + False, description="Include raw data in the output (default: data source references)"), + include: Optional[List[str]] = Form( + None, description="Only include files matching pattern(s) (glob/regex string)"), + exclude: Optional[List[str]] = Form( + None, description="Exclude files matching pattern(s) (glob/regex string)"), ): """ ## Parse spectra from an uploaded file @@ -376,6 +392,8 @@ async def parse_spectra_from_file( | `auto_processing` | Automatically process FID → FT spectra | | `auto_detection` | Automatically detect ranges and zones | | `raw_data` | Include raw data in the output (default: data source) | + | `include` | Only include files matching pattern(s) | + | `exclude` | Exclude files matching pattern(s) | ### Returns Parsed spectra data in NMRium-compatible JSON format. """ @@ -405,6 +423,8 @@ async def parse_spectra_from_file( auto_processing=auto_processing, auto_detection=auto_detection, raw_data=raw_data, + include=include, + exclude=exclude, ) except HTTPException: @@ -452,6 +472,8 @@ async def parse_spectra_from_url(request: UrlParseRequest): | `auto_processing` | Automatically process FID → FT spectra | | `auto_detection` | Automatically detect ranges and zones | | `raw_data` | Include raw data in the output (default: data source) | + | `include` | Only include files matching pattern(s) | + | `exclude` | Exclude files matching pattern(s) | ### Returns Parsed spectra data in NMRium-compatible JSON format. @@ -463,6 +485,8 @@ async def parse_spectra_from_url(request: UrlParseRequest): auto_processing=request.auto_processing, auto_detection=request.auto_detection, raw_data=request.raw_data, + include=request.include, + exclude=request.exclude, ) except HTTPException: From eca4e737067231ca382935e2e86182e46d8e9a8d Mon Sep 17 00:00:00 2001 From: hamed musallam Date: Thu, 27 Aug 2026 13:35:04 +0200 Subject: [PATCH 5/5] feat(nmr-cli): update NMRium core packages to v2.7.0 --- app/scripts/nmr-cli/package-lock.json | 50 +++++++++++++-------------- app/scripts/nmr-cli/package.json | 10 +++--- 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/app/scripts/nmr-cli/package-lock.json b/app/scripts/nmr-cli/package-lock.json index a503acd..6f47fd6 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.25", - "@zakodium/nmrium-core": "0.7.62", - "@zakodium/nmrium-core-plugins": "0.7.83", + "@zakodium/nmr-types": "^0.5.26", + "@zakodium/nmrium-core": "0.7.65", + "@zakodium/nmrium-core-plugins": "0.7.87", "axios": "^1.19.0", "fifo-logger": "^2.0.1", "file-collection": "^6.7.0", "json-stream-stringify": "^3.1.7", "lodash.merge": "^4.6.2", "mf-parser": "^3.9.2", - "ml-spectra-processing": "^14.33.0", - "nmr-processing": "^22.23.5", + "ml-spectra-processing": "^14.34.0", + "nmr-processing": "^22.23.6", "openchemlib": "^9.25.0", "playwright": "1.62.1", "yargs": "^18.1.0" @@ -155,9 +155,9 @@ "license": "MIT" }, "node_modules/@zakodium/nmr-types": { - "version": "0.5.25", - "resolved": "https://registry.npmjs.org/@zakodium/nmr-types/-/nmr-types-0.5.25.tgz", - "integrity": "sha512-Flxfn3CoC7J9mSwEcFFRO0omp9aqbf6t8+M1j4BUWbeLJAw6IZu4mdWSLgHZRvCo/VRF9EW7MlOy3BZdv3RcRQ==", + "version": "0.5.26", + "resolved": "https://registry.npmjs.org/@zakodium/nmr-types/-/nmr-types-0.5.26.tgz", + "integrity": "sha512-Da7K23q8O3EK8gslzyx5Hgd3k4TXq0w8JW+Qt2pDBZNY1M+uyVE97R9vcQKtcZiGVl/O0f57+qJ3kxvqVEnRgQ==", "license": "CC-BY-NC-SA-4.0", "dependencies": { "cheminfo-types": "^1.15.0", @@ -168,9 +168,9 @@ } }, "node_modules/@zakodium/nmrium-core": { - "version": "0.7.62", - "resolved": "https://registry.npmjs.org/@zakodium/nmrium-core/-/nmrium-core-0.7.62.tgz", - "integrity": "sha512-bwD4wttFKuXmNNotWuVZI6ddpuO2A0Ul2xi2NIrywHjJiNpJ4HiEX5oBBEboBa+UuuSonhTOKA6iKXbH2jQgWw==", + "version": "0.7.65", + "resolved": "https://registry.npmjs.org/@zakodium/nmrium-core/-/nmrium-core-0.7.65.tgz", + "integrity": "sha512-mXXylnGVMbYRdz23kalRziwMK6OCkJkS3HW9izjatH/6/VZgnbiSa5DBm+SazBuNe5QAutrXIFUWa+t2D/5Esw==", "license": "CC-BY-NC-SA-4.0", "dependencies": { "@zakodium/utils": "^0.5.1", @@ -186,13 +186,13 @@ } }, "node_modules/@zakodium/nmrium-core-plugins": { - "version": "0.7.83", - "resolved": "https://registry.npmjs.org/@zakodium/nmrium-core-plugins/-/nmrium-core-plugins-0.7.83.tgz", - "integrity": "sha512-Y7IFXV7dTcUIxaJrHwWV6HtLcLeBQp0Ehs2VJ+QW54I1GVVd+E7d62Ufa5USAe84N60jrAcli7X46TtGLalfvw==", + "version": "0.7.87", + "resolved": "https://registry.npmjs.org/@zakodium/nmrium-core-plugins/-/nmrium-core-plugins-0.7.87.tgz", + "integrity": "sha512-g/JwP7tgfndzQAy8xmVBWb0PASoQc/IabMHONC7uZ+juXpYizX/XM31WwNSnmAWlbGVmKHM53xU7F+mCJX2Imw==", "license": "CC-BY-NC-SA-4.0", "dependencies": { "@date-fns/utc": "^2.1.1", - "@zakodium/nmrium-core": "^0.7.62", + "@zakodium/nmrium-core": "^0.7.65", "cheminfo-types": "^1.15.0", "convert-to-jcamp": "^7.0.1", "date-fns": "^4.4.0", @@ -203,7 +203,7 @@ "linear-sum-assignment": "^1.0.9", "lodash.merge": "^4.6.2", "ml-spectra-processing": "^14.33.0", - "nmr-processing": "^22.23.5", + "nmr-processing": "^22.23.6", "openchemlib": "^9.24.0", "openchemlib-utils": "^8.17.1", "sdf-parser": "^9.0.0", @@ -1210,9 +1210,9 @@ } }, "node_modules/ml-spectra-processing": { - "version": "14.33.0", - "resolved": "https://registry.npmjs.org/ml-spectra-processing/-/ml-spectra-processing-14.33.0.tgz", - "integrity": "sha512-zg71v6exRvPpzDh9SiN5iNAIG8yTFpzfJrRCRSb/hWf5gMsik7q60DkO5ew4knR7xF4DbjYmNWeqLq8gWcQdEQ==", + "version": "14.34.0", + "resolved": "https://registry.npmjs.org/ml-spectra-processing/-/ml-spectra-processing-14.34.0.tgz", + "integrity": "sha512-sNM3nOg7s4tyinRnU5FyYZFV//cPHMvjwfxQvFh3GyrvWNuZmPIZTPS+kiT/SPXMymxA4+qx8oFSZ9K03clGyQ==", "license": "MIT", "dependencies": { "binary-search": "^1.3.6", @@ -1260,9 +1260,9 @@ "license": "MIT" }, "node_modules/nmr-processing": { - "version": "22.23.5", - "resolved": "https://registry.npmjs.org/nmr-processing/-/nmr-processing-22.23.5.tgz", - "integrity": "sha512-B/7co/EGOv2TKi8zaVHfZ5SN6zVWzQ1Y+QQKzytV0W5mwe4397zQ/VPQI8LBJzXmW6br2iANYDjfJ63+Ddjq7w==", + "version": "22.23.6", + "resolved": "https://registry.npmjs.org/nmr-processing/-/nmr-processing-22.23.6.tgz", + "integrity": "sha512-Psz5P8ZFR4m6szehlvRRqVPxemV5XD6KW+AVKC1DleC7xnyVdivLR+L+4IyoxzWI6709OyjYdXBndHfpoeG2Sw==", "license": "CC-BY-NC-SA-4.0", "dependencies": { "binary-search": "^1.3.6", @@ -1344,9 +1344,9 @@ } }, "node_modules/papaparse": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.6.0.tgz", - "integrity": "sha512-N2vuNQAYGK1/4vs6HJX86+VYU6OkiSTgdJz3JQfTk1y51cFCO/U8gnaeTF4iNE4r57Tt0sV47dUua1/19pxO6Q==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.7.0.tgz", + "integrity": "sha512-qBGxg/7Q3Kl9Wfhrz2Z74UnvnHTXLNG6jmKJFeBvP2+y4lV7So+7SR62+Zd47JvdrCkX+nDcnr0ObPzek/+6RA==", "license": "MIT" }, "node_modules/playwright": { diff --git a/app/scripts/nmr-cli/package.json b/app/scripts/nmr-cli/package.json index 48100d7..c795b3a 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.25", - "@zakodium/nmrium-core": "0.7.62", - "@zakodium/nmrium-core-plugins": "0.7.83", + "@zakodium/nmr-types": "^0.5.26", + "@zakodium/nmrium-core": "0.7.65", + "@zakodium/nmrium-core-plugins": "0.7.87", "axios": "^1.19.0", "fifo-logger": "^2.0.1", "file-collection": "^6.7.0", "json-stream-stringify": "^3.1.7", "lodash.merge": "^4.6.2", "mf-parser": "^3.9.2", - "ml-spectra-processing": "^14.33.0", - "nmr-processing": "^22.23.5", + "ml-spectra-processing": "^14.34.0", + "nmr-processing": "^22.23.6", "openchemlib": "^9.25.0", "playwright": "1.62.1", "yargs": "^18.1.0"