From 6785fbf0f55506bcebe7f4597fe4f6852e0aa798 Mon Sep 17 00:00:00 2001 From: Ehevi Date: Fri, 4 Aug 2023 16:45:26 +0200 Subject: [PATCH 01/12] Reuse components --- .../database/repositories/RunRepository.js | 1 - app/public/views/userView/data/dataPanel.js | 9 +- .../userView/data/fetchingStates/failure.js | 23 +- .../userView/data/fetchingStates/unknown.js | 36 - .../{loading.js => unknownError.js} | 18 +- package-lock.json | 721 +++++++++--------- package.json | 2 +- 7 files changed, 362 insertions(+), 448 deletions(-) delete mode 100644 app/public/views/userView/data/fetchingStates/unknown.js rename app/public/views/userView/data/fetchingStates/{loading.js => unknownError.js} (59%) diff --git a/app/lib/database/repositories/RunRepository.js b/app/lib/database/repositories/RunRepository.js index 8abfdb535..86856f737 100644 --- a/app/lib/database/repositories/RunRepository.js +++ b/app/lib/database/repositories/RunRepository.js @@ -12,7 +12,6 @@ */ const Repository = require("./Repository"); -const Sequelize = require('sequelize'); const deepmerge = require('deepmerge'); /** diff --git a/app/public/views/userView/data/dataPanel.js b/app/public/views/userView/data/dataPanel.js index a0cf604d1..9c227f2f4 100644 --- a/app/public/views/userView/data/dataPanel.js +++ b/app/public/views/userView/data/dataPanel.js @@ -12,14 +12,13 @@ * or submit itself to any jurisdiction. */ -import { h } from '/js/src/index.js'; import tablePanel from './table/tablePanel.js'; -import loading from './fetchingStates/loading.js'; import failureStatusAndReload from './fetchingStates/failure.js'; -import unknownError from './fetchingStates/unknown.js'; +import unknownError from './fetchingStates/unknownError.js'; import { RCT } from '../../../config.js'; import flagsPanel from '../../flags/overview/flagsPanel.js'; import { default as runsPerDataPassPanel } from '../../runs/runsPerDataPass/overview/panel.js'; +import waitingPanel from '../../waitingPanel.js'; const { pageNames } = RCT; /** @@ -33,8 +32,8 @@ export default function dataPanel(model, runs, detectors, flags) { const data = model.fetchedData[page][index]; return data ? data.match({ - NotAsked: () => h('', 'not asked'), - Loading: () => loading(), + NotAsked: () => unknownError(model), + Loading: () => waitingPanel(), Success: () => { switch (page) { case pageNames.flags: diff --git a/app/public/views/userView/data/fetchingStates/failure.js b/app/public/views/userView/data/fetchingStates/failure.js index 84f7e0392..b29762152 100644 --- a/app/public/views/userView/data/fetchingStates/failure.js +++ b/app/public/views/userView/data/fetchingStates/failure.js @@ -13,24 +13,13 @@ */ import { h } from '/js/src/index.js'; -import viewButton from '../../../../components/common/viewButton.js'; +import messagePanel from '../../../../components/messagePanel/messagePanel.js'; export default function failureStatusAndReload(model, status) { - const reloadBtn = viewButton( - model, - 'Reload', - () => model.fetchedData.reqForData(true), - '', - undefined, - '.btn-primary.m3', + return messagePanel( + 'no-network-90', + 'Failed to load data', + `The services are unavailable (status: ${status ? status : 'unknown'})`, + h('button.btn.btn-primary.m3', { onclick: () => model.fetchedData.reqForData() }, 'Reload'), ); - const loadingMessage = h('h3', 'Failed to load data'); - const explanation = h('h5', `The services are unavailable (status: ${status ? status : 'unknown'})`); - - return h('.panel.top-100', [ - h('.no-network-90'), - loadingMessage, - explanation, - reloadBtn, - ]); } diff --git a/app/public/views/userView/data/fetchingStates/unknown.js b/app/public/views/userView/data/fetchingStates/unknown.js deleted file mode 100644 index 6870dd0c3..000000000 --- a/app/public/views/userView/data/fetchingStates/unknown.js +++ /dev/null @@ -1,36 +0,0 @@ -/** - * @license - * Copyright 2019-2020 CERN and copyright holders of ALICE O2. - * See http://alice-o2.web.cern.ch/copyright for details of the copyright holders. - * All rights not expressly granted are reserved. - * - * This software is distributed under the terms of the GNU General Public - * License v3 (GPL Version 3), copied verbatim in the file "COPYING". - * - * In applying this license CERN does not waive the privileges and immunities - * granted to it by virtue of its status as an Intergovernmental Organization - * or submit itself to any jurisdiction. - */ - -import { h } from '/js/src/index.js'; -import viewButton from '../../../../components/common/viewButton.js'; - -export default function unknownError(model) { - const reloadBtn = viewButton( - model, - 'Reload', - () => model.fetchedData.reqForData(true), - '', - undefined, - '.btn-primary.m3', - ); - const loadingMessage = h('h3', 'Unknown error'); - const explanation = h('h5', 'Request could not be handled properly'); - - return h('.panel.top-100', [ - h('.unexpected-90'), - loadingMessage, - explanation, - reloadBtn, - ]); -} diff --git a/app/public/views/userView/data/fetchingStates/loading.js b/app/public/views/userView/data/fetchingStates/unknownError.js similarity index 59% rename from app/public/views/userView/data/fetchingStates/loading.js rename to app/public/views/userView/data/fetchingStates/unknownError.js index 37077b0f9..3abfe3077 100644 --- a/app/public/views/userView/data/fetchingStates/loading.js +++ b/app/public/views/userView/data/fetchingStates/unknownError.js @@ -13,18 +13,12 @@ */ import { h } from '/js/src/index.js'; -import spinner from '../../../../components/common/spinner.js'; +import messagePanel from '../../../../components/messagePanel/messagePanel.js'; -export default function loading() { - const reloadBtn = h('button.btn.btn-primary.m3', { - onclick: () => document.location.reload(), - }, 'Retry'); - const loadingMessage = h('h3', 'Loading...'); +export default function unknownError(model) { + const reloadButton = h('button.btn.btn-primary.m3', { onclick: () => model.fetchedData.reqForData(true) }, 'Reload'); + const reason = 'Unknown error'; + const message = 'Request could not be handled properly'; - return h('.panel.top-100', [ - h('.panel', - spinner(), - loadingMessage), - reloadBtn, - ]); + return messagePanel('unexpected-90', reason, message, reloadButton); } diff --git a/package-lock.json b/package-lock.json index 1bfc10480..c5cddf36f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -44,6 +44,15 @@ "socks-proxy-agent": "^7.0.0" } }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@aliceo2/web-ui": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@aliceo2/web-ui/-/web-ui-2.3.0.tgz", @@ -78,47 +87,47 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", - "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", + "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", "dev": true, "dependencies": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.3.tgz", - "integrity": "sha512-aNtko9OPOwVESUFp3MZfD8Uzxl7JzSeJpd7npIoxCasU37PFbAQRpKglkaKwlHOyeJdrREpo8TW8ldrkYWwvIQ==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", + "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.1.tgz", - "integrity": "sha512-Hkqu7J4ynysSXxmAahpN1jjRwVJ+NdpraFLIWflgjpVob3KNyK3/tIUc7Q7szed8WMp0JNa7Qtd1E9Oo22F9gA==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", + "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.22.0", - "@babel/helper-compilation-targets": "^7.22.1", - "@babel/helper-module-transforms": "^7.22.1", - "@babel/helpers": "^7.22.0", - "@babel/parser": "^7.22.0", - "@babel/template": "^7.21.9", - "@babel/traverse": "^7.22.1", - "@babel/types": "^7.22.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.9", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helpers": "^7.22.6", + "@babel/parser": "^7.22.7", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.8", + "@babel/types": "^7.22.5", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.2", - "semver": "^6.3.0" + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -129,21 +138,21 @@ } }, "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.3.tgz", - "integrity": "sha512-C17MW4wlk//ES/CJDL51kPNwl+qiBQyN7b9SKyVp11BLGFeSPoVaHrv+MNt8jwQFhQWowW88z1eeBx3pFz9v8A==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", + "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", "dev": true, "dependencies": { - "@babel/types": "^7.22.3", + "@babel/types": "^7.22.5", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -153,16 +162,16 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.1.tgz", - "integrity": "sha512-Rqx13UM3yVB5q0D/KwQ8+SPfX/+Rnsy1Lw1k/UwOC4KC6qrzIQoY3lYnBu5EHKBlEHHcj0M0W8ltPSkD8rqfsQ==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz", + "integrity": "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.22.0", - "@babel/helper-validator-option": "^7.21.0", - "browserslist": "^4.21.3", + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.9", "lru-cache": "^5.1.1", - "semver": "^6.3.0" + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -172,151 +181,151 @@ } }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.1.tgz", - "integrity": "sha512-Z2tgopurB/kTbidvzeBrc2To3PUP/9i5MUe+fU6QJCQDyPwSH2oRapkLw3KGECDYSjhQZCNxEvNvZlLw8JjGwA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", "dev": true, "dependencies": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", - "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", "dev": true, "dependencies": { - "@babel/types": "^7.21.4" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.1.tgz", - "integrity": "sha512-dxAe9E7ySDGbQdCVOY/4+UcD8M9ZFqZcZhSPsPacvCG4M+9lwtDDQfI2EoaSvmf7W/8yCBkGU0m7Pvt1ru3UZw==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", + "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.1", - "@babel/helper-module-imports": "^7.21.4", - "@babel/helper-simple-access": "^7.21.5", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.21.9", - "@babel/traverse": "^7.22.1", - "@babel/types": "^7.22.0" + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz", - "integrity": "sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dev": true, "dependencies": { - "@babel/types": "^7.21.5" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz", - "integrity": "sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.3.tgz", - "integrity": "sha512-jBJ7jWblbgr7r6wYZHMdIqKc73ycaTcCaWRq4/2LpuPHcx7xMlZvpGQkOYc9HeSjn6rcx15CPlgVcBtZ4WZJ2w==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", + "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", "dev": true, "dependencies": { - "@babel/template": "^7.21.9", - "@babel/traverse": "^7.22.1", - "@babel/types": "^7.22.3" + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.6", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", + "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", + "@babel/helper-validator-identifier": "^7.22.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -396,9 +405,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.22.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.4.tgz", - "integrity": "sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA==", + "version": "7.22.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", + "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -408,33 +417,33 @@ } }, "node_modules/@babel/template": { - "version": "7.21.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.21.9.tgz", - "integrity": "sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.21.4", - "@babel/parser": "^7.21.9", - "@babel/types": "^7.21.5" + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.22.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.4.tgz", - "integrity": "sha512-Tn1pDsjIcI+JcLKq1AVlZEr4226gpuAQTsLMorsYg9tuS/kG7nuwwJ4AB8jfQuEgb/COBwR/DqJxmoiYFu5/rQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.22.3", - "@babel/helper-environment-visitor": "^7.22.1", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.22.4", - "@babel/types": "^7.22.4", + "version": "7.22.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", + "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.7", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.7", + "@babel/types": "^7.22.5", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -452,13 +461,13 @@ } }, "node_modules/@babel/types": { - "version": "7.22.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.4.tgz", - "integrity": "sha512-Tx9x3UBHTTsMSW85WB2kphxYQVvrZ/t1FxD88IpSgIjiUJlCm9z+xWIDwyo1vffTwSqteqyznB8ZE9vYYk16zA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", + "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.21.5", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", "to-fast-properties": "^2.0.0" }, "engines": { @@ -501,23 +510,23 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", + "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", - "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.1.tgz", + "integrity": "sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.5.2", + "espree": "^9.6.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -533,9 +542,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.42.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.42.0.tgz", - "integrity": "sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw==", + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.46.0.tgz", + "integrity": "sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -900,9 +909,9 @@ "inBundle": true }, "node_modules/@types/node": { - "version": "20.3.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.3.tgz", - "integrity": "sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==", + "version": "20.4.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.7.tgz", + "integrity": "sha512-bUBrPjEry2QUTsnuEjzjbS7voGWCc30W0qzgMf90GPeDGFRakvrz47ju+oqDAKCXLUCe39u57/ORMl/O/04/9g==", "inBundle": true }, "node_modules/@types/parse-json": { @@ -918,9 +927,9 @@ "inBundle": true }, "node_modules/@types/validator": { - "version": "13.7.17", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.17.tgz", - "integrity": "sha512-aqayTNmeWrZcvnG2MG9eGYI6b7S5fl+yKgPs6bAjOTwPS316R5SxBGKvtSExfyoJU7pIeHJfsHI0Ji41RVMkvQ==", + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.9.0.tgz", + "integrity": "sha512-NclP0IbzHj/4tJZKFqKh8E7kZdgss+MCUYV9G+TLltFfDA4lFgE4PKPpDIyS2FlcdANIfSx273emkupvChigbw==", "inBundle": true }, "node_modules/abbrev": { @@ -943,9 +952,9 @@ } }, "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -1198,7 +1207,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "inBundle": true, + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1223,9 +1232,9 @@ "dev": true }, "node_modules/browserslist": { - "version": "4.21.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz", - "integrity": "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==", + "version": "4.21.10", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", + "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", "dev": true, "funding": [ { @@ -1242,9 +1251,9 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001489", - "electron-to-chromium": "^1.4.411", - "node-releases": "^2.0.12", + "caniuse-lite": "^1.0.30001517", + "electron-to-chromium": "^1.4.477", + "node-releases": "^2.0.13", "update-browserslist-db": "^1.0.11" }, "bin": { @@ -1309,9 +1318,9 @@ } }, "node_modules/caching-transform/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -1349,9 +1358,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001495", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001495.tgz", - "integrity": "sha512-F6x5IEuigtUfU5ZMQK2jsy5JqUUlEFRVZq8bO2a+ysq5K7jD6PPc9YXZj78xDNS3uNchesp1Jw47YXEqr+Viyg==", + "version": "1.0.30001519", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001519.tgz", + "integrity": "sha512-0QHgqR+Jv4bxHMp8kZ1Kn8CH55OikjKJ6JmKkZYP1F3D7w+lnFXF70nG5eNfsZS89jadi5Ywy5UCSKLAglIRkg==", "dev": true, "funding": [ { @@ -1596,7 +1605,7 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "inBundle": true + "dev": true }, "node_modules/config-chain": { "version": "1.1.13", @@ -1719,17 +1728,6 @@ "node": ">=4.0.0" } }, - "node_modules/csvtojson/node_modules/strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", - "dependencies": { - "is-utf8": "^0.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/d": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", @@ -1808,6 +1806,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/default-require-extensions/node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -1938,15 +1945,15 @@ "inBundle": true }, "node_modules/electron-to-chromium": { - "version": "1.4.421", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.421.tgz", - "integrity": "sha512-wZOyn3s/aQOtLGAwXMZfteQPN68kgls2wDAnYOA8kCjBvKVrW5RwmWVspxJYTqrcN7Y263XJVsC66VCIGzDO3g==", + "version": "1.4.484", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.484.tgz", + "integrity": "sha512-nO3ZEomTK2PO/3TUXgEx0A97xZTpKVf4p427lABHuCpT1IQ2N+njVh29DkQkCk6Q4m2wjU+faK4xAcfFndwjvw==", "dev": true }, "node_modules/emittery": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.12.1.tgz", - "integrity": "sha512-pYyW59MIZo0HxPFf+Vb3+gacUu0gxVS3TZwB2ClwkEZywgF9f9OJDoVmNLojTn0vKX3tO9LC+pdQEcLP4Oz/bQ==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "inBundle": true, "engines": { "node": ">=12" @@ -2096,27 +2103,27 @@ } }, "node_modules/eslint": { - "version": "8.42.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.42.0.tgz", - "integrity": "sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A==", + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.46.0.tgz", + "integrity": "sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.3", - "@eslint/js": "8.42.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.1", + "@eslint/js": "^8.46.0", "@humanwhocodes/config-array": "^0.11.10", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.5.2", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.2", + "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -2126,7 +2133,6 @@ "globals": "^13.19.0", "graphemer": "^1.4.0", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", @@ -2136,9 +2142,8 @@ "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", + "optionator": "^0.9.3", "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", "text-table": "^0.2.0" }, "bin": { @@ -2170,9 +2175,9 @@ } }, "node_modules/eslint-scope": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", @@ -2186,9 +2191,9 @@ } }, "node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz", + "integrity": "sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2207,12 +2212,12 @@ } }, "node_modules/espree": { - "version": "9.5.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", - "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "dependencies": { - "acorn": "^8.8.0", + "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.4.1" }, @@ -2497,9 +2502,9 @@ } }, "node_modules/find-cache-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -2633,26 +2638,19 @@ } ] }, - "node_modules/fs-jetpack": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/fs-jetpack/-/fs-jetpack-4.3.1.tgz", - "integrity": "sha512-dbeOK84F6BiQzk2yqqCVwCPWTxAvVGJ3fMQc6E2wuEohS28mR6yHngbrKuVCK1KHRx/ccByDylqu4H5PCP2urQ==", - "inBundle": true, - "dependencies": { - "minimatch": "^3.0.2", - "rimraf": "^2.6.3" - } - }, - "node_modules/fs-jetpack/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "inBundle": true, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, "dependencies": { - "glob": "^7.1.3" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": ">=10" } }, "node_modules/fs.realpath": { @@ -2736,7 +2734,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "inBundle": true, + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -3222,9 +3220,9 @@ } }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -3248,43 +3246,34 @@ } }, "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, "dependencies": { "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", + "make-dir": "^4.0.0", "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, "node_modules/istanbul-lib-report/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "dependencies": { - "semver": "^6.0.0" + "semver": "^7.5.3" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/istanbul-lib-report/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/istanbul-lib-source-maps": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", @@ -3300,9 +3289,9 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", "dev": true, "dependencies": { "html-escaper": "^2.0.0", @@ -3394,21 +3383,6 @@ "node": ">=10" } }, - "node_modules/js-beautify/node_modules/nopt": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", - "dev": true, - "dependencies": { - "abbrev": "^1.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -3469,10 +3443,22 @@ "node": ">=6" } }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/jsonwebtoken": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", - "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.1.tgz", + "integrity": "sha512-K8wx7eJ5TPvEjuiVSkv167EVboBDv9PZdDoF7BgeQnBLVvZWW9clr2PsQHVJDTKaEIH5JBIwHujGcHp7GgI2eg==", "inBundle": true, "dependencies": { "jws": "^3.2.2", @@ -3683,9 +3669,9 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "inBundle": true, "optional": true, "bin": { @@ -3769,7 +3755,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "inBundle": true, + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -4034,9 +4020,9 @@ } }, "node_modules/nise/node_modules/@sinonjs/fake-timers": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.2.0.tgz", - "integrity": "sha512-OPwQlEdg40HAj5KNF8WW6q2KG4Z+cBCZb3m4ninfTZKaBmbIJodviQsDBoYMPHkOyJJMHnOJo5j2+LKDOhOACg==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, "dependencies": { "@sinonjs/commons": "^3.0.0" @@ -4079,9 +4065,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", "dev": true }, "node_modules/nodemon": { @@ -4131,9 +4117,9 @@ } }, "node_modules/nodemon/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { "semver": "bin/semver" @@ -4152,18 +4138,18 @@ } }, "node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", "dev": true, "dependencies": { - "abbrev": "1" + "abbrev": "^1.0.0" }, "bin": { "nopt": "bin/nopt.js" }, "engines": { - "node": "*" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/normalize-path": { @@ -4304,9 +4290,9 @@ } }, "node_modules/nyc/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -4425,12 +4411,12 @@ } }, "node_modules/openid-client": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.4.2.tgz", - "integrity": "sha512-lIhsdPvJ2RneBm3nGBBhQchpe3Uka//xf7WPHTIglery8gnckvW7Bd9IaQzekzXJvWthCMyi/xVEyGW0RFPytw==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.4.3.tgz", + "integrity": "sha512-sVQOvjsT/sbSfYsQI/9liWQGVZH/Pp3rrtlGEwgk/bbHfrUDZ24DN57lAagIwFtuEu+FM9Ev7r85s8S/yPjimQ==", "inBundle": true, "dependencies": { - "jose": "^4.14.1", + "jose": "^4.14.4", "lru-cache": "^6.0.0", "object-hash": "^2.2.0", "oidc-token-hash": "^5.0.3" @@ -4458,17 +4444,17 @@ "inBundle": true }, "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "type-check": "^0.4.0" }, "engines": { "node": ">= 0.8.0" @@ -4607,7 +4593,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "inBundle": true, + "dev": true, "engines": { "node": ">=0.10.0" } @@ -4652,15 +4638,15 @@ } }, "node_modules/pg": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.11.0.tgz", - "integrity": "sha512-meLUVPn2TWgJyLmy7el3fQQVwft4gU5NGyvV0XbD41iU9Jbg8lCH4zexhIkihDzVHJStlt6r088G6/fWeNjhXA==", + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.11.2.tgz", + "integrity": "sha512-l4rmVeV8qTIrrPrIR3kZQqBgSN93331s9i6wiUiLOSk0Q7PmUxZD/m1rQI622l3NfqBby9Ar5PABfS/SulfieQ==", "inBundle": true, "dependencies": { "buffer-writer": "2.0.0", "packet-reader": "1.0.0", - "pg-connection-string": "^2.6.0", - "pg-pool": "^3.6.0", + "pg-connection-string": "^2.6.2", + "pg-pool": "^3.6.1", "pg-protocol": "^1.6.0", "pg-types": "^2.1.0", "pgpass": "1.x" @@ -4669,7 +4655,7 @@ "node": ">= 8.0.0" }, "optionalDependencies": { - "pg-cloudflare": "^1.1.0" + "pg-cloudflare": "^1.1.1" }, "peerDependencies": { "pg-native": ">=3.0.1" @@ -4681,16 +4667,16 @@ } }, "node_modules/pg-cloudflare": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.0.tgz", - "integrity": "sha512-tGM8/s6frwuAIyRcJ6nWcIvd3+3NmUKIs6OjviIm1HPPFEt5MzQDOTBQyhPWg/m0kCl95M6gA1JaIXtS8KovOA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", + "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", "inBundle": true, "optional": true }, "node_modules/pg-connection-string": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.0.tgz", - "integrity": "sha512-x14ibktcwlHKoHxx9X3uTVW9zIGR41ZB6QNhHb21OPNdCCO3NaRnpJuwKIQSR4u+Yqjx4HCvy7Hh7VSy1U4dGg==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.2.tgz", + "integrity": "sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==", "inBundle": true }, "node_modules/pg-int8": { @@ -4703,9 +4689,9 @@ } }, "node_modules/pg-pool": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.0.tgz", - "integrity": "sha512-clFRf2ksqd+F497kWFyM21tMjeikn60oGDmqMT8UBrynEwVEX/5R5xd2sdvdo1cZCFlguORNpVuqxIj+aK4cfQ==", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.1.tgz", + "integrity": "sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==", "inBundle": true, "peerDependencies": { "pg": ">=8.0" @@ -5383,33 +5369,6 @@ "wrap-ansi": "^7.0.0" } }, - "node_modules/sequelize-cli/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/sequelize-cli/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, "node_modules/sequelize-cli/node_modules/umzug": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/umzug/-/umzug-2.3.0.tgz", @@ -5422,15 +5381,6 @@ "node": ">=6.0.0" } }, - "node_modules/sequelize-cli/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/sequelize-cli/node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", @@ -5670,9 +5620,9 @@ } }, "node_modules/spawn-wrap/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -5771,12 +5721,14 @@ } }, "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "dependencies": { + "is-utf8": "^0.2.0" + }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, "node_modules/strip-filename-increment": { @@ -5951,16 +5903,34 @@ "nodetouch": "bin/nodetouch.js" } }, + "node_modules/touch/node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, "node_modules/triple-beam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==", - "inBundle": true + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", + "inBundle": true, + "engines": { + "node": ">= 14.0.0" + } }, "node_modules/tslib": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", + "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", "inBundle": true }, "node_modules/type": { @@ -6025,17 +5995,16 @@ } }, "node_modules/umzug": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/umzug/-/umzug-3.2.1.tgz", - "integrity": "sha512-XyWQowvP9CKZycKc/Zg9SYWrAWX/gJCE799AUTFqk8yC3tp44K1xWr3LoFF0MNEjClKOo1suCr5ASnoy+KltdA==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/umzug/-/umzug-3.3.1.tgz", + "integrity": "sha512-jG3C35jti1YnCuH/k3fJEfHbnIG9c3Q9ITZ0B9eWwnXngh/AUd0mRHv8OdpE2Q9VoK7tB6xL990JrMCr0LtfNA==", "inBundle": true, "dependencies": { "@rushstack/ts-command-line": "^4.12.2", - "emittery": "^0.12.1", - "fs-jetpack": "^4.3.1", + "emittery": "^0.13.0", "glob": "^8.0.3", - "pony-cause": "^2.1.2", - "type-fest": "^2.18.0" + "pony-cause": "^2.1.4", + "type-fest": "^3.0.0" }, "engines": { "node": ">=12" @@ -6082,12 +6051,12 @@ } }, "node_modules/umzug/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", "inBundle": true, "engines": { - "node": ">=12.20" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -6099,6 +6068,15 @@ "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", "dev": true }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -6172,9 +6150,9 @@ } }, "node_modules/validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", "inBundle": true, "engines": { "node": ">= 0.10" @@ -6282,15 +6260,6 @@ "@types/node": "*" } }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/workerpool": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", diff --git a/package.json b/package.json index e6c02860c..fb1e1b6e6 100644 --- a/package.json +++ b/package.json @@ -86,7 +86,7 @@ "lib/", "database/" ], - "bundleDependencies": [ + "bundledDependencies": [ "@aliceo2/web-ui", "deepmerge", "esm", From 7ad9bdaac2596312a6c5fc6188a2f4709bda010a Mon Sep 17 00:00:00 2001 From: Ehevi Date: Fri, 4 Aug 2023 17:27:58 +0200 Subject: [PATCH 02/12] Reuse messagePanel components --- app/public/components/messagePanel/reasons.js | 51 +++++++++++++++++++ app/public/view.js | 9 ++-- app/public/views/serviceUnavailablePanel.js | 27 ---------- app/public/views/sessionErrorPanel.js | 24 --------- app/public/views/userView/data/dataPanel.js | 11 ++-- .../userView/data/fetchingStates/failure.js | 25 --------- .../data/fetchingStates/unknownError.js | 24 --------- 7 files changed, 60 insertions(+), 111 deletions(-) create mode 100644 app/public/components/messagePanel/reasons.js delete mode 100644 app/public/views/serviceUnavailablePanel.js delete mode 100644 app/public/views/sessionErrorPanel.js delete mode 100644 app/public/views/userView/data/fetchingStates/failure.js delete mode 100644 app/public/views/userView/data/fetchingStates/unknownError.js diff --git a/app/public/components/messagePanel/reasons.js b/app/public/components/messagePanel/reasons.js new file mode 100644 index 000000000..8dcfb0c2c --- /dev/null +++ b/app/public/components/messagePanel/reasons.js @@ -0,0 +1,51 @@ +/** + * @license + * Copyright 2019-2020 CERN and copyright holders of ALICE O2. + * See http://alice-o2.web.cern.ch/copyright for details of the copyright holders. + * All rights not expressly granted are reserved. + * + * This software is distributed under the terms of the GNU General Public + * License v3 (GPL Version 3), copied verbatim in the file "COPYING". + * + * In applying this license CERN does not waive the privileges and immunities + * granted to it by virtue of its status as an Intergovernmental Organization + * or submit itself to any jurisdiction. + */ + +import { h } from '/js/src/index.js'; +import messagePanel from './messagePanel.js'; + +const requestButton = (model) => h('button.btn.btn-primary.m3', { + onclick: () => model.fetchedData.reqForData(true), +}, 'Reload'); + +export const failure = (model, status) => messagePanel( + 'no-network-90', + 'Failed to load data', + `The services are unavailable (status: ${status ? status : 'unknown'})`, + requestButton(model), +); + +export const unknown = (model) => messagePanel( + 'unexpected-90', + 'Unknown error', + 'Request could not be handled properly', + requestButton(model), +); + +export const sessionError = (model) => messagePanel( + 'session-timeout-90', + 'Session error', + 'Please retry to login', + h('button.btn.btn-primary.m3', { onclick: () => model.login() }, 'Login'), +); + +export const serviceUnavailable = (model) => messagePanel( + 'no-network-90', + 'Service temporarily unavailable', + 'Please contact the administrator', + h('button.btn.btn-primary.m3', { onclick: async () => await model.login() }, 'Retry'), + h('.notification-content.shadow-level3.bg-danger.white.br2.p2.notification-close', { + id: model.dataAccess.serviceUnavailable.messageFieldId, + }, ''), +); diff --git a/app/public/view.js b/app/public/view.js index 9fb758c27..1b8acf26d 100644 --- a/app/public/view.js +++ b/app/public/view.js @@ -13,17 +13,16 @@ */ import dataAccessPanel from './views/dataAccessPanel.js'; -import serviceUnavailablePanel from './views/serviceUnavailablePanel.js'; -import sessionErrorPanel from './views/sessionErrorPanel.js'; -import waitingPanel from './views/waitingPanel.js'; import { switchCase } from '/js/src/index.js'; +import { serviceUnavailable, sessionError } from './components/messagePanel/reasons.js'; +import waitingPanel from './views/waitingPanel.js'; export default function view(model) { const { state } = model.dataAccess; return switchCase(state, { - serviceUnavailable: () => serviceUnavailablePanel(model), - sessionError: () => sessionErrorPanel(model), + serviceUnavailable: () => serviceUnavailable(model), + sessionError: () => sessionError(model), dataAccess: () => dataAccessPanel(model), }, () => waitingPanel())(); } diff --git a/app/public/views/serviceUnavailablePanel.js b/app/public/views/serviceUnavailablePanel.js deleted file mode 100644 index c2defe9c6..000000000 --- a/app/public/views/serviceUnavailablePanel.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * @license - * Copyright 2019-2020 CERN and copyright holders of ALICE O2. - * See http://alice-o2.web.cern.ch/copyright for details of the copyright holders. - * All rights not expressly granted are reserved. - * - * This software is distributed under the terms of the GNU General Public - * License v3 (GPL Version 3), copied verbatim in the file "COPYING". - * - * In applying this license CERN does not waive the privileges and immunities - * granted to it by virtue of its status as an Intergovernmental Organization - * or submit itself to any jurisdiction. - */ - -import { h } from '/js/src/index.js'; -import messagePanel from '../components/messagePanel/messagePanel.js'; - -export default function serviceUnavailablePanel(model) { - const retryBtn = h('button.btn.btn-primary.m3', { onclick: async () => await model.login() }, 'Retry'); - const reason = 'Service temporarily unavailable'; - const message = 'Please contact the administrator'; - const notification = h('.notification-content.shadow-level3.bg-danger.white.br2.p2.notification-close', { - id: model.dataAccess.serviceUnavailable.messageFieldId, - }, ''); - - return messagePanel('no-network-90', reason, message, retryBtn, notification); -} diff --git a/app/public/views/sessionErrorPanel.js b/app/public/views/sessionErrorPanel.js deleted file mode 100644 index 6b5fec66f..000000000 --- a/app/public/views/sessionErrorPanel.js +++ /dev/null @@ -1,24 +0,0 @@ -/** - * @license - * Copyright 2019-2020 CERN and copyright holders of ALICE O2. - * See http://alice-o2.web.cern.ch/copyright for details of the copyright holders. - * All rights not expressly granted are reserved. - * - * This software is distributed under the terms of the GNU General Public - * License v3 (GPL Version 3), copied verbatim in the file "COPYING". - * - * In applying this license CERN does not waive the privileges and immunities - * granted to it by virtue of its status as an Intergovernmental Organization - * or submit itself to any jurisdiction. - */ - -import { h } from '/js/src/index.js'; -import messagePanel from '../components/messagePanel/messagePanel.js'; - -export default function sessionErrorPanel(model) { - const retryBtn = h('button.btn.btn-primary.m3', { onclick: () => model.login() }, 'Login'); - const reason = 'Session error'; - const message = 'Please retry to login'; - - return messagePanel('session-timeout-90', reason, message, retryBtn); -} diff --git a/app/public/views/userView/data/dataPanel.js b/app/public/views/userView/data/dataPanel.js index 9c227f2f4..a560d8a60 100644 --- a/app/public/views/userView/data/dataPanel.js +++ b/app/public/views/userView/data/dataPanel.js @@ -13,12 +13,11 @@ */ import tablePanel from './table/tablePanel.js'; -import failureStatusAndReload from './fetchingStates/failure.js'; -import unknownError from './fetchingStates/unknownError.js'; -import { RCT } from '../../../config.js'; import flagsPanel from '../../flags/overview/flagsPanel.js'; import { default as runsPerDataPassPanel } from '../../runs/runsPerDataPass/overview/panel.js'; import waitingPanel from '../../waitingPanel.js'; +import { failure, unknown } from '../../../components/messagePanel/reasons.js'; +import { RCT } from '../../../config.js'; const { pageNames } = RCT; /** @@ -32,7 +31,7 @@ export default function dataPanel(model, runs, detectors, flags) { const data = model.fetchedData[page][index]; return data ? data.match({ - NotAsked: () => unknownError(model), + NotAsked: () => unknown(model), Loading: () => waitingPanel(), Success: () => { switch (page) { @@ -44,6 +43,6 @@ export default function dataPanel(model, runs, detectors, flags) { return tablePanel(model, runs, detectors); } }, - Failure: (status) => failureStatusAndReload(model, status), - }) : unknownError(model); + Failure: (status) => failure(model, status), + }) : unknown(model); } diff --git a/app/public/views/userView/data/fetchingStates/failure.js b/app/public/views/userView/data/fetchingStates/failure.js deleted file mode 100644 index b29762152..000000000 --- a/app/public/views/userView/data/fetchingStates/failure.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * @license - * Copyright 2019-2020 CERN and copyright holders of ALICE O2. - * See http://alice-o2.web.cern.ch/copyright for details of the copyright holders. - * All rights not expressly granted are reserved. - * - * This software is distributed under the terms of the GNU General Public - * License v3 (GPL Version 3), copied verbatim in the file "COPYING". - * - * In applying this license CERN does not waive the privileges and immunities - * granted to it by virtue of its status as an Intergovernmental Organization - * or submit itself to any jurisdiction. - */ - -import { h } from '/js/src/index.js'; -import messagePanel from '../../../../components/messagePanel/messagePanel.js'; - -export default function failureStatusAndReload(model, status) { - return messagePanel( - 'no-network-90', - 'Failed to load data', - `The services are unavailable (status: ${status ? status : 'unknown'})`, - h('button.btn.btn-primary.m3', { onclick: () => model.fetchedData.reqForData() }, 'Reload'), - ); -} diff --git a/app/public/views/userView/data/fetchingStates/unknownError.js b/app/public/views/userView/data/fetchingStates/unknownError.js deleted file mode 100644 index 3abfe3077..000000000 --- a/app/public/views/userView/data/fetchingStates/unknownError.js +++ /dev/null @@ -1,24 +0,0 @@ -/** - * @license - * Copyright 2019-2020 CERN and copyright holders of ALICE O2. - * See http://alice-o2.web.cern.ch/copyright for details of the copyright holders. - * All rights not expressly granted are reserved. - * - * This software is distributed under the terms of the GNU General Public - * License v3 (GPL Version 3), copied verbatim in the file "COPYING". - * - * In applying this license CERN does not waive the privileges and immunities - * granted to it by virtue of its status as an Intergovernmental Organization - * or submit itself to any jurisdiction. - */ - -import { h } from '/js/src/index.js'; -import messagePanel from '../../../../components/messagePanel/messagePanel.js'; - -export default function unknownError(model) { - const reloadButton = h('button.btn.btn-primary.m3', { onclick: () => model.fetchedData.reqForData(true) }, 'Reload'); - const reason = 'Unknown error'; - const message = 'Request could not be handled properly'; - - return messagePanel('unexpected-90', reason, message, reloadButton); -} From 8d3a031eaaf88584577f26a9d081e6eae143351c Mon Sep 17 00:00:00 2001 From: Ehevi Date: Fri, 4 Aug 2023 17:43:10 +0200 Subject: [PATCH 03/12] Remove viewButton components --- app/public/components/common/viewButton.js | 47 ---------------------- app/public/components/table/pager.js | 22 +++------- 2 files changed, 5 insertions(+), 64 deletions(-) delete mode 100644 app/public/components/common/viewButton.js diff --git a/app/public/components/common/viewButton.js b/app/public/components/common/viewButton.js deleted file mode 100644 index 653b66696..000000000 --- a/app/public/components/common/viewButton.js +++ /dev/null @@ -1,47 +0,0 @@ -/** - * @license - * Copyright 2019-2020 CERN and copyright holders of ALICE O2. - * See http://alice-o2.web.cern.ch/copyright for details of the copyright holders. - * All rights not expressly granted are reserved. - * - * This software is distributed under the terms of the GNU General Public - * License v3 (GPL Version 3), copied verbatim in the file "COPYING". - * - * In applying this license CERN does not waive the privileges and immunities - * granted to it by virtue of its status as an Intergovernmental Organization - * or submit itself to any jurisdiction. - */ - -import { h } from '/js/src/index.js'; - -export default function viewButton( - model, - label, - onclickAction, - id = '', - href = undefined, - classes = '', - margin = '.m1', - forceButton = false, -) { - let buttonType = `.btn${classes}${margin}`; - - if (model.router && href !== undefined) { - const url = model.router.getUrl(); - if (href === url.pathname + url.search || href['href'] && href.href === url.href) { - buttonType += ' highlight-blue'; - } - } - - if (typeof href !== 'undefined' && !forceButton) { - return h(`a${buttonType}.no-text-decoration`, { - id: id, - onclick: onclickAction, - href: href, - }, label); - } - return h(`button${buttonType}`, { - id: id, - onclick: onclickAction, - }, label); -} diff --git a/app/public/components/table/pager.js b/app/public/components/table/pager.js index 4ce844dce..94c95be40 100644 --- a/app/public/components/table/pager.js +++ b/app/public/components/table/pager.js @@ -12,8 +12,6 @@ * or submit itself to any jurisdiction. */ -import viewButton from '../common/viewButton.js'; -import { replaceUrlParams } from '../../utils/url/urlUtils.js'; import { h, iconChevronBottom } from '/js/src/index.js'; import itemsCounter from '../../views/userView/data/table/items-counter.js'; import { RCT } from '../../config.js'; @@ -25,21 +23,11 @@ export default function pager(model, data, pagerOnly = true) { const currentSite = Number(Object.fromEntries(data.url.searchParams.entries())[site]); const columnOptionsSelectId = 'columns-option-select-id'; - const pageButton = (targetSite) => { - const url = replaceUrlParams(data.url, { [RCT.dataReqParams.site]: targetSite }); - return viewButton( - model, - targetSite, - () => model.fetchedData.changePage(targetSite), - '', - url.pathname + url.search, - `.btn${targetSite === currentSite ? '.btn-primary' : '.btn-secondary'}`, - '', - true, - ); - }; - - const siteChangingController = (targetSite, content) => h('a.btn.btn-secondary.site-changing-controller', { + const pageButton = (targetSite) => h(`button.btn${targetSite === currentSite ? '.btn-primary' : '.btn-secondary'}.no-text-decoration`, { + onclick: () => model.fetchedData.changePage(targetSite), + }, targetSite); + + const siteChangingController = (targetSite, content) => h('button.btn.btn-secondary.site-changing-controller', { onclick: () => model.fetchedData.changePage(targetSite), }, content); From cf8f0eba48611ac26b97474d45d11bc4a979d1b4 Mon Sep 17 00:00:00 2001 From: Ehevi Date: Fri, 4 Aug 2023 17:49:27 +0200 Subject: [PATCH 04/12] Cleanup :broom: --- app/public/components/messagePanel/reasons.js | 12 +++++++++ app/public/view.js | 5 ++-- app/public/views/userView/data/dataPanel.js | 5 ++-- app/public/views/waitingPanel.js | 26 ------------------- 4 files changed, 16 insertions(+), 32 deletions(-) delete mode 100644 app/public/views/waitingPanel.js diff --git a/app/public/components/messagePanel/reasons.js b/app/public/components/messagePanel/reasons.js index 8dcfb0c2c..ed5af465e 100644 --- a/app/public/components/messagePanel/reasons.js +++ b/app/public/components/messagePanel/reasons.js @@ -14,6 +14,7 @@ import { h } from '/js/src/index.js'; import messagePanel from './messagePanel.js'; +import spinner from '../common/spinner.js'; const requestButton = (model) => h('button.btn.btn-primary.m3', { onclick: () => model.fetchedData.reqForData(true), @@ -49,3 +50,14 @@ export const serviceUnavailable = (model) => messagePanel( id: model.dataAccess.serviceUnavailable.messageFieldId, }, ''), ); + +export const waiting = () => { + const retryButton = h('button.btn.btn-primary.m3', { onclick: () => document.location.reload(true) }, 'Retry'); + const loadingMessage = h('h3', 'Loading...'); + + return h('.panel.abs-center', + spinner(), + loadingMessage, + retryButton + ); +} diff --git a/app/public/view.js b/app/public/view.js index 1b8acf26d..1fd9355da 100644 --- a/app/public/view.js +++ b/app/public/view.js @@ -14,8 +14,7 @@ import dataAccessPanel from './views/dataAccessPanel.js'; import { switchCase } from '/js/src/index.js'; -import { serviceUnavailable, sessionError } from './components/messagePanel/reasons.js'; -import waitingPanel from './views/waitingPanel.js'; +import { serviceUnavailable, sessionError, waiting } from './components/messagePanel/reasons.js'; export default function view(model) { const { state } = model.dataAccess; @@ -24,5 +23,5 @@ export default function view(model) { serviceUnavailable: () => serviceUnavailable(model), sessionError: () => sessionError(model), dataAccess: () => dataAccessPanel(model), - }, () => waitingPanel())(); + }, () => waiting())(); } diff --git a/app/public/views/userView/data/dataPanel.js b/app/public/views/userView/data/dataPanel.js index a560d8a60..2c65c7176 100644 --- a/app/public/views/userView/data/dataPanel.js +++ b/app/public/views/userView/data/dataPanel.js @@ -15,8 +15,7 @@ import tablePanel from './table/tablePanel.js'; import flagsPanel from '../../flags/overview/flagsPanel.js'; import { default as runsPerDataPassPanel } from '../../runs/runsPerDataPass/overview/panel.js'; -import waitingPanel from '../../waitingPanel.js'; -import { failure, unknown } from '../../../components/messagePanel/reasons.js'; +import { failure, unknown, waiting } from '../../../components/messagePanel/reasons.js'; import { RCT } from '../../../config.js'; const { pageNames } = RCT; @@ -32,7 +31,7 @@ export default function dataPanel(model, runs, detectors, flags) { return data ? data.match({ NotAsked: () => unknown(model), - Loading: () => waitingPanel(), + Loading: () => waiting(), Success: () => { switch (page) { case pageNames.flags: diff --git a/app/public/views/waitingPanel.js b/app/public/views/waitingPanel.js deleted file mode 100644 index 1a27840be..000000000 --- a/app/public/views/waitingPanel.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * @license - * Copyright 2019-2020 CERN and copyright holders of ALICE O2. - * See http://alice-o2.web.cern.ch/copyright for details of the copyright holders. - * All rights not expressly granted are reserved. - * - * This software is distributed under the terms of the GNU General Public - * License v3 (GPL Version 3), copied verbatim in the file "COPYING". - * - * In applying this license CERN does not waive the privileges and immunities - * granted to it by virtue of its status as an Intergovernmental Organization - * or submit itself to any jurisdiction. - */ - -import { h } from '/js/src/index.js'; -import spinner from '../components/common/spinner.js'; - -export default function waitingPanel() { - const reloadBtn = h('button.btn.btn-primary.m3', { onclick: () => document.location.reload(true) }, 'Retry'); - const loadingMessage = h('h3', 'Loading...'); - - return h('.panel.abs-center', - spinner(), - loadingMessage, - reloadBtn); -} From 488065baa9fdf9802f67e2428f6c4acd65934e88 Mon Sep 17 00:00:00 2001 From: Ehevi Date: Tue, 8 Aug 2023 14:51:48 +0200 Subject: [PATCH 05/12] Apply eslint rules :sparkles: --- app/public/components/messagePanel/reasons.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/public/components/messagePanel/reasons.js b/app/public/components/messagePanel/reasons.js index ed5af465e..b15cf674d 100644 --- a/app/public/components/messagePanel/reasons.js +++ b/app/public/components/messagePanel/reasons.js @@ -58,6 +58,5 @@ export const waiting = () => { return h('.panel.abs-center', spinner(), loadingMessage, - retryButton - ); -} + retryButton); +}; From a8ca4523efbe5a59ab034cef7f4c8b8d47395f0d Mon Sep 17 00:00:00 2001 From: Ehevi Date: Tue, 8 Aug 2023 14:59:42 +0200 Subject: [PATCH 06/12] Remove unnecessary functions :broom: --- .../views/userView/data/table/noDataView.js | 31 ++----------------- 1 file changed, 2 insertions(+), 29 deletions(-) diff --git a/app/public/views/userView/data/table/noDataView.js b/app/public/views/userView/data/table/noDataView.js index b86b8102c..645108db9 100644 --- a/app/public/views/userView/data/table/noDataView.js +++ b/app/public/views/userView/data/table/noDataView.js @@ -16,40 +16,15 @@ import { h } from '/js/src/index.js'; import { RCT } from '../../../../config.js'; const { pageNames } = RCT; -function useState(defaultValue) { - let value = defaultValue; - - function getValue() { - return value; - } - - function setValue(newValue) { - value = newValue; - } - - return [getValue, setValue]; -} - -const modes = { - requested: 0, - waiting: 1, -}; export default function noDataView(model, dataPointer, anyFiltersActive) { - const [mode, setMode] = useState(modes.waiting); - const goBackBtn = h('button.btn.btn-primary.m3', { onclick: () => model.removeCurrentData(), }, 'Go back'); const reloadBtn = h('button.btn.btn-primary.m3', { onclick: async () => { - if (mode() === modes.waiting) { - await model.sync(); - } else { - model.fetchedData.reqForData(true); - } - setMode(modes.requested); + model.fetchedData.reqForData(true); }, }, 'Reload'); @@ -94,8 +69,6 @@ export default function noDataView(model, dataPointer, anyFiltersActive) { return anyFiltersActive ? noMatchingDataView : dataPointer.page === pageNames.periods - ? mode() === modes.requested - ? 'loading' - : noPeriodsView + ? noPeriodsView : noDataView; } From 7c40a2fc9343c0a34a7775740ce9b031d39e3c0d Mon Sep 17 00:00:00 2001 From: Ehevi Date: Tue, 8 Aug 2023 15:02:01 +0200 Subject: [PATCH 07/12] Apply eslint rules :sparkles: --- app/public/views/userView/data/table/noDataView.js | 1 - 1 file changed, 1 deletion(-) diff --git a/app/public/views/userView/data/table/noDataView.js b/app/public/views/userView/data/table/noDataView.js index 645108db9..6c15f8dde 100644 --- a/app/public/views/userView/data/table/noDataView.js +++ b/app/public/views/userView/data/table/noDataView.js @@ -16,7 +16,6 @@ import { h } from '/js/src/index.js'; import { RCT } from '../../../../config.js'; const { pageNames } = RCT; - export default function noDataView(model, dataPointer, anyFiltersActive) { const goBackBtn = h('button.btn.btn-primary.m3', { onclick: () => model.removeCurrentData(), From 9759490e876f37b4b1b6ff881b73216d8eca55ad Mon Sep 17 00:00:00 2001 From: Ehevi Date: Tue, 8 Aug 2023 15:04:13 +0200 Subject: [PATCH 08/12] Rename reasons to messages --- app/public/components/messagePanel/{reasons.js => messages.js} | 0 app/public/view.js | 2 +- app/public/views/userView/data/dataPanel.js | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename app/public/components/messagePanel/{reasons.js => messages.js} (100%) diff --git a/app/public/components/messagePanel/reasons.js b/app/public/components/messagePanel/messages.js similarity index 100% rename from app/public/components/messagePanel/reasons.js rename to app/public/components/messagePanel/messages.js diff --git a/app/public/view.js b/app/public/view.js index 1fd9355da..0b76086b0 100644 --- a/app/public/view.js +++ b/app/public/view.js @@ -14,7 +14,7 @@ import dataAccessPanel from './views/dataAccessPanel.js'; import { switchCase } from '/js/src/index.js'; -import { serviceUnavailable, sessionError, waiting } from './components/messagePanel/reasons.js'; +import { serviceUnavailable, sessionError, waiting } from './components/messagePanel/messages.js'; export default function view(model) { const { state } = model.dataAccess; diff --git a/app/public/views/userView/data/dataPanel.js b/app/public/views/userView/data/dataPanel.js index 2c65c7176..95e75e080 100644 --- a/app/public/views/userView/data/dataPanel.js +++ b/app/public/views/userView/data/dataPanel.js @@ -15,7 +15,7 @@ import tablePanel from './table/tablePanel.js'; import flagsPanel from '../../flags/overview/flagsPanel.js'; import { default as runsPerDataPassPanel } from '../../runs/runsPerDataPass/overview/panel.js'; -import { failure, unknown, waiting } from '../../../components/messagePanel/reasons.js'; +import { failure, unknown, waiting } from '../../../components/messagePanel/messages.js'; import { RCT } from '../../../config.js'; const { pageNames } = RCT; From f8c3042e27c8faacdd22588f52cfdc28b1fd89aa Mon Sep 17 00:00:00 2001 From: Ehevi Date: Tue, 8 Aug 2023 15:07:47 +0200 Subject: [PATCH 09/12] bundleDependencies --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fb1e1b6e6..e6c02860c 100644 --- a/package.json +++ b/package.json @@ -86,7 +86,7 @@ "lib/", "database/" ], - "bundledDependencies": [ + "bundleDependencies": [ "@aliceo2/web-ui", "deepmerge", "esm", From 038a4b5290acadaaab722646acac821e2ee8040f Mon Sep 17 00:00:00 2001 From: Ehevi Date: Tue, 8 Aug 2023 15:44:12 +0200 Subject: [PATCH 10/12] Organize user messages --- .../components/messagePanel/messages.js | 31 +++ .../runs/runsPerDataPass/overview/content.js | 6 +- .../views/userView/data/table/noDataView.js | 58 +---- .../views/userView/data/table/tablePanel.js | 6 +- package-lock.json | 227 +++++++++++------- 5 files changed, 187 insertions(+), 141 deletions(-) diff --git a/app/public/components/messagePanel/messages.js b/app/public/components/messagePanel/messages.js index b15cf674d..dbca32084 100644 --- a/app/public/components/messagePanel/messages.js +++ b/app/public/components/messagePanel/messages.js @@ -16,10 +16,17 @@ import { h } from '/js/src/index.js'; import messagePanel from './messagePanel.js'; import spinner from '../common/spinner.js'; +const goBack = 'Go back'; +const nothingFound = 'Nothing found'; + const requestButton = (model) => h('button.btn.btn-primary.m3', { onclick: () => model.fetchedData.reqForData(true), }, 'Reload'); +const removeCurrentDataButton = (model, label) => h('button.btn.btn-primary.m3', { + onclick: () => model.removeCurrentData(), +}, label); + export const failure = (model, status) => messagePanel( 'no-network-90', 'Failed to load data', @@ -51,6 +58,30 @@ export const serviceUnavailable = (model) => messagePanel( }, ''), ); +export const noMatchingData = (model, page) => messagePanel( + 'nothing-found-90', + nothingFound, + 'There is no data that matches your request', + [ + h('button.btn.btn-secondary.m3', { + onclick: () => { + model.navigation.goToDefaultPageUrl(page); + }, + }, 'Clear filters'), + removeCurrentDataButton(model, goBack), + ], +); + +export const noDataFound = (model) => messagePanel( + 'nothing-found-90', + nothingFound, + 'There is no data to be displayed here', + [ + removeCurrentDataButton(model, goBack), + requestButton(model), + ], +); + export const waiting = () => { const retryButton = h('button.btn.btn-primary.m3', { onclick: () => document.location.reload(true) }, 'Retry'); const loadingMessage = h('h3', 'Loading...'); diff --git a/app/public/views/runs/runsPerDataPass/overview/content.js b/app/public/views/runs/runsPerDataPass/overview/content.js index b4776041b..ee4964eb5 100644 --- a/app/public/views/runs/runsPerDataPass/overview/content.js +++ b/app/public/views/runs/runsPerDataPass/overview/content.js @@ -27,7 +27,7 @@ import downloadCSV from '../../../../utils/csvExport.js'; import filter from '../../../userView/data/table/filtering/filter.js'; import activeFilters from '../../../userView/data/table/filtering/activeFilters.js'; import sortingRow from '../../../userView/data/table/sortingRow.js'; -import noDataView from '../../../userView/data/table/noDataView.js'; +import { noMatchingData, noDataFound } from '../../../../components/messagePanel/messages.js'; import noSubPageSelected from '../../../userView/data/table/noSubPageSelected.js'; import copyLinkButton from '../../../../components/buttons/copyLinkButton.js'; import { modalIds, showModal } from '../../../modal/modal.js'; @@ -103,7 +103,9 @@ export default function content(model, runs, detectors) { ]), data.rows.length > 15 ? pager(model, data) : '')) : '' - : noDataView(model, dataPointer, anyFiltersActive(url)), + : anyFiltersActive(url) + ? noMatchingData(model, dataPointer.page) + : noDataFound(model), ]); } diff --git a/app/public/views/userView/data/table/noDataView.js b/app/public/views/userView/data/table/noDataView.js index 6c15f8dde..df31b4f7f 100644 --- a/app/public/views/userView/data/table/noDataView.js +++ b/app/public/views/userView/data/table/noDataView.js @@ -12,62 +12,10 @@ * or submit itself to any jurisdiction. */ -import { h } from '/js/src/index.js'; -import { RCT } from '../../../../config.js'; -const { pageNames } = RCT; +import { noMatchingData, noDataFound } from '../../../../components/messagePanel/messages.js'; export default function noDataView(model, dataPointer, anyFiltersActive) { - const goBackBtn = h('button.btn.btn-primary.m3', { - onclick: () => model.removeCurrentData(), - }, 'Go back'); - - const reloadBtn = h('button.btn.btn-primary.m3', { - onclick: async () => { - model.fetchedData.reqForData(true); - }, - }, 'Reload'); - - const clearFiltersBtn = h('button.btn.btn-secondary.m3', { - onclick: () => { - model.navigation.goToDefaultPageUrl(dataPointer.page); - }, - }, 'Clear filters'); - - const noDataMessage = h('h3', 'Nothing found'); - const noDataExplanation = h('h5', `${ - anyFiltersActive - ? 'There is no data that matches your request' - : dataPointer.page === pageNames.periods - ? 'Please synchronize with outer services' - : 'There is no data to be displayed here' - }`); - - const noPeriodsView = h('.panel.top-100', [ - h('.synchronize-90'), - noDataMessage, - noDataExplanation, - reloadBtn, - ]); - - const noDataView = h('.panel.top-100', [ - h('.nothing-found-90'), - noDataMessage, - noDataExplanation, - goBackBtn, - ]); - - const noMatchingDataView = h('.panel.top-100', [ - h('.nothing-found-90'), - noDataMessage, - noDataExplanation, - h('.flex-row', - clearFiltersBtn, - goBackBtn), - ]); - return anyFiltersActive - ? noMatchingDataView - : dataPointer.page === pageNames.periods - ? noPeriodsView - : noDataView; + ? noMatchingData(model, dataPointer.page) + : noDataFound(model); } diff --git a/app/public/views/userView/data/table/tablePanel.js b/app/public/views/userView/data/table/tablePanel.js index cfe13490b..4d872b14c 100644 --- a/app/public/views/userView/data/table/tablePanel.js +++ b/app/public/views/userView/data/table/tablePanel.js @@ -21,7 +21,7 @@ import pager from '../../../../components/table/pager.js'; import filter from './filtering/filter.js'; import activeFilters from './filtering/activeFilters.js'; -import noDataView from './noDataView.js'; +import { noDataFound, noMatchingData } from '../../../../components/messagePanel/messages.js'; import { RCT } from '../../../../config.js'; import sortingRow from './sortingRow.js'; @@ -111,7 +111,9 @@ export default function tablePanel(model, runs, detectors) { ]), data.rows.length > 15 ? pager(model, data) : '')) : '' - : noDataView(model, dataPointer, anyFiltersActive(url)), + : anyFiltersActive(url) + ? noMatchingData(model, dataPointer.page) + : noDataFound(model), ]) : noSubPageSelected(model); } diff --git a/package-lock.json b/package-lock.json index c5cddf36f..6dedd6f76 100644 --- a/package-lock.json +++ b/package-lock.json @@ -87,17 +87,89 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.10.tgz", + "integrity": "sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==", "dev": true, "dependencies": { - "@babel/highlight": "^7.22.5" + "@babel/highlight": "^7.22.10", + "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/compat-data": { "version": "7.22.9", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", @@ -108,21 +180,21 @@ } }, "node_modules/@babel/core": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", - "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.10.tgz", + "integrity": "sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.9", + "@babel/code-frame": "^7.22.10", + "@babel/generator": "^7.22.10", + "@babel/helper-compilation-targets": "^7.22.10", "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.6", - "@babel/parser": "^7.22.7", + "@babel/helpers": "^7.22.10", + "@babel/parser": "^7.22.10", "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.8", - "@babel/types": "^7.22.5", + "@babel/traverse": "^7.22.10", + "@babel/types": "^7.22.10", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -147,12 +219,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", - "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", + "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5", + "@babel/types": "^7.22.10", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -162,9 +234,9 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz", - "integrity": "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", + "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", "dev": true, "dependencies": { "@babel/compat-data": "^7.22.9", @@ -175,9 +247,6 @@ }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { @@ -306,27 +375,27 @@ } }, "node_modules/@babel/helpers": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", - "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.10.tgz", + "integrity": "sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw==", "dev": true, "dependencies": { "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.6", - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.22.10", + "@babel/types": "^7.22.10" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.10.tgz", + "integrity": "sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "engines": { @@ -405,9 +474,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", - "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.10.tgz", + "integrity": "sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -431,19 +500,19 @@ } }, "node_modules/@babel/traverse": { - "version": "7.22.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", - "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.10.tgz", + "integrity": "sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.7", + "@babel/code-frame": "^7.22.10", + "@babel/generator": "^7.22.10", "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-function-name": "^7.22.5", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/types": "^7.22.5", + "@babel/parser": "^7.22.10", + "@babel/types": "^7.22.10", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -461,9 +530,9 @@ } }, "node_modules/@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.10.tgz", + "integrity": "sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", @@ -721,9 +790,9 @@ } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", "dev": true, "engines": { "node": ">=6.0.0" @@ -745,21 +814,15 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -802,9 +865,9 @@ "dev": true }, "node_modules/@rushstack/ts-command-line": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.15.1.tgz", - "integrity": "sha512-EL4jxZe5fhb1uVL/P/wQO+Z8Rc8FMiWJ1G7VgnPDvdIt5GVjRfK7vwzder1CZQiX3x0PY6uxENYLNGTFd1InRQ==", + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.15.2.tgz", + "integrity": "sha512-5+C2uoJY8b+odcZD6coEe2XNC4ZjGB4vCMESbqW/8DHRWC/qIHfANdmN9F1wz/lAgxz72i7xRoVtPY2j7e4gpQ==", "inBundle": true, "dependencies": { "@types/argparse": "1.0.38", @@ -909,9 +972,9 @@ "inBundle": true }, "node_modules/@types/node": { - "version": "20.4.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.7.tgz", - "integrity": "sha512-bUBrPjEry2QUTsnuEjzjbS7voGWCc30W0qzgMf90GPeDGFRakvrz47ju+oqDAKCXLUCe39u57/ORMl/O/04/9g==", + "version": "20.4.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.8.tgz", + "integrity": "sha512-0mHckf6D2DiIAzh8fM8f3HQCvMKDpK94YQ0DSVkfWTG9BZleYIWudw9cJxX8oCk9bM+vAkDyujDV6dmKHbvQpg==", "inBundle": true }, "node_modules/@types/parse-json": { @@ -927,9 +990,9 @@ "inBundle": true }, "node_modules/@types/validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-NclP0IbzHj/4tJZKFqKh8E7kZdgss+MCUYV9G+TLltFfDA4lFgE4PKPpDIyS2FlcdANIfSx273emkupvChigbw==", + "version": "13.11.1", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.11.1.tgz", + "integrity": "sha512-d/MUkJYdOeKycmm75Arql4M5+UuXmf4cHdHKsyw1GcvnNgL6s77UkgSgJ8TE/rI5PYsnwYq5jkcWBLuN/MpQ1A==", "inBundle": true }, "node_modules/abbrev": { @@ -1945,9 +2008,9 @@ "inBundle": true }, "node_modules/electron-to-chromium": { - "version": "1.4.484", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.484.tgz", - "integrity": "sha512-nO3ZEomTK2PO/3TUXgEx0A97xZTpKVf4p427lABHuCpT1IQ2N+njVh29DkQkCk6Q4m2wjU+faK4xAcfFndwjvw==", + "version": "1.4.487", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.487.tgz", + "integrity": "sha512-XbCRs/34l31np/p33m+5tdBrdXu9jJkZxSbNxj5I0H1KtV2ZMSB+i/HYqDiRzHaFx2T5EdytjoBRe8QRJE2vQg==", "dev": true }, "node_modules/emittery": { @@ -3047,9 +3110,9 @@ } }, "node_modules/is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -3514,9 +3577,9 @@ "inBundle": true }, "node_modules/less": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", - "integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", + "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==", "inBundle": true, "dependencies": { "copy-anything": "^2.0.1", @@ -5065,12 +5128,12 @@ "dev": true }, "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", "dev": true, "dependencies": { - "is-core-module": "^2.11.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, From 3b098a0766ec8c3e8a8dafc52e4f9fcf5c74d102 Mon Sep 17 00:00:00 2001 From: Ehevi Date: Tue, 8 Aug 2023 16:33:36 +0200 Subject: [PATCH 11/12] No subpage selected view --- app/public/components/messagePanel/messages.js | 7 +++++++ app/public/views/userView/data/table/noSubPageSelected.js | 3 ++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/app/public/components/messagePanel/messages.js b/app/public/components/messagePanel/messages.js index dbca32084..c89689df2 100644 --- a/app/public/components/messagePanel/messages.js +++ b/app/public/components/messagePanel/messages.js @@ -82,6 +82,13 @@ export const noDataFound = (model) => messagePanel( ], ); +export const nothingSelected = (model) => messagePanel( + 'nothing-found-90', + 'No subpage selected', + 'Please select any of the subpages', + removeCurrentDataButton(model, goBack), +); + export const waiting = () => { const retryButton = h('button.btn.btn-primary.m3', { onclick: () => document.location.reload(true) }, 'Retry'); const loadingMessage = h('h3', 'Loading...'); diff --git a/app/public/views/userView/data/table/noSubPageSelected.js b/app/public/views/userView/data/table/noSubPageSelected.js index 7ce4cf1de..6f8430676 100644 --- a/app/public/views/userView/data/table/noSubPageSelected.js +++ b/app/public/views/userView/data/table/noSubPageSelected.js @@ -16,6 +16,7 @@ import { h } from '/js/src/index.js'; import { defaultIndexString } from '../../../../utils/defaults.js'; import indexChip from '../../../../components/chips/indexChip.js'; import title from '../../../../components/table/title.js'; +import { nothingSelected } from '../../../../components/messagePanel/messages.js'; export default function noSubPageSelected(model) { const dataPointer = model.getCurrentDataPointer(); @@ -30,6 +31,6 @@ export default function noSubPageSelected(model) { title(dataPointer.page), chips)), - 'Please select any of the subpages', + nothingSelected(model), ]); } From e4a3c96a8fa8d586043fe13522bd6018f1c9d2ec Mon Sep 17 00:00:00 2001 From: Ehevi Date: Tue, 8 Aug 2023 16:41:41 +0200 Subject: [PATCH 12/12] Remove pageSettings from the main page content --- app/public/views/flags/overview/flagsContent.js | 6 +----- app/public/views/runs/runsPerDataPass/overview/content.js | 6 +----- app/public/views/userView/data/flagsDataPanel.js | 6 +----- app/public/views/userView/data/table/tablePanel.js | 6 +----- 4 files changed, 4 insertions(+), 20 deletions(-) diff --git a/app/public/views/flags/overview/flagsContent.js b/app/public/views/flags/overview/flagsContent.js index 50be72c0d..7ae1ea20c 100644 --- a/app/public/views/flags/overview/flagsContent.js +++ b/app/public/views/flags/overview/flagsContent.js @@ -21,7 +21,6 @@ import flagBreadCrumbs from '../../../../components/flags/flagBreadcrumbs.js'; import { noRunNumbers } from '../../../../utils/defaults.js'; import noSubPageSelected from '../../userView/data/table/noSubPageSelected.js'; import copyLinkButton from '../../../components/buttons/copyLinkButton.js'; -import { modalIds, showModal } from '../../modal/modal.js'; export default function flagsContent(model, runs, detectors, flags) { const urlParams = model.router.getUrl().searchParams; @@ -59,10 +58,7 @@ export default function flagsContent(model, runs, detectors, flags) { ? h('div.main-content', [ h('div.flex-wrap.justify-between.items-center', h('div.flex-wrap.justify-between.items-center', - flagBreadCrumbs(model, dataPassName, runNumber, detectorName), - h('button.btn.btn-secondary', { - onclick: () => showModal(modalIds.pageSettings.modal), - }, h('.settings-20-primary'))), + flagBreadCrumbs(model, dataPassName, runNumber, detectorName)), h('div', functionalities(model))), model.searchFieldsVisible ? filter(model) : '', diff --git a/app/public/views/runs/runsPerDataPass/overview/content.js b/app/public/views/runs/runsPerDataPass/overview/content.js index ee4964eb5..57e04045b 100644 --- a/app/public/views/runs/runsPerDataPass/overview/content.js +++ b/app/public/views/runs/runsPerDataPass/overview/content.js @@ -30,7 +30,6 @@ import sortingRow from '../../../userView/data/table/sortingRow.js'; import { noMatchingData, noDataFound } from '../../../../components/messagePanel/messages.js'; import noSubPageSelected from '../../../userView/data/table/noSubPageSelected.js'; import copyLinkButton from '../../../../components/buttons/copyLinkButton.js'; -import { modalIds, showModal } from '../../../modal/modal.js'; const { pageNames } = RCT; export default function content(model, runs, detectors) { @@ -77,10 +76,7 @@ export default function content(model, runs, detectors) { h('div.flex-wrap.justify-between.items-center', h('div.flex-wrap.justify-between.items-center', title(pageNames.runsPerDataPass), - chips, - h('button.btn.btn-secondary', { - onclick: () => showModal(modalIds.pageSettings.modal), - }, h('settings-20-primary'))), + chips), h('div', functionalities(model))), model.searchFieldsVisible ? filter(model) : '', diff --git a/app/public/views/userView/data/flagsDataPanel.js b/app/public/views/userView/data/flagsDataPanel.js index 46e043f15..294938125 100644 --- a/app/public/views/userView/data/flagsDataPanel.js +++ b/app/public/views/userView/data/flagsDataPanel.js @@ -22,7 +22,6 @@ import flagsTable from '../../flags/flagsTable.js'; import flagBreadCrumbs from '../../../components/common/flagBreadcrumbs.js'; import detectorName from './flags/detectorName.js'; import copyLinkButton from '../../../components/buttons/copyLinkButton.js'; -import { modalIds, showModal } from '../../modal/modal.js'; export default function flagsDataPanel(model) { const urlParams = model.router.getUrl().searchParams; @@ -55,10 +54,7 @@ export default function flagsDataPanel(model) { return h('div.main-content', [ h('div.flex-wrap.justify-between.items-center', h('div.flex-wrap.justify-between.items-center', - flagBreadCrumbs(model, dataPassName, run, detectorName(detector)), - h('button.btn.btn-secondary', { - onclick: () => showModal(modalIds.pageSettings.modal), - }, h('.settings-20-primary'))), + flagBreadCrumbs(model, dataPassName, run, detectorName(detector))), h('div', functionalities(model))), model.searchFieldsVisible ? filter(model) : '', diff --git a/app/public/views/userView/data/table/tablePanel.js b/app/public/views/userView/data/table/tablePanel.js index 4d872b14c..0ae554dda 100644 --- a/app/public/views/userView/data/table/tablePanel.js +++ b/app/public/views/userView/data/table/tablePanel.js @@ -31,7 +31,6 @@ import noSubPageSelected from './noSubPageSelected.js'; import title from '../../../../components/table/title.js'; import { anyFiltersActive } from '../../../../utils/filtering/filterUtils.js'; import copyLinkButton from '../../../../components/buttons/copyLinkButton.js'; -import { modalIds, showModal } from '../../../modal/modal.js'; const { pageNames } = RCT; @@ -85,10 +84,7 @@ export default function tablePanel(model, runs, detectors) { h('div.flex-wrap.justify-between.items-center', h('div.flex-wrap.justify-between.items-center', title(dataPointer.page), - chips, - h('button.btn.btn-secondary', { - onclick: () => showModal(modalIds.pageSettings.modal), - }, h('.settings-20-primary'))), + chips), h('div', functionalities(model))), model.searchFieldsVisible ? filter(model) : '',