From 5934d4abb9f3b3878614469712627cd86f034dbd Mon Sep 17 00:00:00 2001 From: Molly Smith Date: Wed, 8 Jul 2026 14:34:54 -0600 Subject: [PATCH 1/4] Updated all packages to meteor 3.5 --- .../.npm/package/npm-shrinkwrap.json | 84 +++++++++---------- meteor_packages/mats-common/package.js | 12 +-- 2 files changed, 48 insertions(+), 48 deletions(-) diff --git a/meteor_packages/mats-common/.npm/package/npm-shrinkwrap.json b/meteor_packages/mats-common/.npm/package/npm-shrinkwrap.json index e44bdcb4a..ffc8b8d2f 100644 --- a/meteor_packages/mats-common/.npm/package/npm-shrinkwrap.json +++ b/meteor_packages/mats-common/.npm/package/npm-shrinkwrap.json @@ -7,9 +7,9 @@ "integrity": "sha512-ulkCYfFbYj01ie1MDOyxv2F6SpRN1TOj7fQxbP07D6HmeR+gr2JLSmINKjga2emB+b1L2KGrFKBTc+e00p54nw==" }, "@couchbase/couchbase-darwin-arm64-napi": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@couchbase/couchbase-darwin-arm64-napi/-/couchbase-darwin-arm64-napi-4.7.0.tgz", - "integrity": "sha512-GSojqk4zMc39RmrKdjM5N9ovFr8kkzhBTsf70EV+I/iSEjks4woUiKwMi9pm7rgV+nx94rb+WnPLAwwUD22hxQ==" + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/@couchbase/couchbase-darwin-arm64-napi/-/couchbase-darwin-arm64-napi-4.7.1.tgz", + "integrity": "sha512-vHKbnh00YQLwl306bF6vQ1UvR09B5bPqkJ8BcFEGE8vPaSYZSy6a0BNdq/8+FctFdg29xcP+qsCeihwVvBZfaQ==" }, "@isaacs/fs-minipass": { "version": "4.0.1", @@ -27,9 +27,9 @@ "integrity": "sha512-pbCDiVMnne1lYUIaYNN5wrwQXDtHaYtg7YEFPeW+hws6U47WeFvISGUWekPGKWOP1ygrs0ef0o1VJMk1exos5A==" }, "@types/node": { - "version": "25.9.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.9.3.tgz", - "integrity": "sha512-603BddQMv3pUcr4U2dhujk83N2tTDVr/34wII2B6bJy6g+8WD6yUb11jszNs0gdi4PesVWl7ABt8nYMVpnLUcg==" + "version": "26.1.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.1.1.tgz", + "integrity": "sha512-nxAkRSVkN1Y0JC1W8ky/fTfkGsMmcrRsbx+3XoZE+rMOX71kLYTV7fLXpqud1GpbpP5TuffXFqfX7fH2GgZREw==" }, "@types/trusted-types": { "version": "2.0.7", @@ -112,9 +112,9 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "couchbase": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/couchbase/-/couchbase-4.7.0.tgz", - "integrity": "sha512-0qfuZVpDiP4oaSpWt/GQURlXTWKQVopqK0VxstTpjjQVFO0ZsbpFpG0ghAdJFWbeZV64B7+07fk4Xe2cWvlfLA==" + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/couchbase/-/couchbase-4.7.1.tgz", + "integrity": "sha512-KVryIxsBY55rc0k1G2camniXVX/55RiU1TwWWN7j2e56X42vm7vQynkdOv6jkItmIpekZc3BjZchw0HffX0rPA==" }, "css-line-break": { "version": "2.1.0", @@ -122,9 +122,9 @@ "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==" }, "csv-stringify": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-6.8.0.tgz", - "integrity": "sha512-Ya0OOHb6XbgPaZKH7dcdmwXe3azUS0TwmlbVdS75HoAhnHApSkiQcfEJoC/s5WwGsrXwOjBDr3FTmCZPjkssgg==" + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-6.8.1.tgz", + "integrity": "sha512-tZ6X6TKQyQgCo5OptXcyAbfN1pwmoxEqELPQ7KFazNErx7kiVsDK8o+VYRXhfMl4N9vvOOLXuioquR2MeP847A==" }, "datatables.net": { "version": "2.3.8", @@ -207,9 +207,9 @@ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==" }, "fs-extra": { - "version": "11.3.5", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.5.tgz", - "integrity": "sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg==" + "version": "11.3.6", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.6.tgz", + "integrity": "sha512-w8ZNZr2mKIc7qeNaQ9AVPT1+iFaI+Avd4xudVOvdDJ8VytREi1Ft5Ih7hd9jjehod8vAM5GMsfQ/TpPf4EyoEA==" }, "function-bind": { "version": "1.1.2", @@ -272,9 +272,9 @@ "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==" }, "iconv-lite": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", - "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==" + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz", + "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==" }, "ieee754": { "version": "1.2.1", @@ -412,9 +412,9 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "mysql2": { - "version": "3.22.5", - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.22.5.tgz", - "integrity": "sha512-95uZ2TrPWAZdwpB3vvvDbmEMcNG8yIeNCyu6GUcr/QnWEE/wXm7+mhOCsdQfWQDTV7qYT/PDUZ4U4UPP4AsXqQ==" + "version": "3.22.6", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.22.6.tgz", + "integrity": "sha512-fPKmeDGUzvFP7bMD5SASlJ5zIgvCC4hbanTmhbUlEmhyrY1hR4Hi3xLOWgTd3luYjLVifx6uGvMNJ2m/LlqEpg==" }, "named-placeholders": { "version": "1.1.6", @@ -422,9 +422,9 @@ "integrity": "sha512-Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/kmRh9TfLEObFtkVxmY0w==" }, "node-addon-api": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.8.0.tgz", - "integrity": "sha512-c5Ko1fZJIJmzhFIkhRN76WTq+fC6tWnGy9CXA0fA+XygsWZmEwG8vmbkNqxMyoaa0Tin4djul49NzdVcJJcjeA==" + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.9.0.tgz", + "integrity": "sha512-ekZMeaaIzSQTSpr7X2X3iJM7lTzgnx8ahAG9pJfT/7+14mlEM8ZYQ9cgCDvSSRbReFK0oHli3WrZdCiRsgAT9Q==" }, "node-api-headers": { "version": "1.9.0", @@ -472,9 +472,9 @@ "integrity": "sha512-RUOOOjHLhgR1MIQrCtnEqz/HJ1RMZBIN+REnpSUrfft2bXqXy69fwJASVziWExfFXsR1bCY0TznnHooNsCo0/w==" }, "qs": { - "version": "6.15.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz", - "integrity": "sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==" + "version": "6.15.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz", + "integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==" }, "rc": { "version": "1.2.8", @@ -502,9 +502,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "semver": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.4.tgz", - "integrity": "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==" + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==" }, "side-channel": { "version": "1.1.1", @@ -532,9 +532,9 @@ "integrity": "sha512-1/ZteXH9wSGWTWYFVtFtfvOF4C30sUp8AP+wjZGgHVqvihiE95NrHSRPbAbKBXqG5wGzAhBV5kEBRAbJXSqNpA==" }, "sql-escaper": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/sql-escaper/-/sql-escaper-1.3.3.tgz", - "integrity": "sha512-BsTCV265VpTp8tm1wyIm1xqQCS+Q9NHx2Sr+WcnUrgLrQ6yiDIvHYJV5gHxsj1lMBy2zm5twLaZao8Jd+S8JJw==" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/sql-escaper/-/sql-escaper-1.4.0.tgz", + "integrity": "sha512-Ti/Zx9J3aITMYUMFhCKbkplQjyi7Kk2SyYXp+rzrkyKZetIy19XbQtVZ+0ZR5aVm/178tIJ6+aVvBqXkH+Xs7w==" }, "steno": { "version": "0.4.4", @@ -557,9 +557,9 @@ "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" }, "tar": { - "version": "7.5.16", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.16.tgz", - "integrity": "sha512-56adEpPMouktRlBLXiaYFFzZ/3+JXa8P9n7WbR+ibIjtviN55mEaOkiysCnPnWm+7kkui1Dn8J9l+g6zV8731w==" + "version": "7.5.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.19.tgz", + "integrity": "sha512-4LeEWl96twnS2Q7Bz4MGqgazLqO+hJN63GZxXoIqh1T3VweYD997gbU1ItNsQafqqXTXd5WFyFdReLtwvRBNiw==" }, "text-segmentation": { "version": "1.0.3", @@ -567,9 +567,9 @@ "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==" }, "undici-types": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.24.6.tgz", - "integrity": "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==" + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.3.0.tgz", + "integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==" }, "universalify": { "version": "2.0.1", @@ -617,9 +617,9 @@ "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==" }, "yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==" + "version": "17.7.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", + "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==" }, "yargs-parser": { "version": "21.1.1", diff --git a/meteor_packages/mats-common/package.js b/meteor_packages/mats-common/package.js index 3ec0c3d8a..d6fea0954 100644 --- a/meteor_packages/mats-common/package.js +++ b/meteor_packages/mats-common/package.js @@ -6,7 +6,7 @@ Package.describe({ name: "randyp:mats-common", - version: "6.3.0", + version: "6.3.1", // Brief, one-line summary of the package. summary: "MATScommon files provides common functionality for MATS/METexpress apps", // URL to the Git repository containing the source code for this package. @@ -17,18 +17,18 @@ Package.describe({ }); Package.onUse(function (api) { - api.versionsFrom("3.4.1"); + api.versionsFrom("3.5"); Npm.depends({ // ******* npm packages // core functionality packages - "fs-extra": "11.3.5", + "fs-extra": "11.3.6", "simpl-schema": "3.4.7", // things to do with querying "python-shell": "5.0.0", - couchbase: "4.7.0", - mysql2: "3.22.5", + couchbase: "4.7.1", + mysql2: "3.22.6", url: "0.11.4", // things to do with downsizing and caching data @@ -43,7 +43,7 @@ Package.onUse(function (api) { // saving to png or csv files html2canvas: "1.4.1", - "csv-stringify": "6.8.0", + "csv-stringify": "6.8.1", // dates moment: "2.30.1", From 181b24245e96556cde46e970b7e2c2573d275667 Mon Sep 17 00:00:00 2001 From: Molly Smith Date: Wed, 8 Jul 2026 15:43:02 -0600 Subject: [PATCH 2/4] Replaced caching package --- .../.npm/package/npm-shrinkwrap.json | 40 +++---------------- .../imports/startup/api/matsHelpers.js | 8 ++-- .../imports/startup/api/matsMethods.js | 20 +++++----- .../imports/startup/api/routeHandlers.js | 12 +++--- .../imports/startup/client/curve_util.js | 18 ++++----- .../imports/startup/server/cache.js | 29 ++++++++------ meteor_packages/mats-common/package.js | 2 +- .../templates/curves/curve_list.js | 2 +- .../mats-common/templates/graph/graph.js | 2 +- .../mats-common/templates/plot/plot_list.js | 24 +++++------ 10 files changed, 64 insertions(+), 93 deletions(-) diff --git a/meteor_packages/mats-common/.npm/package/npm-shrinkwrap.json b/meteor_packages/mats-common/.npm/package/npm-shrinkwrap.json index ffc8b8d2f..97d676385 100644 --- a/meteor_packages/mats-common/.npm/package/npm-shrinkwrap.json +++ b/meteor_packages/mats-common/.npm/package/npm-shrinkwrap.json @@ -206,6 +206,11 @@ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==" }, + "file-system-cache": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/file-system-cache/-/file-system-cache-3.0.0.tgz", + "integrity": "sha512-0DGtxRpTdrg0LCCZ4TjAiLs+2CQYlcWx4V5BP95qgUpQGMgAXQ58PfB2mb5KT7BPryhCJ9KD4JW+feMweHlXFw==" + }, "fs-extra": { "version": "11.3.6", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.6.tgz", @@ -291,11 +296,6 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, - "is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" - }, "is-property": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", @@ -306,21 +306,11 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==" }, - "jju": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", - "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==" - }, "jquery": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jquery/-/jquery-4.0.0.tgz", "integrity": "sha512-TXCHVR3Lb6TZdtw1l3RTLf8RBWVGexdxL6AC8/e0xZKEpBflBsjh9/8LXw+dkNFuOyW9B7iB3O1sP7hS0Kiacg==" }, - "json-parse-helpfulerror": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz", - "integrity": "sha512-XgP0FGR77+QhUxjXkwOMkC94k3WtqEBfcnjWqhRd82qTat4SWKRE+9kUnynz/shm3I4ea2+qISvTIeGTNU7kJg==" - }, "jsonfile": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", @@ -351,21 +341,11 @@ "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.3.3.tgz", "integrity": "sha512-el8M6jK2o3RXBnrSHX3ZKrsN8zEV63pSExTO1wYJz7QndGYZ8353e2a5PPX+qHe2aGayfnchQmkAojaWAREOIA==" }, - "lodash": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", - "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==" - }, "long": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==" }, - "lowdb": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/lowdb/-/lowdb-0.14.0.tgz", - "integrity": "sha512-ilVJrQ+019xOJuKjPzeH10aDNL4s8aTt4qQVAta9psn0W8Mu+LxzQv1S2u6lTOg/cQL+EHkVxD6nAdaacuCL/g==" - }, "lru.min": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.4.tgz", @@ -431,11 +411,6 @@ "resolved": "https://registry.npmjs.org/node-api-headers/-/node-api-headers-1.9.0.tgz", "integrity": "sha512-2oNILP4jXwRB4ywnYKjVk1YyJ96n2D4EOVJO6S3oYZ5PtbJrw3Yt9TpAuX3nBLMuzn74rnfGQrv13pS9vC+YiA==" }, - "node-file-cache": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/node-file-cache/-/node-file-cache-1.0.2.tgz", - "integrity": "sha512-X+u705v8tTdOnNhTkkSdb36QbuILf1MjSmSb8JlrpzLIzlLFu7qmCF3ezaAFPz9w5vFe0NpZfa7kn2v6eW+SAg==" - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -536,11 +511,6 @@ "resolved": "https://registry.npmjs.org/sql-escaper/-/sql-escaper-1.4.0.tgz", "integrity": "sha512-Ti/Zx9J3aITMYUMFhCKbkplQjyi7Kk2SyYXp+rzrkyKZetIy19XbQtVZ+0ZR5aVm/178tIJ6+aVvBqXkH+Xs7w==" }, - "steno": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/steno/-/steno-0.4.4.tgz", - "integrity": "sha512-EEHMVYHNXFHfGtgjNITnka0aHhiAlo93F7z2/Pwd+g0teG9CnM3JIINM7hVVB5/rhw9voufD7Wukwgtw2uqh6w==" - }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", diff --git a/meteor_packages/mats-common/imports/startup/api/matsHelpers.js b/meteor_packages/mats-common/imports/startup/api/matsHelpers.js index c2f3aa514..f40b80608 100644 --- a/meteor_packages/mats-common/imports/startup/api/matsHelpers.js +++ b/meteor_packages/mats-common/imports/startup/api/matsHelpers.js @@ -124,7 +124,7 @@ export const checkMetaDataRefresh = async function () { // private method for getting pagenated data // a newPageIndex of -1000 means get all the data (used for export) // a newPageIndex of -2000 means get just the last page -export const getPagenatedData = function (rky, p, np) { +export const getPagenatedData = async function (rky, p, np) { if (Meteor.isServer) { const key = rky; const myPageIndex = p; @@ -132,7 +132,7 @@ export const getPagenatedData = function (rky, p, np) { let rawReturn; try { - const result = matsCache.getResult(key); + const result = await matsCache.getResult(key); rawReturn = result === undefined ? undefined : result.result; // getResult structure is {key:something, result:resultObject} } catch (e) { console.log("getPagenatedData: Error - ", e); @@ -211,14 +211,14 @@ export const getPagenatedData = function (rky, p, np) { }; // private method for getting pagenated results and flattening them in order to be appropriate for text display. -export const getFlattenedResultData = function (rk, p, np) { +export const getFlattenedResultData = async function (rk, p, np) { if (Meteor.isServer) { try { const r = rk; const thisP = p; const thisNP = np; // get the pagenated data - const result = getPagenatedData(r, thisP, thisNP); + const result = await getPagenatedData(r, thisP, thisNP); // find the type const { plotTypes } = result.basis.plotParams; const plotType = _.invert(plotTypes).true; diff --git a/meteor_packages/mats-common/imports/startup/api/matsMethods.js b/meteor_packages/mats-common/imports/startup/api/matsMethods.js index f30aaa74a..7b96dd571 100644 --- a/meteor_packages/mats-common/imports/startup/api/matsMethods.js +++ b/meteor_packages/mats-common/imports/startup/api/matsMethods.js @@ -197,7 +197,7 @@ const saveResultData = async function (result) { delete storedResult.data[ci].x_epoch; // we only needed this as an index for downsampling } } - matsCache.storeResult(key, { + await matsCache.storeResult(key, { key, result: storedResult, }); // lifespan is handled by lowDb (internally) in matscache @@ -502,7 +502,7 @@ const getGraphData = new ValidatedMethod({ plotType: { type: String, }, - expireKey: { + removeKey: { type: Boolean, }, }).validator(), @@ -516,10 +516,10 @@ const getGraphData = new ValidatedMethod({ try { const hash = require("object-hash"); const key = hash(params.plotParams); - if (process.env.NODE_ENV === "development" || params.expireKey) { - matsCache.expireKey(key); + if (process.env.NODE_ENV === "development" || params.removeKey) { + await matsCache.removeKey(key); } - const results = matsCache.getResult(key); + const results = await matsCache.getResult(key); if (results === undefined) { // results aren't in the cache - need to process data routine const graphData = await global[dataFunction](params.plotParams); @@ -554,7 +554,7 @@ const getGraphData = new ValidatedMethod({ } else { ret = results; // {key:someKey, result:resultObject} // refresh expire time. The only way to perform a refresh on matsCache is to re-save the result. - matsCache.storeResult(results.key, results); + await matsCache.storeResult(results.key, results); } return ret; } catch (dataFunctionError) { @@ -596,7 +596,7 @@ const getGraphDataByKey = new ValidatedMethod({ if (dsResults !== undefined) { ret = dsResults; } else { - ret = matsCache.getResult(key); // {key:someKey, result:resultObject} + ret = await matsCache.getResult(key); // {key:someKey, result:resultObject} } const sizeof = require("object-sizeof"); console.log("getGraphDataByKey results size is ", sizeof(dsResults)); @@ -715,14 +715,14 @@ const getPlotResult = new ValidatedMethod({ type: Number, }, }).validator(), - run(params) { + async run(params) { if (Meteor.isServer) { const rKey = params.resultKey; const pi = params.pageIndex; const npi = params.newPageIndex; let ret = {}; try { - ret = getFlattenedResultData(rKey, pi, npi); + ret = await getFlattenedResultData(rKey, pi, npi); } catch (e) { console.log(e); } @@ -1213,7 +1213,7 @@ const resetApp = async function (appRef) { for (let ai = 0; ai < global.appSpecificResetRoutines.length; ai += 1) { await global.appSpecificResetRoutines[ai](); } - matsCache.clear(); + await matsCache.clear(); } }; diff --git a/meteor_packages/mats-common/imports/startup/api/routeHandlers.js b/meteor_packages/mats-common/imports/startup/api/routeHandlers.js index d17ba5e8a..3eb65e46d 100644 --- a/meteor_packages/mats-common/imports/startup/api/routeHandlers.js +++ b/meteor_packages/mats-common/imports/startup/api/routeHandlers.js @@ -34,7 +34,7 @@ export const getHealth = async function ({ res }) { }; // handler for CSV route -export const getCSV = function ({ req, res }) { +export const getCSV = async function ({ req, res }) { if (Meteor.isServer) { // Make sure req exists and has params if (!req || !req.params) { @@ -48,7 +48,7 @@ export const getCSV = function ({ req, res }) { const stringify = require("csv-stringify"); let csv = ""; try { - const result = getFlattenedResultData(params.key, 0, -1000); + const result = await getFlattenedResultData(params.key, 0, -1000); const statArray = Object.values(result.stats); const dataArray = Object.values(result.data); @@ -82,7 +82,7 @@ export const getCSV = function ({ req, res }) { }; // handler for JSON route -export const getJSON = function ({ req, res }) { +export const getJSON = async function ({ req, res }) { if (Meteor.isServer) { // Make sure req exists and has params if (!req || !req.params) { @@ -94,7 +94,7 @@ export const getJSON = function ({ req, res }) { const { params } = req; let flatJSON = ""; try { - const result = getPagenatedData(params.key, 0, -1000); + const result = await getPagenatedData(params.key, 0, -1000); flatJSON = JSON.stringify(result.basis); } catch (e) { console.log("error retrieving data: ", e); @@ -109,9 +109,9 @@ export const getJSON = function ({ req, res }) { }; // Cache management middleware -export const clearCache = function ({ res }) { +export const clearCache = async function ({ res }) { if (Meteor.isServer) { - matsCache.clear(); + await matsCache.clear(); res.end("

clearCache Done!

"); } }; diff --git a/meteor_packages/mats-common/imports/startup/client/curve_util.js b/meteor_packages/mats-common/imports/startup/client/curve_util.js index 237ad0beb..c9cdc7e02 100644 --- a/meteor_packages/mats-common/imports/startup/client/curve_util.js +++ b/meteor_packages/mats-common/imports/startup/client/curve_util.js @@ -79,17 +79,13 @@ const setPlotResultData = function () { if (Session.get("textRefreshNeeded") === true) { showSpinner(); - matsMethods.getPlotResult.call( - { + matsMethods.getPlotResult + .callAsync({ resultKey: Session.get("plotResultKey"), pageIndex, newPageIndex, - }, - function (error, result) { - if (error !== undefined) { - setError(new Error(`matsMethods.getPlotResult failed : error: ${error}`)); - Session.set("textRefreshNeeded", false); - } + }) + .then((result) => { if (!result) { plotResultData = undefined; Session.set("textRefreshNeeded", false); @@ -103,8 +99,10 @@ const setPlotResultData = function () { console.log("size of plotResultData is ", sizeof(plotResultData)); Session.set("textRefreshNeeded", false); hideSpinner(); - } - ); + }) + .catch(function (error) { + setError(error); + }); } }; diff --git a/meteor_packages/mats-common/imports/startup/server/cache.js b/meteor_packages/mats-common/imports/startup/server/cache.js index b5cbaa806..dd93ec1d7 100644 --- a/meteor_packages/mats-common/imports/startup/server/cache.js +++ b/meteor_packages/mats-common/imports/startup/server/cache.js @@ -9,30 +9,33 @@ import { Meteor } from "meteor/meteor"; let getResult; let storeResult; let clear; -let expireKey; +let removeKey; if (Meteor.isServer) { - const Results = require("node-file-cache").create({ - file: "fileCache", - life: 8 * 3600, + // eslint-disable-next-line import/no-unresolved + import Cache from "file-system-cache"; + + const Results = Cache({ + basePath: "./.cache", // (optional) Path where cache files are stored (default). + ttl: 8 * 3600, // (optional) A time-to-live (in secs) on how long an item remains cached. }); - getResult = function (key) { + getResult = async function (key) { // console.log('asked to get result from cache for key:', key); - const result = Results.get(key); + const result = await Results.get(key); return result === null ? undefined : result; }; - storeResult = function (key, result) { + storeResult = async function (key, result) { // console.log('asked to set result in cache for app: ',process.env.PWD, ' key:', key); - Results.set(key, result); + await Results.set(key, result); // console.log('set result in cache for app: ', process.env.PWD, 'key:', key); }; - clear = function () { + clear = async function () { // console.log('asked to clear result cache'); - Results.clear(); + await Results.clear(); }; - expireKey = function (key) { + removeKey = async function (key) { // console.log('asked to clear result cache for key ', key); - Results.expire(key); + await Results.remove(key); }; } @@ -41,5 +44,5 @@ export default matsCache = { getResult, storeResult, clear, - expireKey, + removeKey, }; diff --git a/meteor_packages/mats-common/package.js b/meteor_packages/mats-common/package.js index d6fea0954..0a9ff42e7 100644 --- a/meteor_packages/mats-common/package.js +++ b/meteor_packages/mats-common/package.js @@ -32,7 +32,7 @@ Package.onUse(function (api) { url: "0.11.4", // things to do with downsizing and caching data - "node-file-cache": "1.0.2", + "file-system-cache": "3.0.0", "downsample-lttb": "0.0.1", "object-hash": "3.0.0", "object-sizeof": "2.6.5", diff --git a/meteor_packages/mats-common/templates/curves/curve_list.js b/meteor_packages/mats-common/templates/curves/curve_list.js index 512d02bb3..c0280b6fc 100644 --- a/meteor_packages/mats-common/templates/curves/curve_list.js +++ b/meteor_packages/mats-common/templates/curves/curve_list.js @@ -232,7 +232,7 @@ Template.curveList.helpers({ uses a switch on 'action' which is the event.currentTarget.name "save|restore|plot" which are the names of type="submit" buttons in the form, like name="plot" or name="save". In the type="submit" and name-"plot" case of the switch this call... - matsMethods.getGraphData.callAsync({plotParams: p, plotType: pt, expireKey: expireKey}, function (error, ret) ..... + matsMethods.getGraphData.callAsync({plotParams: p, plotType: pt, removeKey: removeKey}, function (error, ret) ..... is what invokes the data method in the backend, and the success handler of that call is what sets up the graph page. */ diff --git a/meteor_packages/mats-common/templates/graph/graph.js b/meteor_packages/mats-common/templates/graph/graph.js index a26c9fb6e..e659949ae 100644 --- a/meteor_packages/mats-common/templates/graph/graph.js +++ b/meteor_packages/mats-common/templates/graph/graph.js @@ -1913,7 +1913,7 @@ Template.graph.events({ }, "click .reCacheButton"() { Session.get("plotType"); - Session.set("expireKey", true); + Session.set("removeKey", true); document.getElementById("plot-curves").click(); }, "click .curveVisibility"(event) { diff --git a/meteor_packages/mats-common/templates/plot/plot_list.js b/meteor_packages/mats-common/templates/plot/plot_list.js index 5ff98aae7..463333932 100644 --- a/meteor_packages/mats-common/templates/plot/plot_list.js +++ b/meteor_packages/mats-common/templates/plot/plot_list.js @@ -29,7 +29,7 @@ import { Template } from "meteor/templating"; uses a switch on 'action' which is the event.currentTarget.name "save|restore|plot" which are the names of type="submit" buttons in the form, like name="plot" or name="save". In the type="submit" and name-"plot" case of the switch this call... - matsMethods.getGraphData.callAsync({plotParams: p, plotType: pt, expireKey: expireKey}, function (error, ret) ..... + matsMethods.getGraphData.callAsync({plotParams: p, plotType: pt, removeKey: removeKey}, function (error, ret) ..... is what invokes the data method in the backend, and the success handler of that call is what sets up the graph page. */ @@ -292,7 +292,7 @@ Template.plotList.events({ let pt; let pgf; let graphFunction; - let expireKey; + let removeKey; let x; let y; let m; @@ -390,12 +390,12 @@ Template.plotList.events({ graphFunction = pgf.graphFunction; console.log("prior to getGraphData call time:", new Date()); - // the following line converts a null expireKey to false. - expireKey = Session.get("expireKey") === true; + // the following line converts a null removeKey to false. + removeKey = Session.get("removeKey") === true; matsMethods.getGraphData - .callAsync({ plotParams: p, plotType: pt, expireKey }) + .callAsync({ plotParams: p, plotType: pt, removeKey }) .then(function (ret) { - Session.set("expireKey", false); + Session.set("removeKey", false); matsCurveUtils.setGraphResult(ret.result); const plotType = Session.get("plotType"); if (plotType === matsTypes.PlotTypes.contourDiff) { @@ -423,7 +423,7 @@ Template.plotList.events({ // Session.set ('PlotResultsUpDated', new Date()); Session.set("spinner_img", "spinner.gif"); matsCurveUtils.hideSpinner(); - Session.set("expireKey", false); + Session.set("removeKey", false); return false; }); break; @@ -443,8 +443,8 @@ Template.plotList.events({ } graphFunction = pgf.graphFunction; console.log("prior to getGraphData call time:", new Date()); - // the following line converts a null expireKey to false. - expireKey = Session.get("expireKey") === true; + // the following line converts a null removeKey to false. + removeKey = Session.get("removeKey") === true; // add user and name to the plotparams if (Meteor.user() === null) { p.userName = "anonymous"; @@ -480,10 +480,10 @@ Template.plotList.events({ "scorecard-name" ] = `${p["name-this-scorecard"]} -- ${p.userName} -- submitted: ${submitTime}`; matsMethods.getGraphData - .callAsync({ plotParams: p, plotType: pt, expireKey }) + .callAsync({ plotParams: p, plotType: pt, removeKey }) .then(function (ret) { Session.set("ret", ret); - Session.set("expireKey", false); + Session.set("removeKey", false); Session.set("graphFunction", graphFunction); console.log( "after successful getGraphData call time:", @@ -499,7 +499,7 @@ Template.plotList.events({ .catch(function (error) { Session.set("spinner_img", "spinner.gif"); matsCurveUtils.hideSpinner(); - Session.set("expireKey", false); + Session.set("removeKey", false); setError(error); }); break; From cae27f953d55470ff5b3b60d19d1d4c9eec762e5 Mon Sep 17 00:00:00 2001 From: Molly Smith Date: Wed, 8 Jul 2026 15:44:14 -0600 Subject: [PATCH 3/4] Updated release notes --- meteor_packages/mats-common/public/MATSReleaseNotes.html | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/meteor_packages/mats-common/public/MATSReleaseNotes.html b/meteor_packages/mats-common/public/MATSReleaseNotes.html index d6b0e9cb8..e59178150 100755 --- a/meteor_packages/mats-common/public/MATSReleaseNotes.html +++ b/meteor_packages/mats-common/public/MATSReleaseNotes.html @@ -2,10 +2,12 @@

Production build date: Current revision

-

PUT APP VERSIONS HERE

+

All apps v6.3.1

Changes:

-

* PUT CHANGES HERE

+

* Updated all apps to Meteor v3.4.1.

+

* Fixed npm security vulnerabilities.

+

* Replaced caching package with one more up-to-date.


Date: Wed, 8 Jul 2026 15:49:00 -0600 Subject: [PATCH 4/4] Better error message --- .../mats-common/imports/startup/client/curve_util.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meteor_packages/mats-common/imports/startup/client/curve_util.js b/meteor_packages/mats-common/imports/startup/client/curve_util.js index c9cdc7e02..ee7f02a48 100644 --- a/meteor_packages/mats-common/imports/startup/client/curve_util.js +++ b/meteor_packages/mats-common/imports/startup/client/curve_util.js @@ -101,7 +101,8 @@ const setPlotResultData = function () { hideSpinner(); }) .catch(function (error) { - setError(error); + setError(new Error(`matsMethods.getPlotResult failed : error: ${error}`)); + Session.set("textRefreshNeeded", false); }); } };