diff --git a/.eslintrc.js b/.eslintrc.js index bdf306698301433a5ac5a6cb0771997f083e5e8f..ba46a82a308290fb6bcaae957b77f0f22cb63498 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -6,7 +6,7 @@ module.exports = { ignorePatterns: ["node_modules", "build", "coverage"], plugins: ["eslint-comments", "functional"], extends: [ - "plugin:vue/essential", + "plugin:vue/recommended", "eslint:recommended", "@vue/typescript/recommended", "@vue/prettier", diff --git a/.vscode/settings.json b/.vscode/settings.json index 367b7aa490f9f63c8f70c35672425b8352eb294e..c854e6af1d62a5b53cbd4fe0ed57c0655acae8a3 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,6 +9,7 @@ "cSpell.words": [ "Coscine", "pinia", + "RWTH", "vite" ] } diff --git a/src/App.vue b/src/App.vue index 887be908a5acc56d7dcec4535fda0cbea84fcb98..6d591d9f8587e3f0194b984206d94ecf2cd86cb2 100644 --- a/src/App.vue +++ b/src/App.vue @@ -14,6 +14,7 @@ </div> </main> <ExpiryToast /> + <NotificationToast /> </div> </template> @@ -34,10 +35,6 @@ export default defineComponent({ return { mainStore, projectStore, userStore }; }, - created() { - this.initialize(); - }, - computed: { loggedIn(): boolean { return this.mainStore.loggedIn; @@ -49,6 +46,11 @@ export default defineComponent({ }, watch: { + // Listen for token changes and reload the page to fetch data again + "mainStore.coscine.authorization.bearer"() { + window.location.reload(); + }, + loggedIn() { this.userStore.retrieveUser(this.loggedIn); }, @@ -58,6 +60,10 @@ export default defineComponent({ }, }, + created() { + this.initialize(); + }, + methods: { async initialize() { await this.userStore.retrieveUser(this.loggedIn); diff --git a/src/components.d.ts b/src/components.d.ts index e3dea2052cf883015212f42df3b8b4f3e75acfe4..f78d7de5e69936bcff351cc62dea825602d31ab5 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -4,19 +4,20 @@ declare module "vue" { export interface GlobalComponents { - BreadCrumbs: typeof import("./components/BreadCrumbs.vue")["default"]; - CoscineCard: typeof import("./components/CoscineCard.vue")["default"]; - CoscineFormGroup: typeof import("./components/CoscineFormGroup.vue")["default"]; - CoscineHeadline: typeof import("./components/CoscineHeadline.vue")["default"]; - CoscineModal: typeof import("./components/CoscineModal.vue")["default"]; - ExpiryToast: typeof import("./components/ExpiryToast.vue")["default"]; - LoadingIndicator: typeof import("./components/LoadingIndicator.vue")["default"]; - LoadingSpinner: typeof import("./components/LoadingSpinner.vue")["default"]; + BreadCrumbs: typeof import("./components/elements/BreadCrumbs.vue")["default"]; + CoscineCard: typeof import("./components/coscine/CoscineCard.vue")["default"]; + CoscineFormGroup: typeof import("./components/coscine/CoscineFormGroup.vue")["default"]; + CoscineHeadline: typeof import("./components/coscine/CoscineHeadline.vue")["default"]; + CoscineModal: typeof import("./components/coscine/CoscineModal.vue")["default"]; + ExpiryToast: typeof import("./components/toasts/ExpiryToast.vue")["default"]; + LoadingIndicator: typeof import("./components/elements/LoadingIndicator.vue")["default"]; + LoadingSpinner: typeof import("./components/coscine/LoadingSpinner.vue")["default"]; Maintenance: typeof import("./components/banner/Maintenance.vue")["default"]; - MultiSelect: typeof import("./components/MultiSelect.vue")["default"]; - Navbar: typeof import("./components/Navbar.vue")["default"]; + MultiSelect: typeof import("./components/coscine/MultiSelect.vue")["default"]; + Navbar: typeof import("./components/elements/Navbar.vue")["default"]; + NotificationToast: typeof import("./components/toasts/NotificationToast.vue")["default"]; Pilot: typeof import("./components/banner/Pilot.vue")["default"]; - SidebarMenu: typeof import("./components/SidebarMenu.vue")["default"]; + SidebarMenu: typeof import("./components/elements/SidebarMenu.vue")["default"]; } } diff --git a/src/components/ExpiryToast.vue b/src/components/ExpiryToast.vue deleted file mode 100644 index bbd03bda38831b9951f2d126bc3d719f80c3bfa5..0000000000000000000000000000000000000000 --- a/src/components/ExpiryToast.vue +++ /dev/null @@ -1,102 +0,0 @@ -<template> - <b-toast - v-model="loginStore.expiredSession" - toaster="b-toaster-bottom-right" - variant="danger" - solid - no-auto-hide - no-close-button - :title="$t('toast.session.title')" - > - <p class="text-center">{{ $t("toast.session.message") }}</p> - <div class="d-flex justify-content-center"> - <b-button - class="mt-2" - size="sm" - variant="secondary" - @click="redirectToLogin" - > - {{ $t("toast.session.link") }} - </b-button> - </div> - </b-toast> -</template> - -<script lang="ts"> -import { defineComponent } from "@vue/composition-api"; - -import * as jose from "jose"; -import moment from "moment"; - -import useMainStore from "@/store/index"; -import useLoginStore from "@/modules/login/store"; - -export default defineComponent({ - setup() { - const mainStore = useMainStore(); - const loginStore = useLoginStore(); - - return { mainStore, loginStore }; - }, - computed: { - token(): string { - return this.mainStore.coscine.authorization.bearer; - }, - }, - data() { - return { - tokenExpiredInterval: 0, - }; - }, - created() { - this.initialize(); - }, - watch: { - token() { - this.initialize(); - }, - }, - methods: { - getCurrentTokenExpirationDuration(): number { - const jwt = jose.decodeJwt(this.token); - const now = moment.utc(moment.now()); - if (jwt.exp) { - // Use UTC to avoid time conversion errors - const tokenExpiresAt = moment(jwt.exp * 1000).utc(); - const untilTokenExpiration = moment.duration(tokenExpiresAt.diff(now)); - - // Return as milliseconds for setInterval() method - return untilTokenExpiration.asMilliseconds(); - } - return 0; - }, - initialize() { - this.loginStore.expiredSession = false; - if (this.tokenExpiredInterval) { - clearInterval(this.tokenExpiredInterval); - } - if (this.token) { - this.tokenExpiredInterval = this.setInterval( - this.notifyTokenExpired, - this.getCurrentTokenExpirationDuration() - ); - } - }, - notifyTokenExpired() { - this.loginStore.expiredSession = true; - // Cancel interval expiration check - clearInterval(this.tokenExpiredInterval); - }, - redirectToLogin() { - this.loginStore.redirectToLogin(this.$route, true); - }, - setInterval(fn: () => void, delay: number) { - const maxDelay = Math.pow(2, 31) - 1; - if (delay > maxDelay) { - return setInterval(fn, maxDelay); - } - return setInterval(fn, delay); - }, - }, -}); -</script> diff --git a/src/components/banner/Maintenance.vue b/src/components/banner/Maintenance.vue index da121db853479694ab7653bcb3b613b9e0aa41a7..cc718e30d0875e911e0ea280b7c1cbe0da377c73 100644 --- a/src/components/banner/Maintenance.vue +++ b/src/components/banner/Maintenance.vue @@ -2,12 +2,12 @@ <b-alert v-if="visibility" :show="show" - @dismissed="saveVisibility" dismissible variant="warning" + @dismissed="saveVisibility" > <i18n :path="messagePath" tag="p"> - <template v-slot:link> + <template #link> <a :href="maintenance.url" target="_blank">{{ $t("banner.maintenance.moreInformation") }}</a> diff --git a/src/components/banner/Pilot.vue b/src/components/banner/Pilot.vue index e84a8d0d1fd9285a5a6c5171b42c19ce378168ae..6675ee20d45046d28975625586ae384637ad5bd5 100644 --- a/src/components/banner/Pilot.vue +++ b/src/components/banner/Pilot.vue @@ -2,9 +2,9 @@ <b-alert v-if="pilotVisibility" :show="pilotVisibility" - @dismissed="saveVisibility" dismissible variant="warning" + @dismissed="saveVisibility" > <i18n path="banner.pilot.pilotBannerText" tag="p"> <template #link> diff --git a/src/components/CoscineCard.vue b/src/components/coscine/CoscineCard.vue similarity index 84% rename from src/components/CoscineCard.vue rename to src/components/coscine/CoscineCard.vue index c4b92d35f52ae1c9da4bf94ddd1a3efe245544aa..ca2b8d383495d48c3d3bdd61848467ffce908c19 100644 --- a/src/components/CoscineCard.vue +++ b/src/components/coscine/CoscineCard.vue @@ -2,25 +2,26 @@ <b-card no-body class="coscine_card m-2 text-center" + :class="isLoading ? 'bg-light' : ''" @click.prevent="openCard()" > <!-- Stretched Link (Card) --> - <a :href="hrefFromRouter(to)" class="stretched-link" /> + <a v-if="!isLoading" :href="hrefFromRouter(to)" class="stretched-link" /> <!-- Badge --> <template #header> - <b-badge pill :variant="badge_type" v-if="badge_visibility"> - {{ badge_text }} + <b-badge v-if="badgeVisibility" pill :variant="badgeType"> + {{ badgeText }} </b-badge> </template> <!-- Settings Button --> <b-button v-if="toSettings" - @click.stop.prevent="settingsCard()" size="sm" variant="outline-primary" class="settings_button" + @click.stop.prevent="settingsCard" > <b-icon icon="pencil-fill" /> <!-- Stretched Link (Settings) --> @@ -29,8 +30,10 @@ <b-card-body class="pt-0 pb-2 px-2"> <div> + <!-- Loading Spinner --> + <b-spinner v-if="isLoading" variant="primary" class="card_icon" /> <!-- Icon --> - <b-icon :icon="cardIcon" variant="primary" class="card_icon" /> + <b-icon v-else :icon="cardIcon" variant="primary" class="card_icon" /> </div> <!-- Title --> <b-card-text> @@ -47,35 +50,27 @@ import { RawLocation } from "vue-router"; export default defineComponent({ components: {}, - data() { - return { - createIcon: "plus-circle-fill", - resourceIcon: "archive", - projectIcon: "folder2-open", - placeHolderIcon: "circle-fill", - }; - }, - props: { title: { type: String, required: true, }, - badge_text: { + badgeText: { default: "", type: String, }, - badge_visibility: { + badgeVisibility: { default: false, type: Boolean, }, - badge_type: { + badgeType: { default: "warning", type: String, }, type: { + default: "", type: String, - required: true, + required: false, }, toSettings: { default: null, @@ -85,6 +80,19 @@ export default defineComponent({ type: Object as PropType<RawLocation>, required: true, }, + isLoading: { + default: false, + type: Boolean, + }, + }, + + data() { + return { + createIcon: "plus-circle-fill", + resourceIcon: "archive", + projectIcon: "folder2-open", + placeHolderIcon: "circle-fill", + }; }, computed: { diff --git a/src/components/CoscineFormGroup.vue b/src/components/coscine/CoscineFormGroup.vue similarity index 94% rename from src/components/CoscineFormGroup.vue rename to src/components/coscine/CoscineFormGroup.vue index 89cf9b6db2b0692a5d92747e4a93ccf99504cc08..e16800405629e430ad23ffc3c7ebd939d7c9a082 100644 --- a/src/components/CoscineFormGroup.vue +++ b/src/components/coscine/CoscineFormGroup.vue @@ -18,9 +18,9 @@ <!-- Label --> <span id="label" class="text-break">{{ label }}</span> - <div class="d-inline ml-1" v-if="info"> + <div v-if="info" class="d-inline ml-1"> <!-- Information Circle Icon --> - <b-icon icon="info-circle" :id="labelFor" /> + <b-icon :id="labelFor" icon="info-circle" /> <!-- Popover --> <b-popover diff --git a/src/components/CoscineHeadline.vue b/src/components/coscine/CoscineHeadline.vue similarity index 100% rename from src/components/CoscineHeadline.vue rename to src/components/coscine/CoscineHeadline.vue diff --git a/src/components/CoscineModal.vue b/src/components/coscine/CoscineModal.vue similarity index 91% rename from src/components/CoscineModal.vue rename to src/components/coscine/CoscineModal.vue index 5e0b2099677154ec2a5d8d335e5b04da2ec12e4e..917b3d015311932bc8c676362a35862345de29b6 100644 --- a/src/components/CoscineModal.vue +++ b/src/components/coscine/CoscineModal.vue @@ -1,16 +1,18 @@ <template> <b-modal :visible="value" - @change="$emit('input', value)" :title="title" - @hidden="hideModal" :hide-footer="true" + @change="$emit('input', value)" + @hidden="hideModal" > <div> {{ body }} </div> <slot /> - <slot name="buttons" /> + <div class="mt-4"> + <slot name="buttons" /> + </div> </b-modal> </template> diff --git a/src/components/LoadingSpinner.vue b/src/components/coscine/LoadingSpinner.vue similarity index 96% rename from src/components/LoadingSpinner.vue rename to src/components/coscine/LoadingSpinner.vue index 8e4c03d4b92a2b86b182735b868658c62af86645..d4613964e3b23729bb2016ca5c666681122e26d3 100644 --- a/src/components/LoadingSpinner.vue +++ b/src/components/coscine/LoadingSpinner.vue @@ -6,9 +6,8 @@ :show="isWaitingForResponse" :variant="'white'" :opacity="0.9" - :z-index="2000" + :z-index="1000" :blur="''" - rounded="sm" > <template #overlay> <div class="text-center"> diff --git a/src/components/MultiSelect.vue b/src/components/coscine/MultiSelect.vue similarity index 98% rename from src/components/MultiSelect.vue rename to src/components/coscine/MultiSelect.vue index 23811ebc32aeea232e043202974a26b1a76af40d..35e9f0fd50a9f701f3302ec7af0ae739d073ee3f 100644 --- a/src/components/MultiSelect.vue +++ b/src/components/coscine/MultiSelect.vue @@ -11,14 +11,14 @@ no-outer-focus class="mb-2" > - <template v-slot="{ tags, disabled, addTag, removeTag }"> + <template #default="{ tags, disabled, addTag, removeTag }"> <ul v-if="tags.length > 0" class="list-inline d-inline-block mb-2"> <li v-for="tag in tags" :key="tag" class="list-inline-item"> <b-form-tag - @remove="removeTag(tag)" :title="tag" :disabled="disabled" variant="info" + @remove="removeTag(tag)" >{{ tag }}</b-form-tag > </li> @@ -44,8 +44,8 @@ :disabled="disabled" > <b-form-input - v-model="search" id="tag-search-input" + v-model="search" type="search" size="sm" autocomplete="off" diff --git a/src/components/BreadCrumbs.vue b/src/components/elements/BreadCrumbs.vue similarity index 100% rename from src/components/BreadCrumbs.vue rename to src/components/elements/BreadCrumbs.vue diff --git a/src/components/LoadingIndicator.vue b/src/components/elements/LoadingIndicator.vue similarity index 100% rename from src/components/LoadingIndicator.vue rename to src/components/elements/LoadingIndicator.vue diff --git a/src/components/Navbar.vue b/src/components/elements/Navbar.vue similarity index 93% rename from src/components/Navbar.vue rename to src/components/elements/Navbar.vue index ffcd08c91ec4ed544633247d1958970475a013f0..dbc49fac3dba560b3f54f501b38696e15ac70f00 100644 --- a/src/components/Navbar.vue +++ b/src/components/elements/Navbar.vue @@ -1,17 +1,14 @@ <template> <header id="header"> <b-navbar toggleable="md" type="dark" variant="dark"> - <!-- Sidebar Toggle --> - <b-navbar-nav> - <b-nav-item @click="toggleSidebar"> - <b-icon icon="justify" /> - </b-nav-item> - </b-navbar-nav> - <!-- Coscine Logo --> <b-navbar-brand id="coscineLogo"> <RouterLink :to="{ name: 'list-projects' }"> - <img alt="Coscine logo" src="@/assets/svg/coscine_white.svg" /> + <img + alt="Coscine Logo" + src="@/assets/svg/coscine_white.svg" + class="mx-3" + /> </RouterLink> </b-navbar-brand> @@ -28,8 +25,8 @@ </template> <b-form-input id="search" - type="search" v-model="searchTerm" + type="search" :placeholder="$t('nav.search')" /> </b-input-group> @@ -45,8 +42,8 @@ <!-- Language Options --> <b-dropdown-item v-for="(locale, index) in locales" - :disabled="$root.$i18n.locale === locale" :key="index" + :disabled="$root.$i18n.locale === locale" @click="changeLocale(locale)" >{{ $t("nav.lang" + locale.toUpperCase()) }}</b-dropdown-item > @@ -71,11 +68,11 @@ > </b-nav-item-dropdown> - <b-nav-item-dropdown right v-if="loggedIn"> - <template #button-content v-if="user" + <b-nav-item-dropdown v-if="loggedIn" right> + <template v-if="user" #button-content >{{ $t("nav.user", { displayName: user.displayName }) }} </template> - <template #button-content v-else + <template v-else #button-content ><b-skeleton animation="fade" height="1.5rem" @@ -101,9 +98,9 @@ <router-link v-else + v-slot="{ href, isExactActive }" :to="{ name: 'login', query: { redirect: $route.fullPath } }" custom - v-slot="{ href, isExactActive }" > <b-nav-item right :disabled="isExactActive" :href="href">{{ $t("nav.userLogIn") diff --git a/src/components/SidebarMenu.vue b/src/components/elements/SidebarMenu.vue similarity index 98% rename from src/components/SidebarMenu.vue rename to src/components/elements/SidebarMenu.vue index 38b90f02db84ef45c2ef8e681c716730e7eed6b9..5e6ae8046d2be696294f8cf373183e73e1575ed4 100644 --- a/src/components/SidebarMenu.vue +++ b/src/components/elements/SidebarMenu.vue @@ -2,18 +2,18 @@ <sidebar-menu :menu="menu" :collapsed="collapsed" - @toggle-collapse="collapse" :relative="true" - :showOneChild="true" - :disableHover="true" + :show-one-child="true" + :disable-hover="true" theme="white-theme" + @toggle-collapse="collapse" > - <template v-slot:toggle-icon> + <template #toggle-icon> <b-icon v-if="!collapsed" icon="arrow-bar-left" /> <b-icon v-else icon="arrow-bar-right" /> </template> - <template v-slot:dropdown-icon> + <template #dropdown-icon> <b-icon icon="caret-right" /> </template> </sidebar-menu> @@ -59,9 +59,6 @@ export default defineComponent({ return { mainStore, projectStore, resourceStore }; }, - created() { - this.collapsed = !this.sidebarActive; - }, data() { return { collapsed: false, @@ -257,6 +254,9 @@ export default defineComponent({ this.collapsed = !this.sidebarActive; }, }, + created() { + this.collapsed = !this.sidebarActive; + }, methods: { collapse(collapsed: boolean) { this.collapsed = collapsed; diff --git a/src/components/toasts/ExpiryToast.vue b/src/components/toasts/ExpiryToast.vue new file mode 100644 index 0000000000000000000000000000000000000000..3f94927f1194507a5aee6af71416a400a0a7e9f3 --- /dev/null +++ b/src/components/toasts/ExpiryToast.vue @@ -0,0 +1,132 @@ +<template> + <div> + <!-- White Overlay Background --> + <b-overlay + no-wrap + :fixed="true" + :show="loginStore.expiredSession" + :variant="'white'" + :opacity="0.9" + :z-index="1000" + :blur="''" + > + <template #overlay> + <!-- Remove the default loading spinner --> + <div /> + </template> + </b-overlay> + + <!-- Expiry Toast --> + <b-toast + v-model="loginStore.expiredSession" + toaster="b-toaster-bottom-right" + variant="danger" + solid + no-auto-hide + no-close-button + :title="$t('toast.session.title')" + > + <!-- Toast Body Text --> + <p class="text-center">{{ $t("toast.session.message") }}</p> + + <!-- Login Button --> + <div class="d-flex justify-content-center"> + <b-button + class="mt-2" + size="sm" + variant="secondary" + @click="redirectToLogin" + > + {{ $t("toast.session.link") }} + </b-button> + </div> + </b-toast> + </div> +</template> + +<script lang="ts"> +import { defineComponent } from "@vue/composition-api"; + +import * as jose from "jose"; +import moment from "moment"; + +import useMainStore from "@/store/index"; +import useLoginStore from "@/modules/login/store"; + +export default defineComponent({ + setup() { + const mainStore = useMainStore(); + const loginStore = useLoginStore(); + + return { mainStore, loginStore }; + }, + data() { + return { + tokenExpiredInterval: 0, + }; + }, + computed: { + token(): string { + return this.mainStore.coscine.authorization.bearer; + }, + }, + watch: { + token() { + this.initialize(); + }, + }, + created() { + this.initialize(); + }, + methods: { + getCurrentTokenExpirationDuration(): number { + try { + const jwt = jose.decodeJwt(this.token); + const now = moment.utc(moment.now()); + if (jwt.exp) { + // Use UTC to avoid time conversion errors + const tokenExpiresAt = moment(jwt.exp * 1000).utc(); + const untilTokenExpiration = moment.duration( + tokenExpiresAt.diff(now) + ); + + // Return as milliseconds for setInterval() method + return untilTokenExpiration.asMilliseconds(); + } else { + return 0; + } + } catch (error) { + // Provided token is not a valid JWT Token + return 0; + } + }, + initialize() { + this.loginStore.expiredSession = false; + if (this.tokenExpiredInterval) { + clearInterval(this.tokenExpiredInterval); + } + if (this.token) { + this.tokenExpiredInterval = this.setInterval( + this.notifyTokenExpired, + this.getCurrentTokenExpirationDuration() + ); + } + }, + notifyTokenExpired() { + this.loginStore.expiredSession = true; + // Cancel interval expiration check + clearInterval(this.tokenExpiredInterval); + }, + redirectToLogin() { + this.loginStore.redirectToLogin(this.$route, true); + }, + setInterval(fn: () => void, delay: number): number { + const maxDelay = Math.pow(2, 31) - 1; + if (delay > maxDelay) { + return window.setInterval(fn, maxDelay); + } + return window.setInterval(fn, delay); + }, + }, +}); +</script> diff --git a/src/components/toasts/NotificationToast.vue b/src/components/toasts/NotificationToast.vue new file mode 100644 index 0000000000000000000000000000000000000000..6ad4fea1992154bafbfeadf0d7638ace68b9ee98 --- /dev/null +++ b/src/components/toasts/NotificationToast.vue @@ -0,0 +1,48 @@ +<template> + <div /> +</template> + +<script lang="ts"> +import { defineComponent } from "vue-demi"; +import useNotificationStore from "@/store/notification"; +import type { NotificationToast } from "@/store/types"; + +export default defineComponent({ + setup() { + const notificationStore = useNotificationStore(); + + return { notificationStore }; + }, + + computed: { + currentToast(): NotificationToast | undefined { + return this.notificationStore.notificationQueue + ? (this.notificationStore.notificationQueue.at(0) as NotificationToast) + : undefined; + }, + }, + + watch: { + currentToast() { + const toast = this.currentToast; + if (toast) { + // Display the notification toast + this.makeToast(toast); + // Toast has been shown, remove it from the queue + this.notificationStore.deleteNotification(toast); + } + }, + }, + + methods: { + async makeToast(toast: NotificationToast) { + if (!toast.toaster) { + toast.toaster = "b-toaster-bottom-right"; + } + this.$root.$bvToast.toast(toast.body, toast); + }, + }, +}); +</script> + +<style></style> diff --git a/src/i18n/de.ts b/src/i18n/de.ts index 58a8510463457f2c95469d5a30961ec72a36a17a..ba28b6510b62fc040ae709198ec000c45aeec822 100644 --- a/src/i18n/de.ts +++ b/src/i18n/de.ts @@ -105,6 +105,16 @@ export default { "Es ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut. Falls der Fehler weiterhin auftritt, wenden Sie sich bitte an @:(email.serviceDeskEmail).", }, }, + apiError: { + general: { + title: "Ein Fehler ist aufgetreten", + body: "Es ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut. Falls der Fehler weiterhin auftritt, wenden Sie sich bitte an @:(email.serviceDeskEmail).", + }, + specific: { + title: "Ein Fehler ist aufgetreten", + body: "Es ist ein Fehler aufgetreten {error}. Bitte versuchen Sie es erneut. Falls der Fehler weiterhin auftritt, wenden Sie sich bitte an @:(email.serviceDeskEmail).", + }, + }, }, breadcrumbs: { @@ -232,9 +242,9 @@ export default { }, email: { - serviceDeskEmail: "servicedesk@rwth-aachen.de", + serviceDeskEmail: "servicedesk@itc.rwth-aachen.de", serviceDeskMailTo: - "mailto:servicedesk@rwth-aachen.de?subject=CoScInE%20Pilot%20Program", + "mailto:servicedesk@itc.rwth-aachen.de?subject=CoScInE%20Pilot%20Program", serviceDeskName: "Servicedesk", }, } as VueI18n.LocaleMessageObject; diff --git a/src/i18n/en.ts b/src/i18n/en.ts index 1cf6727f4efcb3dc6343be3cef430461b1442322..e0791174db14deeeda8a92b63963fb0f8e54bc52 100644 --- a/src/i18n/en.ts +++ b/src/i18n/en.ts @@ -89,7 +89,7 @@ export default { failure: { title: "Error on saving", message: - "An error occured. Please try again. If the error persists, please contact @:(email.serviceDeskEmail).", + "An error occurred. Please try again. If the error persists, please contact @:(email.serviceDeskEmail).", }, }, onDelete: { @@ -100,7 +100,17 @@ export default { failure: { title: "Error on deletion", message: - "An error occured. Please try again. If the error persists, please contact @:(email.serviceDeskEmail).", + "An error occurred. Please try again. If the error persists, please contact @:(email.serviceDeskEmail).", + }, + }, + apiError: { + general: { + title: "An error occurred", + body: "An error occurred. Please try again. If the error persists, please contact @:(email.serviceDeskEmail).", + }, + specific: { + title: "An error occurred", + body: "An error occurred {error}. Please try again. If the error persists, please contact @:(email.serviceDeskEmail).", }, }, }, @@ -229,9 +239,9 @@ export default { }, email: { - serviceDeskEmail: "servicedesk@rwth-aachen.de", + serviceDeskEmail: "servicedesk@itc.rwth-aachen.de", serviceDeskMailTo: - "mailto:servicedesk@rwth-aachen.de?subject=Coscine%20Pilot%20Program", + "mailto:servicedesk@itc.rwth-aachen.de?subject=Coscine%20Pilot%20Program", serviceDeskName: "Servicedesk", }, } as VueI18n.LocaleMessageObject; diff --git a/src/modules/admin/AdminModule.vue b/src/modules/admin/AdminModule.vue index bb98cfb53a04fb8a2cfcca9690344c63a0fd9cd1..b58932377881d2930f291f7748ee316f5cd7565b 100644 --- a/src/modules/admin/AdminModule.vue +++ b/src/modules/admin/AdminModule.vue @@ -20,16 +20,16 @@ export default defineComponent({ return { mainStore, adminStore }; }, - created() { - this.initialize(); - }, - computed: { moduleIsReady(): boolean { return true; }, }, + created() { + this.initialize(); + }, + methods: { async initialize() { // do initialization stuff (e.g. API calls, element loading, etc.) diff --git a/src/modules/admin/pages/Admin.vue b/src/modules/admin/pages/Admin.vue index 5f19ae17089fab68d6251813414797d2d9a0e4a3..37f4a8604764916be343e65fae3959832935a40d 100644 --- a/src/modules/admin/pages/Admin.vue +++ b/src/modules/admin/pages/Admin.vue @@ -16,7 +16,7 @@ <script lang="ts"> import { defineComponent } from "vue-demi"; -import CoscineHeadline from "@/components/CoscineHeadline.vue"; +import CoscineHeadline from "@/components/coscine/CoscineHeadline.vue"; // import the store for current module import useAdminStore from "../store"; @@ -24,15 +24,14 @@ import useAdminStore from "../store"; import useMainStore from "@/store/index"; export default defineComponent({ + components: { + CoscineHeadline, + }, setup() { const mainStore = useMainStore(); const adminStore = useAdminStore(); return { mainStore, adminStore }; }, - - components: { - CoscineHeadline, - }, }); </script> diff --git a/src/modules/error/ErrorModule.vue b/src/modules/error/ErrorModule.vue index b0c836e15071ec59543c3d4c2cf60472db4c21a8..5d27a41e457f2a41cdab7281c3cac9f5ffddf993 100644 --- a/src/modules/error/ErrorModule.vue +++ b/src/modules/error/ErrorModule.vue @@ -20,16 +20,16 @@ export default defineComponent({ return { mainStore, errorStore }; }, - created() { - this.initialize(); - }, - computed: { moduleIsReady(): boolean { return true; }, }, + created() { + this.initialize(); + }, + methods: { async initialize() { // do initialization stuff (e.g. API calls, element loading, etc.) diff --git a/src/modules/error/pages/NotFound.vue b/src/modules/error/pages/NotFound.vue index 37431cd9ed7ad6a6b9162e4a1c0e246766041d23..3a3d13dd786caca739a7d46fde98b2547ee4b2f6 100644 --- a/src/modules/error/pages/NotFound.vue +++ b/src/modules/error/pages/NotFound.vue @@ -16,7 +16,7 @@ <script lang="ts"> import { defineComponent } from "vue-demi"; -import CoscineHeadline from "@/components/CoscineHeadline.vue"; +import CoscineHeadline from "@/components/coscine/CoscineHeadline.vue"; // import the store for current module import useErrorStore from "../store"; @@ -24,15 +24,14 @@ import useErrorStore from "../store"; import useMainStore from "@/store/index"; export default defineComponent({ + components: { + CoscineHeadline, + }, setup() { const mainStore = useMainStore(); const errorStore = useErrorStore(); return { mainStore, errorStore }; }, - - components: { - CoscineHeadline, - }, }); </script> diff --git a/src/modules/login/LoginModule.vue b/src/modules/login/LoginModule.vue index 9e15fabc356cedc112ad3022da2e4a24c627c12e..9b60b323dc72ce1c4ac9bce5c21cbcd86d2207b9 100644 --- a/src/modules/login/LoginModule.vue +++ b/src/modules/login/LoginModule.vue @@ -20,16 +20,16 @@ export default defineComponent({ return { mainStore, loginStore }; }, - created() { - this.initialize(); - }, - computed: { moduleIsReady(): boolean { return true; }, }, + created() { + this.initialize(); + }, + methods: { async initialize() { // do initialization stuff (e.g. API calls, element loading, etc.) diff --git a/src/modules/pid/PidModule.vue b/src/modules/pid/PidModule.vue index 8010d3fde3cbcfc7dc0a82f381886d1de1bd2ef5..e38b34f7778ed330c7c6fe390f574cd01e669805 100644 --- a/src/modules/pid/PidModule.vue +++ b/src/modules/pid/PidModule.vue @@ -20,16 +20,16 @@ export default defineComponent({ return { mainStore, pidStore }; }, - created() { - this.initialize(); - }, - computed: { moduleIsReady(): boolean { return true; }, }, + created() { + this.initialize(); + }, + methods: { async initialize() { // do initialization stuff (e.g. API calls, element loading, etc.) diff --git a/src/modules/pid/pages/Pid.vue b/src/modules/pid/pages/Pid.vue index 3e863c39311a7a757c59fda22c88e3fbe5a1d716..a130096c844edb8cd607925a4c104d512ca3604a 100644 --- a/src/modules/pid/pages/Pid.vue +++ b/src/modules/pid/pages/Pid.vue @@ -15,7 +15,7 @@ <script lang="ts"> import { defineComponent } from "vue-demi"; -import CoscineHeadline from "@/components/CoscineHeadline.vue"; +import CoscineHeadline from "@/components/coscine/CoscineHeadline.vue"; // import the store for current module import usePidStore from "../store"; @@ -23,15 +23,14 @@ import usePidStore from "../store"; import useMainStore from "@/store/index"; export default defineComponent({ + components: { + CoscineHeadline, + }, setup() { const mainStore = useMainStore(); const pidStore = usePidStore(); return { mainStore, pidStore }; }, - - components: { - CoscineHeadline, - }, }); </script> diff --git a/src/modules/project/ProjectModule.vue b/src/modules/project/ProjectModule.vue index 3666440bc4ab0fe54f51c7c0957d01cff67a0fcc..fa56c2859ac0b828a45ec672bb173717fcbc551c 100644 --- a/src/modules/project/ProjectModule.vue +++ b/src/modules/project/ProjectModule.vue @@ -1,6 +1,6 @@ <template> <div> - <router-view :loading="!moduleIsReady" /> + <router-view /> </div> </template> @@ -10,6 +10,7 @@ import { defineComponent } from "vue-demi"; // import the store for current module import useProjectStore from "./store"; import useResourceStore from "@/modules/resource/store"; +import useNotificationStore from "@/store/notification"; // import the main store import useMainStore from "@/store/index"; @@ -17,16 +18,17 @@ import type { ProjectObject } from "@coscine/api-client/dist/types/Coscine.Api.P import type { Route } from "vue-router"; export default defineComponent({ + async beforeRouteUpdate(to, from, next) { + await this.apiFetch(to); + next(); + }, setup() { const mainStore = useMainStore(); const projectStore = useProjectStore(); + const notificationStore = useNotificationStore(); const resourceStore = useResourceStore(); - return { mainStore, projectStore, resourceStore }; - }, - - created() { - this.initialize(); + return { mainStore, projectStore, notificationStore, resourceStore }; }, computed: { @@ -34,20 +36,32 @@ export default defineComponent({ return this.projectStore.currentProject; }, moduleIsReady(): boolean { + // Currently unused return ( - this.projectStore !== null && this.projectStore.currentSlug !== null && this.projectStore.currentProject !== null && this.projectStore.currentResources !== null && this.projectStore.currentSubProjects !== null && this.projectStore.currentQuotas !== null && - this.resourceStore.resourceTypes !== null && this.projectStore.currentProjectRoles !== null && - this.projectStore.roles !== null + this.projectStore.roles !== null && + this.projectStore.roles !== undefined && + this.resourceStore.resourceTypes !== null ); }, }, + created() { + this.initialize(); + }, + + beforeDestroy() { + // Set the slug to null in order to hide the project from the sidebar + if (this.projectStore.currentSlug) { + this.projectStore.currentSlug = null; + } + }, + methods: { async initialize() { await this.apiFetch(this.$router.currentRoute); @@ -88,10 +102,5 @@ export default defineComponent({ } }, }, - - async beforeRouteUpdate(to, from, next) { - await this.apiFetch(to); - next(); - }, }); </script> diff --git a/src/modules/project/RootProjectModule.vue b/src/modules/project/RootProjectModule.vue index 47570e87ca1bfc0f0433ae24abf27c00d7c6a426..2a517547bbc30863bdc6a984fe8522ba5b003acd 100644 --- a/src/modules/project/RootProjectModule.vue +++ b/src/modules/project/RootProjectModule.vue @@ -1,6 +1,9 @@ <template> <div> <router-view v-if="moduleIsReady" /> + <b-row v-else align-h="center" class="my-4"> + <b-spinner variant="secondary" /> + </b-row> </div> </template> @@ -13,6 +16,10 @@ import useProjectStore from "./store"; import useMainStore from "@/store/index"; export default defineComponent({ + async beforeRouteUpdate(to, from, next) { + await this.apiFetch(); + next(); + }, setup() { const mainStore = useMainStore(); const projectStore = useProjectStore(); @@ -20,20 +27,19 @@ export default defineComponent({ return { mainStore, projectStore }; }, - created() { - this.initialize(); - }, - computed: { moduleIsReady(): boolean { return ( - this.projectStore !== null && this.projectStore.topLevelProjects !== null && this.projectStore.roles !== null ); }, }, + created() { + this.initialize(); + }, + methods: { async initialize() { await this.apiFetch(); @@ -55,10 +61,5 @@ export default defineComponent({ } }, }, - - async beforeRouteUpdate(to, from, next) { - await this.apiFetch(); - next(); - }, }); </script> diff --git a/src/modules/project/i18n/de.ts b/src/modules/project/i18n/de.ts index c455e76fbd750d337405d455fde78b45a0f233e7..56ee0ebf5c1e85573b8ad0900a3ccd5b668c00a7 100644 --- a/src/modules/project/i18n/de.ts +++ b/src/modules/project/i18n/de.ts @@ -116,16 +116,15 @@ export default { quota: { headline: "Quota Management", resources: "Ressourcen", - rangeText1: " GB von ", - rangeText2: " GB reserviert", - gb: " GB ", + rangeText: "{allocated} GB von {maximum} GB reserviert", + gb: "{number} GB", projectLabel: "Projekt:", - resourceTypeLabel: "Ressource Typ:", + resourceTypeLabel: "Ressourcentyp:", - emptyProjectSelect: "-- Bitte wählen Sie ein Projekt --", - emptyResourceTypeSelect: "-- Bitte wählen Sie einen Ressourcen Typ --", - noResourceTypeChoosen: "Es wurde kein Ressourcen Typ ausgewählt.", + emptyProjectSelect: "Bitte wählen Sie ein Projekt aus.", + emptyResourceTypeSelect: "Bitte wählen Sie einen Ressourcentyp aus.", + noResourceTypeChoosen: "Es wurde kein Ressourcentyp ausgewählt.", moreHelp: "Mehr anfordern", moreHelpLink: @@ -140,24 +139,24 @@ export default { connectionErrorTitle: "Fehler bei der Abfrage der Quotas", connectionErrorBody: - "Bei der Abfrage der Quotas ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut. Wenn der Fehler weiter auftritt, wenden Sie sich bitte an servicedesk@rwth-aachen.de", + "Bei der Abfrage der Quotas ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut. Wenn der Fehler weiter auftritt, wenden Sie sich bitte an servicedesk@itc.rwth-aachen.de", resourceTypeQuotaChangedSuccessTitle: "Quota erfolgreich verändert", resourceTypeQuotaChangedSuccessBody: "Die Quota im Projekt {ProjectName} wurde auf {AmountInGB} GB gesetzt.", resourceTypeQuotaChangedFailureTitle: "Fehler beim Ändern der Quota", resourceTypeQuotaChangedFailureBody: - "Beim Ändern der Quota ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut. Wenn der Fehler weiter auftritt, wenden Sie sich bitte an servicedesk@rwth-aachen.de", + "Beim Ändern der Quota ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut. Wenn der Fehler weiter auftritt, wenden Sie sich bitte an servicedesk@itc.rwth-aachen.de", resourceQuotaChangedSuccessTitle: "Quota erfolgreich verändert", resourceQuotaChangedSuccessBody: "Die Quota in Ressource {ResourceName} wurde auf {AmountInGB} GB gesetzt.", resourceQuotaChangedFailureTitle: "Fehler beim Ändern der Quota", resourceQuotaChangedFailureBody: - "Beim Ändern der Quota ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut. Wenn der Fehler weiter auftritt, wenden Sie sich bitte an servicedesk@rwth-aachen.de", + "Beim Ändern der Quota ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut. Wenn der Fehler weiter auftritt, wenden Sie sich bitte an servicedesk@itc.rwth-aachen.de", }, - // Settíngs.vue + // Settings.vue settings: { // page title is fetched from `sidebar.projectSettings` @@ -170,6 +169,7 @@ export default { }, }, }, + form: { project: { labelSymbol: ":", diff --git a/src/modules/project/i18n/en.ts b/src/modules/project/i18n/en.ts index 308050af07536f9f8e620342263f9c058fa60bb4..007f58402d301a7d8a53392c1a344f60e3717f08 100644 --- a/src/modules/project/i18n/en.ts +++ b/src/modules/project/i18n/en.ts @@ -111,15 +111,14 @@ export default { quota: { headline: "Quota Management", resources: "Resources", - rangeText1: " GB of ", - rangeText2: " GB reserved", - gb: " GB ", + rangeText: "{allocated} GB of {maximum} GB reserved", + gb: "{number} GB", projectLabel: "Project:", resourceTypeLabel: "Resource Type:", - emptyProjectSelect: "-- Please select a project --", - emptyResourceTypeSelect: "-- Please select a resource type --", + emptyProjectSelect: "Please select a project.", + emptyResourceTypeSelect: "Please select a resource type.", noResourceTypeChoosen: "No resource type selected.", moreHelp: "Request more", @@ -134,27 +133,27 @@ export default { emptyTableText: "No resources exist for this resource type.", - connectionErrorTitle: "Resource quota retrieval not successfull", + connectionErrorTitle: "Resource quota retrieval not successful", connectionErrorBody: - "An error occured while retrieving the resource type quota. Please try again. If the error persists, contact us at servicedesk@rwth-aachen.de", + "An error occurred while retrieving the resource type quota. Please try again. If the error persists, contact us at servicedesk@itc.rwth-aachen.de", resourceTypeQuotaChangedSuccessTitle: "Quota extended successfully", resourceTypeQuotaChangedSuccessBody: "The quota for project {ProjectName} was successfully extended to {AmountInGB} GB.", resourceTypeQuotaChangedFailureTitle: - "Resource quota extension not successfull", + "Resource quota extension not successful", resourceTypeQuotaChangedFailureBody: - "An error occured while extending the resource type quota. Please try again. If the error persists, contact us at servicedesk@rwth-aachen.de", + "An error occurred while extending the resource type quota. Please try again. If the error persists, contact us at servicedesk@itc.rwth-aachen.de", resourceQuotaChangedSuccessTitle: "Quota extended successfully", resourceQuotaChangedSuccessBody: "The quota for resource {ResourceName} was successfully extended to {AmountInGB} GB.", - resourceQuotaChangedFailureTitle: "Quota extension not successfull", + resourceQuotaChangedFailureTitle: "Quota extension not successful", resourceQuotaChangedFailureBody: - "An error occured while extending the quota. Please try again. If the error persists, contact us at servicedesk@rwth-aachen.de", + "An error occurred while extending the quota. Please try again. If the error persists, contact us at servicedesk@itc.rwth-aachen.de", }, - // Settíngs.vue + // Settings.vue settings: { // page title is fetched from `sidebar.projectSettings` @@ -166,6 +165,7 @@ export default { }, }, }, + form: { project: { labelSymbol: ":", diff --git a/src/modules/project/pages/CreateProject.vue b/src/modules/project/pages/CreateProject.vue index a138e27cec9b37090c100af1eb695c8bbaf7b14f..9b7f302c2bf1b245f5f50527104f507d87ef3c6c 100644 --- a/src/modules/project/pages/CreateProject.vue +++ b/src/modules/project/pages/CreateProject.vue @@ -19,7 +19,7 @@ <FormNaming v-model="projectForm" - :isLoading="isLoading" + :is-loading="isLoading" @validation="formValidations.naming = $event" /> @@ -27,8 +27,8 @@ <FormMetadata v-model="projectForm" - :isLoading="isLoading" - :parentProject="project" + :is-loading="isLoading" + :parent-project="project" @validation="formValidations.metadata = $event" /> @@ -38,7 +38,6 @@ type="submit" variant="primary" class="float-right" - @click.prevent="clickSave" :disabled=" formValidations.naming.$invalid || formValidations.metadata.$invalid || @@ -46,6 +45,7 @@ !formValidations.metadata.$anyDirty) || isWaitingForResponse " + @click.prevent="clickSave" > {{ $t("buttons.submit") }}</b-button > @@ -54,8 +54,8 @@ <!-- Loading Spinner on Submit --> <LoadingSpinner - :isWaitingForResponse="isWaitingForResponse" - :textAfter="$t('page.createProject.loadingSpinnerProjectCreation')" + :is-waiting-for-response="isWaitingForResponse" + :text-after="$t('page.createProject.loadingSpinnerProjectCreation')" /> </div> <div class="col-sm-2" /> @@ -85,19 +85,20 @@ import useProjectStore from "../store"; import useMainStore from "@/store/index"; import useResourceStore from "@/modules/resource/store"; import { navigateToProject } from "@/router"; +import useNotificationStore from "@/store/notification"; export default defineComponent({ + components: { + FormNaming, + FormMetadata, + }, setup() { const mainStore = useMainStore(); const projectStore = useProjectStore(); const resourceStore = useResourceStore(); + const notificationStore = useNotificationStore(); - return { mainStore, projectStore, resourceStore }; - }, - - components: { - FormNaming, - FormMetadata, + return { mainStore, projectStore, resourceStore, notificationStore }; }, data() { @@ -153,20 +154,6 @@ export default defineComponent({ }, methods: { - makeToast( - text = "Message", - givenTitle = "Title", - variant: string | undefined = undefined - ) { - this.$root.$bvToast.toast(text, { - title: givenTitle, - autoHideDelay: 5000, - toaster: "b-toaster-bottom-right", - variant: variant, - noCloseButton: true, - }); - }, - async clickSave() { // Validate form again this.formValidations.naming.$touch(); @@ -197,11 +184,11 @@ export default defineComponent({ } else { this.isWaitingForResponse = false; // On Failure - this.makeToast( - this.$t("toast.onSave.failure.message").toString(), - this.$t("toast.onSave.failure.title").toString(), - "danger" - ); + this.notificationStore.postNotification({ + title: this.$t("toast.onSave.failure.title").toString(), + body: this.$t("toast.onSave.failure.message").toString(), + variant: "danger", + }); } }, }, diff --git a/src/modules/project/pages/Members.vue b/src/modules/project/pages/Members.vue index 0791f1e36c677b10be76a3c3d627ee331cd9ecfb..c942998064a1dc2a96388ee21ddc7c756cfa52ea 100644 --- a/src/modules/project/pages/Members.vue +++ b/src/modules/project/pages/Members.vue @@ -5,7 +5,7 @@ <div class="UserManagement"> <!-- Search Row --> <UserSearchRow - :memberRole="memberRole" + :member-role="memberRole" :project="project" :roles="roles" @addUser="addUser" @@ -25,12 +25,12 @@ :filter="filter" :busy="isBusy" :roles="roles" - :emptyText="$t('page.members.emptyTableText')" - :emptyFilteredText="$t('page.members.emptyFilterText')" - :deleteText="$t('buttons.delete')" - :removeText="$t('buttons.remove')" - :ownerCount="ownerCount" - :ownerRole="ownerRole" + :empty-text="$t('page.members.emptyTableText')" + :empty-filtered-text="$t('page.members.emptyFilterText')" + :delete-text="$t('buttons.delete')" + :remove-text="$t('buttons.remove')" + :owner-count="ownerCount" + :owner-role="ownerRole" @tableFilteredRows="onFilteredRows" @setRole="setRole" @selectedItem="prepareDeletion" @@ -46,12 +46,12 @@ :filter="filter" :busy="isBusy" :roles="roles" - :emptyText="$t('page.members.emptyTableText')" - :emptyFilteredText="$t('page.members.emptyFilterText')" - :deleteText="$t('buttons.delete')" - :removeText="$t('buttons.remove')" - :ownerCount="ownerCount" - :ownerRole="ownerRole" + :empty-text="$t('page.members.emptyTableText')" + :empty-filtered-text="$t('page.members.emptyFilterText')" + :delete-text="$t('buttons.delete')" + :remove-text="$t('buttons.remove')" + :owner-count="ownerCount" + :owner-role="ownerRole" sort-by="email" @revokeInvitation="revokeInvitation" @resendInvitation="resendInvitation" @@ -63,11 +63,11 @@ <!-- Modal Revoke Invited Email --> <DeleteModal - descriptionKey="page.members.removeSelectedInvitation" - titleKey="page.members.deleteInvitationTitle" + description-key="page.members.removeSelectedInvitation" + title-key="page.members.deleteInvitationTitle" :visible="isDeleteInvitedUserModalVisible" - :selectedUser="selectedInvitation.userMail" - :selectedProject="projectName" + :selected-user="selectedInvitation.userMail" + :selected-project="projectName" @ok="confirmRevokeInvitation" @close="closeInvitedUserModal" /> @@ -75,33 +75,33 @@ <!--- Modal Delete Current Members ---> <DeleteModal :visible="isDeleteUserModalVisible" - :selectedUser=" + :selected-user=" candidateForDeletion.user ? candidateForDeletion.user.displayName : '' " - :selectedProject="projectName" + :selected-project="projectName" @ok="deleteUser" @close="closeUserModal" /> <!-- Modal Invitation Pending --> <InvitationPendingModal - :candidateForInvitation="candidateForInvitation" + :candidate-for-invitation="candidateForInvitation" /> <!-- Modal User Import --> <ImportUserModal - :memberHeaders="memberHeaders" - :memberRole="memberRole" + :member-headers="memberHeaders" + :member-role="memberRole" :project="project" - :projectRoles="projectRoles" + :project-roles="projectRoles" :roles="roles" @addUser="addUser" /> <!-- Modal User Invite --> <InviteUserModal - :candidateForInvitation="candidateForInvitation" - :projectName="projectName" + :candidate-for-invitation="candidateForInvitation" + :project-name="projectName" :roles="roles" @storeNewInvitation="storeNewInvitation" /> @@ -133,16 +133,9 @@ import type { SendInvitationObject, } from "@coscine/api-client/dist/types/Coscine.Api.Project"; import type { ExtendedSendInvitationObject } from "../types"; +import useNotificationStore from "@/store/notification"; export default defineComponent({ - setup() { - const mainStore = useMainStore(); - const projectStore = useProjectStore(); - const userStore = useUserStore(); - - return { mainStore, projectStore, userStore }; - }, - components: { MembersTable, UserSearchRow, @@ -151,6 +144,35 @@ export default defineComponent({ InvitationPendingModal, InviteUserModal, }, + setup() { + const mainStore = useMainStore(); + const projectStore = useProjectStore(); + const userStore = useUserStore(); + const notificationStore = useNotificationStore(); + + return { mainStore, projectStore, userStore, notificationStore }; + }, + + data() { + return { + // For controlling delete modals + isDeleteInvitedUserModalVisible: false, + isDeleteUserModalVisible: false, + // For external users + selectedInvitation: {} as InvitationReturnObject, + isRevokeInvitationModalVisible: false, + // Other + isBusy: false, + filteredRows: 0, + filter: "", + candidateForDeletion: {} as ProjectRoleObject, + candidateForInvitation: {} as ExtendedSendInvitationObject, + roleStrings: { + member: "Member", + owner: "Owner", + }, + }; + }, computed: { invitations(): InvitationReturnObject[] | null { @@ -251,27 +273,6 @@ export default defineComponent({ }, }, - data() { - return { - // For controlling delete modals - isDeleteInvitedUserModalVisible: false, - isDeleteUserModalVisible: false, - // For external users - selectedInvitation: {} as InvitationReturnObject, - isRevokeInvitationModalVisible: false, - // Other - isBusy: false, - filteredRows: 0, - filter: "", - candidateForDeletion: {} as ProjectRoleObject, - candidateForInvitation: {} as ExtendedSendInvitationObject, - roleStrings: { - member: "Member", - owner: "Owner", - }, - }; - }, - methods: { // For external users async storeNewInvitation( @@ -282,16 +283,16 @@ export default defineComponent({ try { await this.projectStore.storeInvitation(value); await this.projectStore.retrieveInvitations(this.project); - this.makeToast( - toastText, - this.$t("page.members.userManagement").toString() - ); + this.notificationStore.postNotification({ + title: this.$t("page.members.userManagement").toString(), + body: toastText, + }); } catch { - this.makeToast( - errorText, - this.$t("page.members.userManagement").toString(), - "danger" - ); + this.notificationStore.postNotification({ + title: this.$t("page.members.userManagement").toString(), + body: errorText, + variant: "danger", + }); } }, @@ -301,20 +302,16 @@ export default defineComponent({ role: selectedInvitation.roleId, email: selectedInvitation.userMail, }; - const errorText = this.$parent - .$t("page.members.invitedUserError", { - email: selectedInvitation.userMail, - }) - .toString(); - const text = this.$parent - .$t("page.members.invitedUserText", { - email: selectedInvitation.userMail, - role: selectedInvitation.roleId - ? this.getRoleNameFromId(selectedInvitation.roleId) - : "", - projectName: this.projectName, - }) - .toString(); + const errorText = this.$t("page.members.invitedUserError", { + email: selectedInvitation.userMail, + }).toString(); + const text = this.$t("page.members.invitedUserText", { + email: selectedInvitation.userMail, + role: selectedInvitation.roleId + ? this.getRoleNameFromId(selectedInvitation.roleId) + : "", + projectName: this.projectName, + }).toString(); this.storeNewInvitation(invitation, text, errorText); }, @@ -326,33 +323,28 @@ export default defineComponent({ async confirmRevokeInvitation() { if (this.selectedInvitation.id) { - const text = this.$parent - .$t("page.members.removedUser", { - email: this.selectedInvitation.userMail, - project: this.projectName, - }) - .toString(); + const text = this.$t("page.members.removedUser", { + email: this.selectedInvitation.userMail, + project: this.projectName, + }).toString(); const worked = await this.projectStore.deleteInvitation( this.selectedInvitation.id ); if (worked) { await this.projectStore.retrieveInvitations(this.project); - this.makeToast( - text, - this.$t("page.members.userManagement").toString() - ); + this.notificationStore.postNotification({ + title: this.$t("page.members.userManagement").toString(), + body: text, + }); } else { - const errorMsg = this.$parent - .$t("page.members.deleteExternalUserError", { - email: this.selectedInvitation.userMail, - }) - .toString(); - - this.makeToast( - errorMsg, - this.$t("page.members.userManagement").toString(), - "danger" - ); + const errorMsg = this.$t("page.members.deleteExternalUserError", { + email: this.selectedInvitation.userMail, + }).toString(); + this.notificationStore.postNotification({ + title: this.$t("page.members.userManagement").toString(), + body: errorMsg, + variant: "danger", + }); } this.isDeleteInvitedUserModalVisible = false; @@ -380,23 +372,24 @@ export default defineComponent({ : this.roleStrings.member; } - let text = this.$parent - .$t("page.members.changedRole", { - project: this.projectName, - role: - projectRole.role && projectRole.role.id - ? this.getRoleNameFromId(projectRole.role.id) - : "", - user: - projectRole.user && projectRole.user.displayName - ? projectRole.user.displayName - : "", - }) - .toString(); + let text = this.$t("page.members.changedRole", { + project: this.projectName, + role: + projectRole.role && projectRole.role.id + ? this.getRoleNameFromId(projectRole.role.id) + : "", + user: + projectRole.user && projectRole.user.displayName + ? projectRole.user.displayName + : "", + }).toString(); await this.projectStore.storeProjectRole(projectRole); await this.getProjectRoles(); - this.makeToast(text, this.$t("page.members.userManagement").toString()); + this.notificationStore.postNotification({ + title: this.$t("page.members.userManagement").toString(), + body: text, + }); }, getRoleNameFromId(roleId: string): string | null | undefined { @@ -416,23 +409,24 @@ export default defineComponent({ projectRole.projectId = this.project.id; } - let text = this.$parent - .$t("page.members.addedUser", { - project: this.projectName, - role: - projectRole.role && projectRole.role.id - ? this.getRoleNameFromId(projectRole.role.id) - : "", - user: - projectRole.user && projectRole.user.displayName - ? projectRole.user.displayName - : "", - }) - .toString(); + let text = this.$t("page.members.addedUser", { + project: this.projectName, + role: + projectRole.role && projectRole.role.id + ? this.getRoleNameFromId(projectRole.role.id) + : "", + user: + projectRole.user && projectRole.user.displayName + ? projectRole.user.displayName + : "", + }).toString(); await this.projectStore.storeProjectRole(projectRole); await this.getProjectRoles(); - this.makeToast(text, this.$t("page.members.userManagement").toString()); + this.notificationStore.postNotification({ + title: this.$t("page.members.userManagement").toString(), + body: text, + }); if (callback) { callback(); } @@ -479,15 +473,16 @@ export default defineComponent({ }, async deleteUser() { - const text = this.$parent - .$t("page.members.removedUser", { - email: this.candidateForDeletion.user?.displayName, - project: this.projectName, - }) - .toString(); + const text = this.$t("page.members.removedUser", { + email: this.candidateForDeletion.user?.displayName, + project: this.projectName, + }).toString(); await this.projectStore.deleteProjectRole(this.candidateForDeletion); await this.getProjectRoles(); - this.makeToast(text, this.$t("page.members.userManagement").toString()); + this.notificationStore.postNotification({ + title: this.$t("page.members.userManagement").toString(), + body: text, + }); this.isDeleteUserModalVisible = false; }, @@ -503,16 +498,6 @@ export default defineComponent({ this.filteredRows = value; }, - makeToast(text = "Message", givenTitle = "Title", toastVariant = "") { - this.$root.$bvToast.toast(text, { - title: givenTitle, - autoHideDelay: 5000, - variant: toastVariant, - toaster: "b-toaster-bottom-right", - noCloseButton: true, - }); - }, - setFilter(filter: string) { this.filter = filter; }, diff --git a/src/modules/project/pages/ProjectPage.vue b/src/modules/project/pages/ProjectPage.vue index a122dd17a8f01f3ee2f2bad8fa08bf331f34c51a..c2d1d0fe8600e80be64e39ebaead256f42cf9799 100644 --- a/src/modules/project/pages/ProjectPage.vue +++ b/src/modules/project/pages/ProjectPage.vue @@ -13,15 +13,24 @@ :to="toCreateResource()" @open-card="openCreateResource($event)" /> + <!-- Loading Card Placeholder --> + <CoscineCard + v-if="!resources" + :to="{}" + :title="$t('default.loading')" + :is-loading="!resources" + /> + <!-- Content Cards --> <CoscineCard v-for="(resource, index) in resources" + v-else :key="index" :title="resource.displayName" type="resource" - :badge_visibility="resource.archived" - :badge_text="$t('default.archived')" + :badge-visibility="resource.archived" + :badge-text="$t('default.archived')" :to="toResource(resource)" - :toSettings="toResourceSettings(resource)" + :to-settings="toResourceSettings(resource)" @open-card="openResource($event, resource)" @open-card-settings="openResourceSettings($event, resource)" /> @@ -47,13 +56,21 @@ :to="toCreateSubProject()" @open-card="openCreateProject($event)" /> + <!-- Loading Card Placeholder --> + <CoscineCard + v-if="!subProjects" + :to="{}" + :title="$t('default.loading')" + :is-loading="!subProjects" + /> + <!-- Content Cards --> <CoscineCard - v-for="(project, index) in subProjects" + v-for="(subProject, index) in subProjects" :key="index" - :title="project.displayName" + :title="subProject.displayName" type="project" - :to="toSubProject(project)" - @open-card="openProject($event, project)" + :to="toSubProject(subProject)" + @open-card="openProject($event, subProject)" /> </b-card-group> </div> @@ -77,6 +94,9 @@ import useMainStore from "@/store/index"; import useResourceStore from "@/modules/resource/store"; export default defineComponent({ + components: { + MembersList, + }, setup() { const mainStore = useMainStore(); const projectStore = useProjectStore(); @@ -85,17 +105,6 @@ export default defineComponent({ return { mainStore, projectStore, resourceStore }; }, - props: { - loading: { - default: false, - type: Boolean, - }, - }, - - components: { - MembersList, - }, - computed: { project(): ProjectObject | null { return this.projectStore.currentProject; diff --git a/src/modules/project/pages/Quota.vue b/src/modules/project/pages/Quota.vue index 2b1374e840835510660165ae109faa8695cbe2cf..990276430c31a8ef4a35177a7bf8675e7f905f7b 100644 --- a/src/modules/project/pages/Quota.vue +++ b/src/modules/project/pages/Quota.vue @@ -49,10 +49,10 @@ <coscine-form-group class="projectQuotaSlider" :label=" - selectedQuota.allocated + - $t('page.quota.rangeText1').toString() + - selectedQuota.maximum + - $t('page.quota.rangeText2').toString() + $t('page.quota.rangeText', { + allocated: selectedQuota.allocated, + maximum: selectedQuota.maximum, + }) " :disabled=" selectedResourceTypeInformation && @@ -60,7 +60,7 @@ " > <div class="rangeVisual"> - {{ totalAllocatedSpace }}{{ $t("page.quota.gb") }} + {{ $t("page.quota.gb", { number: totalAllocatedSpace }) }} <b-form-input v-model="selectedQuota.allocated" type="range" @@ -69,7 +69,7 @@ :disabled="storingQuota" @change="changeProjectQuota" ></b-form-input> - {{ selectedQuota.maximum }}{{ $t("page.quota.gb") }} + {{ $t("page.quota.gb", { number: selectedQuota.maximum }) }} </div> </coscine-form-group> @@ -125,7 +125,7 @@ <!-- Reserved Cell Contents --> <template #cell(allocated)="data"> - {{ data.item.allocated }}{{ $t("page.quota.gb") }} + {{ $t("page.quota.gb", { number: data.item.allocated }) }} </template> <!-- Used Cell Contents --> @@ -136,7 +136,7 @@ <!-- Adjust Quota Slider Contents --> <template #cell(adjust)="data"> <div class="rangeVisual"> - {{ data.item.used }}{{ $t("page.quota.gb") }} + {{ $t("page.quota.gb", { number: data.item.used }) }} <b-form-input v-model="data.item.allocated" type="range" @@ -145,7 +145,7 @@ :disabled="storingQuota" @change="changeResourceQuota(data.item)" /> - {{ data.item.maximum }}{{ $t("page.quota.gb") }} + {{ $t("page.quota.gb", { number: data.item.maximum }) }} </div> </template> @@ -182,6 +182,7 @@ import type { ProjectQuotaReturnObject as ResourceQuota, UpdateResourceObject, } from "@coscine/api-client/dist/types/Coscine.Api.Quota"; +import useNotificationStore from "@/store/notification"; interface ExtendedResourceQuota extends ResourceQuota { maximum?: number; @@ -192,8 +193,33 @@ export default defineComponent({ const mainStore = useMainStore(); const projectStore = useProjectStore(); const resourceStore = useResourceStore(); + const notificationStore = useNotificationStore(); - return { mainStore, projectStore, resourceStore }; + return { mainStore, projectStore, resourceStore, notificationStore }; + }, + + data() { + return { + selectedQuota: { + maximum: 0, + allocated: 0, + used: 0, + } as ProjectQuotaReturnObject, + selectedResourceTypeId: null as null | string, + + resourceQuotas: [] as ExtendedResourceQuota[], + totalAllocatedSpace: 0, + + tableFields: [ + { key: "name", sortable: true }, + { key: "allocated", sortable: true }, + "used", + "adjust", + ], + loadingData: false, + + storingQuota: false, + }; }, computed: { @@ -259,30 +285,6 @@ export default defineComponent({ }, }, - data() { - return { - selectedQuota: { - maximum: 0, - allocated: 0, - used: 0, - } as ProjectQuotaReturnObject, - selectedResourceTypeId: null as null | string, - - resourceQuotas: [] as ExtendedResourceQuota[], - totalAllocatedSpace: 0, - - tableFields: [ - { key: "name", sortable: true }, - { key: "allocated", sortable: true }, - "used", - "adjust", - ], - loadingData: false, - - storingQuota: false, - }; - }, - watch: { resourceTypeQuota() { if (this.resourceTypeQuota) { @@ -337,27 +339,25 @@ export default defineComponent({ ); await this.projectStore.retrieveQuotas(this.project); this.calculateSpaceNeeds(); - this.makeToast( - this.$parent - .$t("page.quota.resourceTypeQuotaChangedSuccessTitle") - .toString(), - this.$parent - .$t("page.quota.resourceTypeQuotaChangedSuccessBody", { - ProjectName: this.project.displayName, - AmountInGB: this.selectedQuota.allocated, - }) - .toString() - ); + this.notificationStore.postNotification({ + title: this.$t( + "page.quota.resourceTypeQuotaChangedSuccessTitle" + ).toString(), + body: this.$t("page.quota.resourceTypeQuotaChangedSuccessBody", { + ProjectName: this.project.displayName, + AmountInGB: this.selectedQuota.allocated, + }).toString(), + }); } catch { - this.makeToast( - this.$parent - .$t("page.quota.resourceTypeQuotaChangedFailureTitle") - .toString(), - this.$parent - .$t("page.quota.resourceTypeQuotaChangedFailureBody") - .toString(), - true - ); + this.notificationStore.postNotification({ + title: this.$t( + "page.quota.resourceTypeQuotaChangedFailureTitle" + ).toString(), + body: this.$t( + "page.quota.resourceTypeQuotaChangedFailureBody" + ).toString(), + variant: "warning", + }); } finally { this.storingQuota = false; } @@ -377,45 +377,27 @@ export default defineComponent({ ); await this.projectStore.retrieveQuotas(this.project); this.calculateSpaceNeeds(); - this.makeToast( - this.$parent - .$t("page.quota.resourceQuotaChangedSuccessTitle") - .toString(), - this.$parent - .$t("page.quota.resourceQuotaChangedSuccessBody", { - ResourceName: resourceQuotaObject.name, - AmountInGB: resourceQuotaObject.allocated, - }) - .toString() - ); + this.notificationStore.postNotification({ + title: this.$t( + "page.quota.resourceQuotaChangedSuccessTitle" + ).toString(), + body: this.$t("page.quota.resourceQuotaChangedSuccessBody", { + ResourceName: resourceQuotaObject.name, + AmountInGB: resourceQuotaObject.allocated, + }).toString(), + }); } catch { - this.makeToast( - this.$parent - .$t("page.quota.resourceQuotaChangedFailureTitle") - .toString(), - this.$parent - .$t("page.quota.resourceQuotaChangedFailureBody") - .toString(), - true - ); - } finally { - this.storingQuota = false; - } - }, - makeToast(givenTitle = "Title", text = "Message", error = false) { - if (error) { - this.$root.$bvToast.toast(text, { - title: givenTitle, - noAutoHide: true, + this.notificationStore.postNotification({ + title: this.$t( + "page.quota.resourceQuotaChangedFailureTitle" + ).toString(), + body: this.$t( + "page.quota.resourceQuotaChangedFailureBody" + ).toString(), variant: "warning", - toaster: "b-toaster-bottom-right", - }); - } else { - this.$root.$bvToast.toast(text, { - title: givenTitle, - toaster: "b-toaster-bottom-right", - noCloseButton: true, }); + } finally { + this.storingQuota = false; } }, selectFirstResourceType() { diff --git a/src/modules/project/pages/Settings.vue b/src/modules/project/pages/Settings.vue index a9fd4a1f15911bc5ab89b6237aa9ae37d33a3d5d..a6923f79f8987f63f595e18e663f88c8dea12788 100644 --- a/src/modules/project/pages/Settings.vue +++ b/src/modules/project/pages/Settings.vue @@ -8,7 +8,7 @@ <FormNaming v-model="projectForm" :disabled="!isOwner" - :isLoading="isLoading" + :is-loading="isLoading" @validation="formValidations.naming = $event" /> @@ -17,9 +17,9 @@ <FormMetadata v-model="projectForm" :disabled="!isOwner" - :isLoading="isLoading" - :currentProject="project" - :parentProject="parentProject" + :is-loading="isLoading" + :current-project="project" + :parent-project="parentProject" @validation="formValidations.metadata = $event" /> @@ -29,7 +29,6 @@ type="submit" variant="primary" class="float-right" - @click.prevent="clickSave" :disabled=" formValidations.naming.$invalid || formValidations.metadata.$invalid || @@ -37,6 +36,7 @@ !formValidations.metadata.$anyDirty) || isWaitingForResponse " + @click.prevent="clickSave" > {{ $t("buttons.submit") }}</b-button > @@ -57,12 +57,12 @@ <DeleteProjectModal v-if="project" :open="isDeleteModalVisible" - :displayName="project.displayName" + :display-name="project.displayName" @close="isDeleteModalVisible = false" @clickDelete="clickDelete" /> - <LoadingSpinner :isWaitingForResponse="isWaitingForResponse" /> + <LoadingSpinner :is-waiting-for-response="isWaitingForResponse" /> </div> <div class="col-sm-2" /> </b-row> @@ -90,20 +90,21 @@ import type { VisibilityObject, } from "@coscine/api-client/dist/types/Coscine.Api.Project"; import { navigateToProject } from "@/router"; +import useNotificationStore from "@/store/notification"; export default defineComponent({ - setup() { - const mainStore = useMainStore(); - const projectStore = useProjectStore(); - - return { mainStore, projectStore }; - }, - components: { FormNaming, FormMetadata, DeleteProjectModal, }, + setup() { + const mainStore = useMainStore(); + const projectStore = useProjectStore(); + const notificationStore = useNotificationStore(); + + return { mainStore, projectStore, notificationStore }; + }, data() { return { @@ -190,20 +191,6 @@ export default defineComponent({ } }, - makeToast( - text = "Message", - givenTitle = "Title", - variant: string | undefined = undefined - ) { - this.$root.$bvToast.toast(text, { - title: givenTitle, - autoHideDelay: 5000, - toaster: "b-toaster-bottom-right", - variant: variant, - noCloseButton: true, - }); - }, - async clickDelete() { this.isDeleteModalVisible = false; if (this.project) { @@ -216,18 +203,18 @@ export default defineComponent({ // Refresh the project information in the store await this.projectStore.refreshProjectInformation(parentProject); // Replace the current location with parent project or project list - this.makeToast( - this.$t("toast.onDelete.success.message").toString(), - this.$t("toast.onDelete.success.title").toString() - ); + this.notificationStore.postNotification({ + title: this.$t("toast.onDelete.success.title").toString(), + body: this.$t("toast.onDelete.success.message").toString(), + }); navigateToProject(parentProject); } else { // On Failure - this.makeToast( - this.$t("toast.onDelete.failure.message").toString(), - this.$t("toast.onDelete.failure.title").toString(), - "danger" - ); + this.notificationStore.postNotification({ + title: this.$t("toast.onDelete.failure.title").toString(), + body: this.$t("toast.onDelete.failure.message").toString(), + variant: "danger", + }); } } }, @@ -255,17 +242,17 @@ export default defineComponent({ this.formValidations.metadata.$reset(); // Refresh the project information in the store await this.projectStore.refreshProjectInformation(this.project); - this.makeToast( - this.$t("toast.onSave.success.message").toString(), - this.$t("toast.onSave.success.title").toString() - ); + this.notificationStore.postNotification({ + title: this.$t("toast.onSave.success.title").toString(), + body: this.$t("toast.onSave.success.message").toString(), + }); } else { // On Failure - this.makeToast( - this.$t("toast.onSave.failure.message").toString(), - this.$t("toast.onSave.failure.title").toString(), - "danger" - ); + this.notificationStore.postNotification({ + title: this.$t("toast.onSave.failure.title").toString(), + body: this.$t("toast.onSave.failure.message").toString(), + variant: "danger", + }); } }, }, diff --git a/src/modules/project/pages/components/FormMetadata.vue b/src/modules/project/pages/components/FormMetadata.vue index af92c2fc22390a1038fced1c16a33440d5a9e1e3..0539b2f3ced6c3e40832d3d4ef93bca1bf2e8805 100644 --- a/src/modules/project/pages/components/FormMetadata.vue +++ b/src/modules/project/pages/components/FormMetadata.vue @@ -7,22 +7,22 @@ <coscine-form-group v-if="parentProject" :mandatory="false" - labelFor="CopyData" + label-for="CopyData" :label=" $t('form.project.copyMetadataLabel', { project: parentProject.projectName, }) " - :isLoading="isLoading" + :is-loading="isLoading" type="button" class="d-flex align-items-center" > <b-button - variant="secondary" id="project_copy_button" + variant="secondary" size="sm" - @click.prevent="copyMetadataFromParent" :disabled="disabled" + @click.prevent="copyMetadataFromParent" > {{ $t("buttons.copyMetadata") }}</b-button > @@ -31,9 +31,9 @@ <!-- Principal Investigators --> <coscine-form-group :mandatory="true" - labelFor="PrincipleInvestigators" + label-for="PrincipleInvestigators" :label="$t('form.project.projectPrincipleInvestigatorsLabel')" - :isLoading="isLoading" + :is-loading="isLoading" type="input" > <b-form-input @@ -65,9 +65,9 @@ <!-- Project Start --> <coscine-form-group :mandatory="true" - labelFor="StartDate" + label-for="StartDate" :label="$t('form.project.projectStartLabel')" - :isLoading="isLoading" + :is-loading="isLoading" type="input" > <b-form-datepicker @@ -90,9 +90,9 @@ <!-- Project End --> <coscine-form-group :mandatory="true" - labelFor="EndDate" + label-for="EndDate" :label="$t('form.project.projectEndLabel')" - :isLoading="isLoading" + :is-loading="isLoading" type="input" > <b-form-datepicker @@ -114,9 +114,9 @@ <!-- Discipline --> <coscine-form-group :mandatory="true" - labelFor="Discipline" + label-for="Discipline" :label="$t('form.project.projectDisciplineLabel')" - :isLoading="isLoading" + :is-loading="isLoading" type="input" > <multiselect @@ -146,9 +146,9 @@ <!-- Participating Organizations --> <coscine-form-group :mandatory="true" - labelFor="Organization" + label-for="Organization" :label="$t('form.project.projectOrganizationLabel')" - :isLoading="isLoading" + :is-loading="isLoading" type="input" > <multiselect @@ -185,9 +185,9 @@ <!-- Project Keywords --> <coscine-form-group - labelFor="Keywords" + label-for="Keywords" :label="$t('form.project.projectKeywordsLabel')" - :isLoading="isLoading" + :is-loading="isLoading" type="input" > <multiselect @@ -223,28 +223,28 @@ <!-- Visibility --> <coscine-form-group :mandatory="true" - labelFor="Visibility" + label-for="Visibility" :label="$t('form.project.projectMetadataVisibilityLabel')" - :isLoading="isLoading" + :is-loading="isLoading" type="input" > <b-form-radio-group - name="radios-stacked" v-model="selectedVisibility" - @change="setVisibility(selectedVisibility)" + name="radios-stacked" :options="visibilities" text-field="displayName" value-field="id" stacked :disabled="disabled" + @change="setVisibility(selectedVisibility)" /> </coscine-form-group> <!-- Grant ID --> <coscine-form-group - labelFor="GrantId" + label-for="GrantId" :label="$t('form.project.projectGrantIdLabel')" - :isLoading="isLoading" + :is-loading="isLoading" type="input" > <b-form-input @@ -289,24 +289,20 @@ import useProjectStore from "../../store"; import useMainStore from "@/store/index"; export default defineComponent({ - setup() { - const mainStore = useMainStore(); - const projectStore = useProjectStore(); - - return { mainStore, projectStore }; - }, - + mixins: [validationMixin], props: { value: { type: Object as PropType<ProjectObject>, required: true, }, currentProject: { - type: Object as PropType<ProjectObject>, + default: null, + type: [Object, null] as PropType<ProjectObject | null>, required: false, }, parentProject: { - type: Object as PropType<ProjectObject>, + default: null, + type: [Object, null] as PropType<ProjectObject | null>, required: false, }, disabled: { @@ -318,8 +314,18 @@ export default defineComponent({ type: Boolean, }, }, + emits: { + validation: (input: Validation) => { + return input ? true : false; + }, + }, - mixins: [validationMixin], + setup() { + const mainStore = useMainStore(); + const projectStore = useProjectStore(); + + return { mainStore, projectStore }; + }, validations: { projectForm: { @@ -351,10 +357,6 @@ export default defineComponent({ }, }, - created() { - this.onProjectLoaded(); - }, - data() { return { projectForm: this.value, @@ -385,12 +387,6 @@ export default defineComponent({ }, }, - emits: { - validation: (input: Validation) => { - return input ? true : false; - }, - }, - watch: { currentProject() { this.onProjectLoaded(); @@ -432,6 +428,10 @@ export default defineComponent({ }, }, + created() { + this.onProjectLoaded(); + }, + methods: { onProjectLoaded() { if (this.currentProject) { diff --git a/src/modules/project/pages/components/FormNaming.vue b/src/modules/project/pages/components/FormNaming.vue index e2be4519bdb0f1fe21f6473ffdb35f21b264de7a..22a3e93b2acd1e14e79670c497ea92f5d19ffad9 100644 --- a/src/modules/project/pages/components/FormNaming.vue +++ b/src/modules/project/pages/components/FormNaming.vue @@ -3,15 +3,14 @@ <!-- Project Name --> <CoscineFormGroup :mandatory="true" - labelFor="ProjectName" + label-for="ProjectName" :label="$t('form.project.projectNameLabel')" - :isLoading="isLoading" + :is-loading="isLoading" type="input" > <b-form-input id="ProjectName" v-model="$v.projectForm.projectName.$model" - @input="translateProjectNameToDisplayName" :state=" $v.projectForm.projectName.$dirty ? !$v.projectForm.projectName.$error @@ -21,6 +20,7 @@ :maxlength="maxLengthFromValidation($v.projectForm.projectName)" required :disabled="disabled" + @input="translateProjectNameToDisplayName" /> <div class="invalid-tooltip"> {{ @@ -34,15 +34,14 @@ <!-- Display Name --> <CoscineFormGroup :mandatory="true" - labelFor="DisplayName" + label-for="DisplayName" :label="$t('form.project.displayNameLabel')" - :isLoading="isLoading" + :is-loading="isLoading" type="input" > <b-form-input id="DisplayName" v-model="$v.projectForm.displayName.$model" - @input="isLockedDisplayName = true" :state=" $v.projectForm.displayName.$dirty ? !$v.projectForm.displayName.$error @@ -52,6 +51,7 @@ :maxlength="maxLengthFromValidation($v.projectForm.displayName)" required :disabled="disabled" + @input="isLockedDisplayName = true" /> <div class="invalid-tooltip"> {{ @@ -65,9 +65,9 @@ <!-- Project Description --> <CoscineFormGroup :mandatory="true" - labelFor="Description" + label-for="Description" :label="$t('form.project.projectDescriptionLabel')" - :isLoading="isLoading" + :is-loading="isLoading" type="input" > <b-form-textarea @@ -103,6 +103,27 @@ import type { ProjectObject } from "@coscine/api-client/dist/types/Coscine.Api.P export default defineComponent({ mixins: [validationMixin], + props: { + value: { + type: Object as PropType<ProjectObject>, + required: true, + }, + disabled: { + default: false, + type: Boolean, + }, + isLoading: { + default: false, + type: Boolean, + }, + }, + + emits: { + validation: (input: Validation) => { + return input ? true : false; + }, + }, + validations: { projectForm: { projectName: { @@ -127,27 +148,6 @@ export default defineComponent({ }; }, - props: { - value: { - type: Object as PropType<ProjectObject>, - required: true, - }, - disabled: { - default: false, - type: Boolean, - }, - isLoading: { - default: false, - type: Boolean, - }, - }, - - emits: { - validation: (input: Validation) => { - return input ? true : false; - }, - }, - watch: { projectForm: { handler() { diff --git a/src/modules/project/pages/components/MembersList.vue b/src/modules/project/pages/components/MembersList.vue index 540f88afbc6ec61b94c7fa7dd4530dbb8aeeeb65..1ed91e6763b83bd029ab6fda2bd1f8b8e99c30f8 100644 --- a/src/modules/project/pages/components/MembersList.vue +++ b/src/modules/project/pages/components/MembersList.vue @@ -2,6 +2,9 @@ <div> <CoscineHeadline :headline="$tc('page.project.member', 2)" /> <!-- Members --> + <b-row v-if="!projectRoles" align-h="center" class="my-4"> + <b-spinner variant="secondary" /> + </b-row> <div class="list"> <div class="user-complete-name-list container-fluid"> <span v-for="(projectRole, index) in projectRoles" :key="index"> @@ -11,10 +14,16 @@ <!-- Member Details --> <b-col class="user-details"> + <!-- Member Display Name --> {{ projectRole.user.displayName }} <br /> + <!-- Member Email --> <a - v-b-tooltip.hover.bottom="projectRole.user.emailAddress" + v-b-tooltip.hover.bottom="{ + title: projectRole.user.emailAddress, + boundary: 'viewport', + }" + class="text-secondary" :href="'mailto:' + projectRole.user.emailAddress" > {{ projectRole.user.emailAddress }} @@ -22,24 +31,28 @@ </b-col> <!-- Leave Button --> - <b-button - id="leave" - class="float-right" - variant="primary" - name="leave" - size="sm" - v-if="projectRole.user.id === currentUser.id" - v-on:click="leaveModal = true" - :disabled="ownerCount < 2 && isOwner" - tabindex="0" - v-b-tooltip.hover.bottom - :title=" - ownerCount < 2 && isOwner - ? $t('page.project.members.tooltipDisabled') - : $t('page.project.members.tooltip') - " - >{{ $t("buttons.leave") }}</b-button + <span + v-b-tooltip.hover.left="{ + title: + ownerCount < 2 && isOwner + ? $t('page.project.members.tooltipDisabled') + : $t('page.project.members.tooltip'), + boundary: 'viewport', + }" > + <b-button + v-if="projectRole.user.id === currentUser.id" + class="float-right" + variant="primary" + name="leave" + size="sm" + :disabled="ownerCount < 2 && isOwner" + tabindex="0" + @click="leaveModal = true" + > + {{ $t("buttons.leave") }} + </b-button> + </span> </b-row> </span> </div> @@ -73,11 +86,11 @@ <!-- Leave Modal Buttons --> <b-button + ref="modalLeaveProjectCancel" class="float-right" variant="primary" - @click="leaveModal = false" - ref="modalLeaveProjectCancel" autofocus + @click="leaveModal = false" >{{ $t("buttons.cancel") }}</b-button > <b-button class="float-Left" variant="danger" @click="leaveProject">{{ diff --git a/src/modules/project/pages/components/MembersTable.vue b/src/modules/project/pages/components/MembersTable.vue index 29d748c6a610bd95f52b483f754afed10efaa3e3..76a96a7d1ca2bdb38aed4630b562e0e2c2a657ac 100644 --- a/src/modules/project/pages/components/MembersTable.vue +++ b/src/modules/project/pages/components/MembersTable.vue @@ -31,16 +31,16 @@ <!-- Project Members - Role Column --> <template #cell(role)="row"> - <div class="noOverflow" v-if="row.item.role"> + <div v-if="row.item.role" class="noOverflow"> <b-form-select v-model="row.item.role.id" :options="roles" - @change="role(row.item)" :disabled=" ownerCount === 1 && ownerRole && row.item.role.id === ownerRole.id " text-field="displayName" value-field="id" + @change="role(row.item)" /> </div> </template> @@ -54,10 +54,10 @@ <!-- Project Members - Actions Column --> <template #cell(memberActions)="row"> - <div class="noOverflow" v-if="row.item.role"> + <div v-if="row.item.role" class="noOverflow"> <!-- Remove Member --> <b-button - :btnText="removeText" + :btn-text="removeText" variant="danger" size="sm" :disabled=" @@ -88,7 +88,7 @@ class="leftActionBtn" size="sm" variant="danger" - :btnText="deleteText" + :btn-text="deleteText" @click="revokeInvitation(selectedInvitation.item)" >{{ deleteText }}</b-button > @@ -97,8 +97,8 @@ <b-button class="rightActionBtn" size="sm" - @click="resendInvitation(selectedInvitation.item)" :disabled="!checkExpiration(selectedInvitation.item.expiration)" + @click="resendInvitation(selectedInvitation.item)" >{{ $t("buttons.resend") }} </b-button> </div> @@ -118,18 +118,13 @@ import type { export default defineComponent({ name: "MembersTable", - data() { - return { - sortDesc: false, - filteredRows: 0, - }; - }, props: { headers: { required: true, type: Array, }, id: { + default: "membersTable", type: String, }, items: { @@ -137,17 +132,19 @@ export default defineComponent({ type: Array, }, filter: { - type: String, default: "", + type: String, }, busy: { type: Boolean, default: false, }, emptyText: { + default: "Empty", type: String, }, emptyFilteredText: { + default: "Empty", type: String, }, ownerCount: { @@ -159,12 +156,15 @@ export default defineComponent({ default: null, }, deleteText: { + default: "Delete", type: String, }, removeText: { + default: "Remove", type: String, }, roles: { + default: null, type: [Array, null] as PropType<RoleObject[] | null>, }, sortBy: { @@ -172,6 +172,12 @@ export default defineComponent({ type: String, }, }, + data() { + return { + sortDesc: false, + filteredRows: 0, + }; + }, methods: { onFiltered(filteredItems: ProjectRoleObject[]) { this.filteredRows = filteredItems.length; diff --git a/src/modules/project/pages/components/UserSearchRow.vue b/src/modules/project/pages/components/UserSearchRow.vue index 180d78e32b52416b2ee15acb97a4e3e5d783604b..cef3bbf3183518e8eb51aea2ad0ec36076c2a0bb 100644 --- a/src/modules/project/pages/components/UserSearchRow.vue +++ b/src/modules/project/pages/components/UserSearchRow.vue @@ -4,7 +4,7 @@ <div class="adaptAlign"> <b-row> <!-- Invitation Search Field --> - <b-col sm="5" @keydown.enter.prevent.self="" id="firstCol"> + <b-col id="firstCol" sm="5" @keydown.enter.prevent.self=""> <v-select v-model="selectedAddingUser" :placeholder="$t('page.members.searchUserPlaceholder')" @@ -13,11 +13,11 @@ 'no-results': queriedUsers.length === 0, }" :options="queriedUsers" - :filterBy="filterMock" - @input="setNewUser" - @search="triggerFetchOptions" + :filter-by="filterMock" :selectable="(option) => !option.hasProjectRole" label="displayName" + @input="setNewUser" + @search="triggerFetchOptions" > <template v-if="searchString === ''" slot="no-options"> {{ $t("page.members.pleaseTypeSomething") }} @@ -57,7 +57,7 @@ </b-col> <!-- Role Drop-Down --> - <b-col sm="2" id="secondCol"> + <b-col id="secondCol" sm="2"> <b-form-select :options="roles" :value=" @@ -67,29 +67,29 @@ ? memberRole.id : null " - @input="setNewRole" text-field="displayName" value-field="id" + @input="setNewRole" > </b-form-select> </b-col> <!-- Buttons --> - <b-col sm="5" id="thirdCol"> + <b-col id="thirdCol" sm="5"> <!-- Add User --> <b-button v-if="validInvitation && !validSelection" name="inviteUserToProject" - @click="prepareInvitation(newUserRole)" :disabled="!validInvitation" + @click="prepareInvitation(newUserRole)" >{{ $t("buttons.invite") }}</b-button > <!-- Import --> <b-button v-else name="addUserToProject" - @click="addUser(newUserRole)" :disabled="!validSelection" + @click="addUser(newUserRole)" >{{ $t("buttons.addUser") }}</b-button > <b-button @@ -104,17 +104,17 @@ <!-- Members Search Field --> <b-col + id="fourthCol" sm="3" align-self="end" @keydown.enter.prevent.self="" - id="fourthCol" > <b-input-group> <b-form-input - type="search" id="filterInput" - @input="setFilter" + type="search" :placeholder="$t('page.members.typeToSearch')" + @input="setFilter" ></b-form-input> </b-input-group> </b-col> @@ -128,7 +128,7 @@ import { defineComponent, PropType } from "vue-demi"; import vSelect from "vue-select"; import "vue-select/dist/vue-select.css"; -Vue.component("v-select", vSelect); +Vue.component("VSelect", vSelect); import useUserStore from "@/modules/user/store"; @@ -140,6 +140,22 @@ import type { import type { UserObject } from "@coscine/api-client/dist/types/Coscine.Api.User"; export default defineComponent({ + props: { + memberRole: { + default: null, + type: [Object, null, undefined] as PropType< + RoleObject | null | undefined + >, + }, + project: { + default: null, + type: [Object, null] as PropType<ProjectObject | null>, + }, + roles: { + default: null, + type: [Array, null] as PropType<RoleObject[] | null>, + }, + }, setup() { const userStore = useUserStore(); @@ -154,19 +170,6 @@ export default defineComponent({ selectedAddingUser: null as UserObject | null, }; }, - props: { - memberRole: { - type: [Object, null, undefined] as PropType< - RoleObject | null | undefined - >, - }, - project: { - type: [Object, null] as PropType<ProjectObject | null>, - }, - roles: { - type: [Array, null] as PropType<RoleObject[] | null>, - }, - }, computed: { validEmail(): boolean { const emailRegex = @@ -263,7 +266,7 @@ export default defineComponent({ async fetchUserOptions(search: string, loading: (value: boolean) => void) { if (search && this.project && this.project.id) { loading(true); - this.queriedUsers = await this.userStore.queryUser( + this.queriedUsers = await this.userStore.getUser( search, this.project.id ); diff --git a/src/modules/project/pages/components/modals/DeleteProjectModal.vue b/src/modules/project/pages/components/modals/DeleteProjectModal.vue index e5963bb0fd315806629a84ae678812f2d4de2f92..b972dc0ce1985a0b7829059e9fc19ae9889d7998 100644 --- a/src/modules/project/pages/components/modals/DeleteProjectModal.vue +++ b/src/modules/project/pages/components/modals/DeleteProjectModal.vue @@ -3,9 +3,9 @@ <b-modal id="deleteProjectModal" v-model="isOpen" + :hide-footer="true" @close="close" @hidden="hidden" - :hide-footer="true" > <!-- Title --> <template #modal-title> @@ -36,18 +36,16 @@ </div> </b-form-group> - <template> - <!-- Modal Cancel Button --> - <b-button @click="close">{{ $t("buttons.cancel") }}</b-button> - <!-- Modal Delete Button --> - <b-button - @click="clickDelete" - variant="danger" - class="float-right" - :disabled="!nameValid" - >{{ $t("buttons.delete") }}</b-button - > - </template> + <!-- Modal Cancel Button --> + <b-button @click="close">{{ $t("buttons.cancel") }}</b-button> + <!-- Modal Delete Button --> + <b-button + variant="danger" + class="float-right" + :disabled="!nameValid" + @click="clickDelete" + >{{ $t("buttons.delete") }}</b-button + > </b-modal> </template> @@ -75,6 +73,11 @@ export default defineComponent({ }, }, + emits: { + clickDelete: null, + close: null, + }, + data() { return { isOpen: false, @@ -111,11 +114,6 @@ export default defineComponent({ } }, }, - - emits: { - clickDelete: null, - close: null, - }, }); </script> diff --git a/src/modules/project/pages/components/modals/ImportUserModal.vue b/src/modules/project/pages/components/modals/ImportUserModal.vue index 148ab409092bf2b7d8d64dacbf3890ba39c74326..b29c55fd6a01a1eb1014886fc1523cfb43aa6358 100644 --- a/src/modules/project/pages/components/modals/ImportUserModal.vue +++ b/src/modules/project/pages/components/modals/ImportUserModal.vue @@ -2,9 +2,9 @@ <b-modal id="importUserModal" :title="$t('page.members.importUserTitle')" - @hidden="resetModal" size="lg" hide-footer + @hidden="resetModal" > <!-- Select Project Drop-Down --> <b-row> @@ -16,11 +16,11 @@ }}</b-form-select-option> </template> <b-form-select-option - v-for="project in additionalProjects" - :value="project.id" - :key="project.id" + v-for="additionalProject in additionalProjects" + :key="additionalProject.id" + :value="additionalProject.id" > - {{ project.projectName }} + {{ additionalProject.projectName }} </b-form-select-option> </b-form-select> </b-col> @@ -37,9 +37,9 @@ :headers="memberHeaders" :items="additionalMembers" :roles="roles" - :emptyText="$t('page.members.emptyImportTableText')" - :emptyFilteredText="$t('page.members.emptyImportTableFilterText')" - :removeText="$t('page.members.removeUser')" + :empty-text="$t('page.members.emptyImportTableText')" + :empty-filtered-text="$t('page.members.emptyImportTableFilterText')" + :remove-text="$t('page.members.removeUser')" @selectedItem="removeSelectedRow" /> </div> @@ -54,8 +54,8 @@ <!-- Import --> <b-button name="importUsers" - @click="importUser" :disabled="additionalMembers.length === 0" + @click="importUser" >{{ $t("buttons.import") }}</b-button > </div> @@ -81,41 +81,45 @@ import type { } from "@coscine/api-client/dist/types/Coscine.Api.Project"; export default defineComponent({ - setup() { - const projectStore = useProjectStore(); - - return { projectStore }; - }, components: { MembersTable, }, - data() { - return { - additionalMembers: [] as ProjectRoleObject[], - isBusy: false, - selectedProject: null as string | null, - }; - }, props: { memberHeaders: { required: true, type: Array, }, memberRole: { + default: null, type: [Object, null, undefined] as PropType< RoleObject | null | undefined >, }, project: { + default: null, type: [Object, null] as PropType<ProjectObject | null>, }, projectRoles: { + default: null, type: [Array, null] as PropType<ProjectRole[] | null>, }, roles: { + default: null, type: [Array, null] as PropType<RoleObject[] | null>, }, }, + setup() { + const projectStore = useProjectStore(); + + return { projectStore }; + }, + data() { + return { + additionalMembers: [] as ProjectRoleObject[], + isBusy: false, + selectedProject: null as string | null, + }; + }, computed: { additionalProjects(): ProjectObject[] | null { if (this.projects && this.project) { diff --git a/src/modules/project/pages/components/modals/InviteUserModal.vue b/src/modules/project/pages/components/modals/InviteUserModal.vue index 0854a6a00d04e0cecbd3bc7742dd19eb8e2516fc..6368dac6f28037be25ff6c76f701a60a465526a7 100644 --- a/src/modules/project/pages/components/modals/InviteUserModal.vue +++ b/src/modules/project/pages/components/modals/InviteUserModal.vue @@ -67,9 +67,11 @@ export default defineComponent({ type: Object as PropType<ExtendedSendInvitationObject>, }, projectName: { + default: "", type: String, }, roles: { + default: null, type: [Array, null] as PropType<RoleObject[] | null>, }, }, @@ -86,20 +88,16 @@ export default defineComponent({ } }, inviteUser() { - const text = this.$parent - .$t("page.members.invitedUserText", { - email: this.candidateForInvitation.email, - role: this.candidateForInvitation.role - ? this.getRoleNameFromId(this.candidateForInvitation.role) - : "", - projectName: this.projectName, - }) - .toString(); - const errorText = this.$parent - .$t("page.members.invitedUserError", { - email: this.candidateForInvitation.email, - }) - .toString(); + const text = this.$t("page.members.invitedUserText", { + email: this.candidateForInvitation.email, + role: this.candidateForInvitation.role + ? this.getRoleNameFromId(this.candidateForInvitation.role) + : "", + projectName: this.projectName, + }).toString(); + const errorText = this.$t("page.members.invitedUserError", { + email: this.candidateForInvitation.email, + }).toString(); this.$emit( "storeNewInvitation", this.candidateForInvitation, diff --git a/src/modules/project/store.ts b/src/modules/project/store.ts index 78d963ef0556f2c60ecd4f6a0a054ea75712b353..919bcbeec940faa16fc35517f277ae178d13dfd2 100644 --- a/src/modules/project/store.ts +++ b/src/modules/project/store.ts @@ -1,6 +1,5 @@ import { defineStore } from "pinia"; import { ProjectState, VisitedProjectObject } from "./types"; -import { StatusCodes } from "http-status-codes"; import { reactive } from "vue-demi"; import { removeQueryParameterFromUrl } from "@/router"; import { defaultOrganizations } from "./data/defaultOrganizations"; @@ -35,7 +34,9 @@ import type { import type { Route } from "vue-router"; import { updatedDiff } from "deep-object-diff"; +import useNotificationStore from "@/store/notification"; import useUserStore from "../user/store"; +import type { AxiosError } from "axios"; /* Store variable name is "this.<id>Store" @@ -199,84 +200,98 @@ export const useProjectStore = defineStore({ */ actions: { async retrieveAllProjects() { - const apiResponse = await ProjectApi.projectIndex(); - if (apiResponse.status === StatusCodes.OK) { + const notificationStore = useNotificationStore(); + try { + const apiResponse = await ProjectApi.projectIndex(); this.allProjects = apiResponse.data; - } else { + } catch (error) { // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); } }, async retrieveTopLevelProjects() { - const apiResponse = await ProjectApi.projectGetTopLevelProjects(); - if (apiResponse.status === StatusCodes.OK) { + const notificationStore = useNotificationStore(); + try { + const apiResponse = await ProjectApi.projectGetTopLevelProjects(); this.topLevelProjects = apiResponse.data; - } else { + } catch (error) { // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); } }, async retrieveProjectBySlug(slug: string) { - const apiResponse = await ProjectApi.projectGetBySlug(slug); - if (apiResponse.status === StatusCodes.OK) { + const notificationStore = useNotificationStore(); + try { + const apiResponse = await ProjectApi.projectGetBySlug(slug); const project: ProjectObject = apiResponse.data; this.addProjectAsVisited(project); - } else { + } catch (error) { // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); } }, async retrieveInvitations(project: ProjectObject | null) { - if (project && project.id && project.slug) { - const apiResponse = await ProjectApi.projectListInvitations(project.id); - if (apiResponse.status === StatusCodes.OK) { + const notificationStore = useNotificationStore(); + try { + if (project && project.id && project.slug) { + const apiResponse = await ProjectApi.projectListInvitations( + project.id + ); this.visitedProjects[project.slug].invitations = apiResponse.data; } else { - // Handle other Status Codes + console.error("Selected project is null or its ID is undefined."); } - } else { - console.error("Selected project is null or its ID is undefined."); + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); } }, async retrieveSubProjects(project: ProjectObject | null) { - if (project && project.id && project.slug) { - const apiResponse = await SubProjectApi.subProjectGet(project.id); - if (apiResponse.status === StatusCodes.OK) { + const notificationStore = useNotificationStore(); + try { + if (project && project.id && project.slug) { + const apiResponse = await SubProjectApi.subProjectGet(project.id); this.visitedProjects[project.slug].subProjects = apiResponse.data; } else { - // Handle other Status Codes + console.error("Selected project is null or its ID is undefined."); } - } else { - console.error("Selected project is null or its ID is undefined."); + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); } }, async retrieveResources(project: ProjectObject | null) { - if (project && project.id && project.slug) { - const apiResponse = await ProjectApi.projectGetResources(project.id); - if (apiResponse.status === StatusCodes.OK) { - this.visitedProjects[project.slug].resources = reactive( - apiResponse.data - ); + const notificationStore = useNotificationStore(); + try { + if (project && project.id && project.slug) { + const apiResponse = await ProjectApi.projectGetResources(project.id); + this.visitedProjects[project.slug].resources = apiResponse.data; } else { - // Handle other Status Codes + console.error("Selected project is null or its ID is undefined."); } - } else { - console.error("Selected project is null or its ID is undefined."); + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); } }, async retrieveQuotas(project: ProjectObject | null) { - if (project && project.id && project.slug) { - const apiResponse = await ProjectApi.projectQuotas(project.id); - if (apiResponse.status === StatusCodes.OK) { + const notificationStore = useNotificationStore(); + try { + if (project && project.id && project.slug) { + const apiResponse = await ProjectApi.projectQuotas(project.id); this.visitedProjects[project.slug].quotas = apiResponse.data; } else { - // Handle other Status Codes + console.error("Selected project is null or its ID is undefined."); } - } else { - console.error("Selected project is null or its ID is undefined."); + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); } }, @@ -285,8 +300,22 @@ export const useProjectStore = defineStore({ resourceType: ResourceTypeInformation, quota: UpdateProjectQuotaObject ) { - if (project.id && resourceType.id) { - await ProjectApi.projectUpdateQuota(project.id, resourceType.id, quota); + const notificationStore = useNotificationStore(); + try { + if (project.id && resourceType.id) { + await ProjectApi.projectUpdateQuota( + project.id, + resourceType.id, + quota + ); + } else { + console.error( + "Selected project's or the selected resource type's ID is undefined." + ); + } + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); } }, @@ -294,38 +323,44 @@ export const useProjectStore = defineStore({ project: ProjectObject, resourceType: ResourceTypeInformation ): Promise<ResourceQuota[] | undefined> { - if (project.id && resourceType.id) { - const apiResponse = await QuotaApi.quotaGetResourceQuotas( - project.id, - resourceType.id - ); - if (apiResponse.status === StatusCodes.OK) { + const notificationStore = useNotificationStore(); + try { + if (project.id && resourceType.id) { + const apiResponse = await QuotaApi.quotaGetResourceQuotas( + project.id, + resourceType.id + ); return apiResponse.data; } else { - // Handle other Status Codes + console.error( + "Selected project's or resource types' ID is undefined." + ); } - } else { - console.error("Selected project's or resource types' ID is undefined."); + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); } }, - - // ToDo: Consider removing if unused in coscine/issues#2003 async getResourceTypeQuota( project: ProjectObject, resourceType: ResourceTypeInformation ): Promise<ProjectQuotaReturnObject | undefined> { - if (project.id && resourceType.id) { - const apiResponse = await ProjectApi.projectQuota( - project.id, - resourceType.id - ); - if (apiResponse.status === StatusCodes.OK) { + const notificationStore = useNotificationStore(); + try { + if (project.id && resourceType.id) { + const apiResponse = await ProjectApi.projectQuota( + project.id, + resourceType.id + ); return apiResponse.data; } else { - // Handle other Status Codes + console.error( + "Selected project's or resource types' ID is undefined." + ); } - } else { - console.error("Selected project's or resource types' ID is undefined."); + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); } }, @@ -333,97 +368,125 @@ export const useProjectStore = defineStore({ resourceQuotaObject: ResourceQuota, quota: UpdateResourceObject ) { - if (resourceQuotaObject.id) { - await QuotaApi.quotaUpdateResourceQuota(resourceQuotaObject.id, quota); + const notificationStore = useNotificationStore(); + try { + if (resourceQuotaObject.id) { + await QuotaApi.quotaUpdateResourceQuota( + resourceQuotaObject.id, + quota + ); + } else { + console.error("Selected resource quota is undefined."); + } + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); } }, async retrieveOrganizationByURL( url: string ): Promise<OrganizationObject[] | null> { - const apiResponse = await OrganizationApi.organizationGetOrganization( - url - ); - if (apiResponse.status === StatusCodes.OK) { + const notificationStore = useNotificationStore(); + try { + const apiResponse = await OrganizationApi.organizationGetOrganization( + url + ); return apiResponse.data.data; - } else { + } catch (error) { // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); return null; } }, async retrieveOrganizations(filter = "") { - const apiResponse = await OrganizationApi.organizationGetROR(filter); - if (apiResponse.status === StatusCodes.OK) { + const notificationStore = useNotificationStore(); + try { + const apiResponse = await OrganizationApi.organizationGetROR(filter); this.organizations = apiResponse.data.data; - } else { + } catch (error) { // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); } }, async isMemberOfOrganization(rorUrl: string): Promise<boolean> { - const apiResponse = await OrganizationApi.organizationIsMember(rorUrl); - if (apiResponse.status === StatusCodes.OK) { + const notificationStore = useNotificationStore(); + try { + const apiResponse = await OrganizationApi.organizationIsMember(rorUrl); return apiResponse.data.isMember as boolean; - } else { + } catch (error) { // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); return false; } }, async retrieveVisibilities() { - const apiResponse = await VisibilityApi.visibilityIndex(); - if (apiResponse.status === StatusCodes.OK) { + const notificationStore = useNotificationStore(); + try { + const apiResponse = await VisibilityApi.visibilityIndex(); this.visibilities = apiResponse.data; - } else { + } catch (error) { // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); } }, async retrieveLicenses() { - const apiResponse = await LicenseApi.licenseIndex(); - if (apiResponse.status === StatusCodes.OK) { + const notificationStore = useNotificationStore(); + try { + const apiResponse = await LicenseApi.licenseIndex(); this.licenses = apiResponse.data; - } else { + } catch (error) { // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); } }, async retrieveDisciplines() { - const apiResponse = await DisciplineApi.disciplineIndex(); - if (apiResponse.status === StatusCodes.OK) { + const notificationStore = useNotificationStore(); + try { + const apiResponse = await DisciplineApi.disciplineIndex(); this.disciplines = apiResponse.data; - } else { + } catch (error) { // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); } }, async retrieveRoles() { - const apiResponse = await RoleApi.roleIndex(); - if (apiResponse.status === StatusCodes.OK) { + const notificationStore = useNotificationStore(); + try { + const apiResponse = await RoleApi.roleIndex(); this.roles = apiResponse.data; - } else { + } catch (error) { // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); } }, async resolveInvitation() { - // .../?invitationToken=<token> - const invitationToken = this.router.currentRoute.query.invitationToken; - if (invitationToken) { - // ToDo: Modals and project refreshing handling! - const apiResponse = await ProjectApi.projectResolveInvitation( - invitationToken.toString() - ); - if (apiResponse.status === StatusCodes.OK) { - // remove invitationToken from the URL + const notificationStore = useNotificationStore(); + try { + // .../?invitationToken=<token> + const invitationToken = this.router.currentRoute.query.invitationToken; + if (invitationToken) { + await ProjectApi.projectResolveInvitation(invitationToken.toString()); + this.refreshProjectInformation(); removeQueryParameterFromUrl( this.router.currentRoute, "invitationToken" ); - } else { - // Handle other Status Codes } + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); + removeQueryParameterFromUrl( + this.router.currentRoute, + "invitationToken" + ); } }, @@ -447,47 +510,54 @@ export const useProjectStore = defineStore({ }, async createProject(project: ProjectObject): Promise<ProjectObject | null> { - const apiResponse = await ProjectApi.projectStore(project); - if (apiResponse.status === StatusCodes.OK) { - const createdProject: ProjectObject = apiResponse.data; - return createdProject; - } else { + const notificationStore = useNotificationStore(); + try { + const apiResponse = await ProjectApi.projectStore(project); + return apiResponse.data as ProjectObject; + } catch (error) { // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); return null; } }, async updateProject(project: ProjectObject): Promise<boolean> { - if (project.id) { - const apiResponse = await ProjectApi.projectUpdate(project.id, project); - if (apiResponse.status === StatusCodes.OK) { + const notificationStore = useNotificationStore(); + try { + if (project.id) { + await ProjectApi.projectUpdate(project.id, project); return true; } else { - // Handle other Status Codes + console.error("Selected project's ID is undefined."); return false; } - } else { - console.error("Selected project's ID is undefined."); + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); return false; } }, async deleteProject(project: ProjectObject): Promise<boolean> { - if (project.id) { - const apiResponse = await ProjectApi.projectDelete(project.id); - if (apiResponse.status === StatusCodes.OK) { + const notificationStore = useNotificationStore(); + try { + if (project.id) { + await ProjectApi.projectDelete(project.id); return true; } else { - // Handle other Status Codes + console.error("Selected project's ID is undefined."); return false; } - } else { - console.error("Selected project's ID is undefined."); + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); return false; } }, - async refreshProjectInformation(parentProject: ProjectObject | null) { + async refreshProjectInformation( + parentProject: ProjectObject | null = null + ) { await Promise.all([ this.retrieveAllProjects(), this.retrieveTopLevelProjects(), @@ -524,86 +594,122 @@ export const useProjectStore = defineStore({ } }, - async getProjectRoles(projectId: string) { - const apiResponse = await ProjectRoleApi.projectRoleIndex(projectId); - return apiResponse.data; + async getProjectRoles(projectId: string): Promise<ProjectRoleObject[]> { + const notificationStore = useNotificationStore(); + try { + const apiResponse = await ProjectRoleApi.projectRoleIndex(projectId); + return apiResponse.data; + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); + } + return []; }, async retrieveProjectRoles(project: ProjectObject | null) { - if (project && project.slug && project.id) { - const apiResponse = await ProjectRoleApi.projectRoleIndex(project.id); - if (apiResponse.status === StatusCodes.OK) { + const notificationStore = useNotificationStore(); + try { + if (project && project.slug && project.id) { + const apiResponse = await ProjectRoleApi.projectRoleIndex(project.id); this.visitedProjects[project.slug].roles = apiResponse.data; } else { - // Handle other Status Codes + console.error("Selected project is null or its ID is undefined."); } - } else { - console.error("Selected project is null or its ID is undefined."); + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); } }, async deleteProjectRole(projectRole: ProjectRoleObject): Promise<boolean> { - if ( - projectRole.projectId && - projectRole.user && - projectRole.user.id && - projectRole.role && - projectRole.role.id - ) { - try { + const notificationStore = useNotificationStore(); + try { + if ( + projectRole.projectId && + projectRole.user && + projectRole.user.id && + projectRole.role && + projectRole.role.id + ) { await ProjectRoleApi.projectRoleDelete( projectRole.projectId, projectRole.user.id, projectRole.role.id ); return true; - } catch { + } else { + console.error("There was a problem with the project role."); return false; } - } else { + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); return false; } }, async storeProjectRole(projectRole: ProjectRoleObject) { - await ProjectRoleApi.projectRoleSet({ - data: projectRole, - }); + const notificationStore = useNotificationStore(); + try { + await ProjectRoleApi.projectRoleSet({ + data: projectRole, + }); + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); + } }, async createApplicationProfileAnalytics(project: ProjectObject | null) { - if (project && project.id) { - await ProjectApi.projectCreateApplicationProfile(project.id); - } else { - console.error("Selected project is null or its ID is undefined."); + const notificationStore = useNotificationStore(); + try { + if (project && project.id) { + await ProjectApi.projectCreateApplicationProfile(project.id); + } else { + console.error("Selected project is null or its ID is undefined."); + } + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); } }, async deleteInvitation(invitationId: string) { + const notificationStore = useNotificationStore(); try { await ProjectApi.projectDeleteInvitation(invitationId); return true; - } catch { + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); return false; } }, async storeInvitation(invitation: SendInvitationObject) { - await ProjectApi.projectSendInvitation(invitation); + const notificationStore = useNotificationStore(); + try { + await ProjectApi.projectSendInvitation(invitation); + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); + } }, async leaveProject(project: ProjectObject | null) { - if (project && project.slug && project.id) { - const apiResponse = await ProjectRoleApi.projectRoleDelete2(project.id); - if (apiResponse.status === StatusCodes.OK) { + const notificationStore = useNotificationStore(); + try { + if (project && project.slug && project.id) { + await ProjectRoleApi.projectRoleDelete2(project.id); this.visitedProjects[project.slug].roles = null; this.refreshProjectInformation(this.currentProject); this.router.push({ name: "list-projects" }); } else { - // Handle other Status Codes + console.error("Selected project is null or its ID is undefined."); } - } else { - console.error("Selected project is null or its ID is undefined."); + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); } }, }, diff --git a/src/modules/project/types.d.ts b/src/modules/project/types.ts similarity index 100% rename from src/modules/project/types.d.ts rename to src/modules/project/types.ts diff --git a/src/modules/resource/ResourceModule.vue b/src/modules/resource/ResourceModule.vue index d1d2f808b5d5719e2dd4ba9bf8f695ce51352529..3706aaf754df1e8e45c9c3b16d26888f53270eb6 100644 --- a/src/modules/resource/ResourceModule.vue +++ b/src/modules/resource/ResourceModule.vue @@ -18,8 +18,13 @@ import type { VisitedResourceObject } from "./types"; import type { ResourceTypeInformation } from "@coscine/api-client/dist/types/Coscine.Api.Resources"; import VueI18n from "vue-i18n"; import { cloneDeep } from "lodash"; +import type { Route } from "vue-router"; export default defineComponent({ + beforeRouteUpdate(to, from, next) { + this.apiFetch(to); + next(); + }, setup() { const mainStore = useMainStore(); const resourceStore = useResourceStore(); @@ -28,10 +33,6 @@ export default defineComponent({ return { mainStore, resourceStore, projectStore }; }, - created() { - this.initialize(); - }, - computed: { resource(): VisitedResourceObject | null { return this.resourceStore.currentResource; @@ -56,13 +57,18 @@ export default defineComponent({ }, }, + created() { + this.initialize(); + }, + methods: { async initialize() { + await this.apiFetch(this.$router.currentRoute); + }, + + async apiFetch(route: Route) { // Resource may be unset (e.g. when entering from a direct link) - await this.resourceStore.handleUnsetResource( - this.resource, - this.$router.currentRoute - ); + await this.resourceStore.handleUnsetResource(this.resource, route); if (this.resource) { if (!this.resourceStore.currentFullApplicationProfile) { this.resourceStore.retrieveApplicationProfile(this.resource); diff --git a/src/modules/resource/components/create-resource/Configuration.vue b/src/modules/resource/components/create-resource/Configuration.vue index 621822ffbc3ba4f888a35d5f884a4bb127c6a6c3..81e44b85d53c89df1cf7bea0eed11ceda96f6fb6 100644 --- a/src/modules/resource/components/create-resource/Configuration.vue +++ b/src/modules/resource/components/create-resource/Configuration.vue @@ -4,16 +4,15 @@ <div v-if="resourceTypes && resourceTypes.length > 0"> <coscine-form-group :mandatory="true" - labelFor="ResourceTypes" + label-for="ResourceTypes" :label="$t('page.createResource.configuration.labels.resourceType')" - :isLoading="isLoading" + :is-loading="isLoading" > <multiselect v-if="resourceTypes.length > 1" id="ResourceTypes" v-model="selectedResourceType" :options="resourceTypes" - @input="setSelectedResourceTypeInformation" :multiple="false" :hide-selected="false" label="iDisplayName" @@ -24,6 +23,7 @@ select-label="" selected-label="" deselect-label="" + @input="setSelectedResourceTypeInformation" > <span slot="noResult">{{ $t("page.createResource.multiselect.noResults") @@ -57,9 +57,9 @@ <!-- Button Next (wrapper needed for Popover) --> <div id="divButtonNext" class="float-right"> <b-button - @click.prevent="next" variant="outline-primary" :disabled="!valid" + @click.prevent="next" >{{ $t("buttons.next") }} </b-button> </div> @@ -105,6 +105,24 @@ import type { import type { LabeledResourceObject, ResourceTypeOption } from "../../types"; export default defineComponent({ + components: { + ConfigurationSizeSlider, + }, + props: { + value: { + type: Object as PropType<ResourceObject>, + required: true, + }, + isLoading: { + default: false, + type: Boolean, + }, + }, + emits: { + valid: (_: boolean) => null, + next: null, + input: (_: ResourceObject) => null, + }, setup() { const mainStore = useMainStore(); const projectStore = useProjectStore(); @@ -113,10 +131,6 @@ export default defineComponent({ return { mainStore, projectStore, resourceStore }; }, - components: { - ConfigurationSizeSlider, - }, - data() { return { resource: this.value, @@ -124,17 +138,6 @@ export default defineComponent({ }; }, - props: { - value: { - type: Object as PropType<ResourceObject>, - required: true, - }, - isLoading: { - default: false, - type: Boolean, - }, - }, - computed: { isOwner(): boolean | undefined { return this.projectStore.currentUserRoleIsOwner; @@ -269,12 +272,6 @@ export default defineComponent({ } }, }, - - emits: { - valid: (_: boolean) => null, - next: null, - input: (_: ResourceObject) => null, - }, }); </script> diff --git a/src/modules/resource/components/create-resource/ConfigurationSizeSlider.vue b/src/modules/resource/components/create-resource/ConfigurationSizeSlider.vue index 8ef0793a2db2e0d530d28002ff63171b0d577f65..1b77506fb82437c04fb03596f80f01f5188b6b70 100644 --- a/src/modules/resource/components/create-resource/ConfigurationSizeSlider.vue +++ b/src/modules/resource/components/create-resource/ConfigurationSizeSlider.vue @@ -8,11 +8,11 @@ <b-form-input id="slider" :disabled="!sliderValue || max < min" - @change="update" type="range" :min="min" :max="max" :value="sliderValue" + @change="update" /> <div> {{ sliderText }} @@ -35,6 +35,15 @@ import type { ResourceObject } from "@coscine/api-client/dist/types/Coscine.Api. import { ResourceTypeOption } from "../../types"; export default defineComponent({ + props: { + value: { + type: Object as PropType<ResourceObject>, + required: true, + }, + }, + emits: { + input: (_: ResourceObject) => null, + }, setup() { const projectStore = useProjectStore(); @@ -50,13 +59,6 @@ export default defineComponent({ }; }, - props: { - value: { - type: Object as PropType<ResourceObject>, - required: true, - }, - }, - computed: { project(): ProjectObject | null { return this.projectStore.currentProject; @@ -152,10 +154,6 @@ export default defineComponent({ this.$set(this.resource.resourceTypeOption, "Size", size); }, }, - - emits: { - input: (_: ResourceObject) => null, - }, }); </script> diff --git a/src/modules/resource/components/create-resource/General.vue b/src/modules/resource/components/create-resource/General.vue index 6f7c98c1227a4192ed1e1b28d5f905b2483c311a..76ac82f649338d79787b962f943a8f2399819964 100644 --- a/src/modules/resource/components/create-resource/General.vue +++ b/src/modules/resource/components/create-resource/General.vue @@ -5,14 +5,13 @@ <!-- Resource Name --> <coscine-form-group :mandatory="true" - labelFor="ResourceName" + label-for="ResourceName" :label="$t('form.resource.resourceNameLabel')" - :isLoading="isLoading" + :is-loading="isLoading" > <b-form-input id="ResourceName" v-model="$v.resourceForm.resourceName.$model" - @input="translateResourceNameToDisplayName" :state=" $v.resourceForm.resourceName.$dirty ? !$v.resourceForm.resourceName.$error @@ -22,6 +21,7 @@ :maxlength="maxLengthFromValidation($v.resourceForm.resourceName)" required :readonly="readonly" + @input="translateResourceNameToDisplayName" /> <div class="invalid-tooltip"> {{ @@ -35,14 +35,13 @@ <!-- Display Name --> <coscine-form-group :mandatory="true" - labelFor="DisplayName" + label-for="DisplayName" :label="$t('form.resource.displayNameLabel')" - :isLoading="isLoading" + :is-loading="isLoading" > <b-form-input id="DisplayName" v-model="$v.resourceForm.displayName.$model" - @input="isLockedDisplayName = true" :state=" $v.resourceForm.displayName.$dirty ? !$v.resourceForm.displayName.$error @@ -52,6 +51,7 @@ :maxlength="maxLengthFromValidation($v.resourceForm.displayName)" required :readonly="readonly" + @input="isLockedDisplayName = true" /> <div class="invalid-tooltip"> {{ @@ -65,9 +65,9 @@ <!-- Description --> <coscine-form-group :mandatory="true" - labelFor="Description" + label-for="Description" :label="$t('form.resource.resourceDescriptionLabel')" - :isLoading="isLoading" + :is-loading="isLoading" > <b-form-textarea id="Description" @@ -94,9 +94,9 @@ <!-- Discipline --> <coscine-form-group :mandatory="true" - labelFor="Discipline" + label-for="Discipline" :label="$t('form.resource.resourceDisciplineLabel')" - :isLoading="isLoading" + :is-loading="isLoading" > <multiselect id="Discipline" @@ -124,9 +124,9 @@ <!-- Keywords --> <coscine-form-group - labelFor="Keywords" + label-for="Keywords" :label="$t('form.resource.resourceKeywordsLabel')" - :isLoading="isLoading" + :is-loading="isLoading" > <multiselect id="Keywords" @@ -137,9 +137,9 @@ :taggable="true" :max="limitKeywords(selectedKeyword)" :tag-placeholder="$t('form.resource.tagPlaceholder')" + :disabled="readonly" @tag="addTag" @remove="$v.resourceForm.keywords.$touch()" - :disabled="readonly" > <template #maxElements> {{ @@ -161,27 +161,27 @@ <!-- Visibility --> <coscine-form-group :mandatory="true" - labelFor="Visibility" + label-for="Visibility" :label="$t('form.resource.resourceMetadataVisibilityLabel')" - :isLoading="isLoading" + :is-loading="isLoading" > <b-form-radio-group - name="radios-stacked" v-model="selectedVisibility" - @change="setVisibility(selectedVisibility)" + name="radios-stacked" :options="visibilities" text-field="displayName" value-field="id" stacked :disabled="readonly" + @change="setVisibility(selectedVisibility)" /> </coscine-form-group> <!-- License --> <coscine-form-group - labelFor="ResourceLicense" + label-for="ResourceLicense" :label="$t('form.resource.resourceLicenseLabel')" - :isLoading="isLoading" + :is-loading="isLoading" :info="true" > <template #popover> @@ -195,7 +195,6 @@ <b-form-select id="ResourceLicense" v-model="selectedLicense" - @change="setLicense(selectedLicense)" :options="licenses" text-field="displayName" value-field="id" @@ -206,6 +205,7 @@ " :placeholder="$t('form.resource.resourceLicense')" :disabled="readonly" + @change="setLicense(selectedLicense)" > <template #first> <option :value="null" disabled> @@ -217,9 +217,9 @@ <!-- Internal Rules for Reuse --> <coscine-form-group - labelFor="InternalRulesForReuse" + label-for="InternalRulesForReuse" :label="$t('form.resource.resourceReuseLabel')" - :isLoading="isLoading" + :is-loading="isLoading" :info="true" > <template #popover> @@ -274,6 +274,26 @@ import type { import type { ProjectObject } from "@coscine/api-client/dist/types/Coscine.Api.Project"; export default defineComponent({ + mixins: [validationMixin], + props: { + value: { + type: Object as PropType<ResourceObject>, + required: true, + }, + isLoading: { + default: false, + type: Boolean, + }, + readonly: { + default: false, + type: Boolean, + }, + }, + emits: { + valid: (_: boolean) => null, + validation: (_: Validation) => null, + input: (_: ResourceObject) => null, + }, setup() { const mainStore = useMainStore(); const projectStore = useProjectStore(); @@ -282,8 +302,6 @@ export default defineComponent({ return { mainStore, projectStore, resourceStore }; }, - mixins: [validationMixin], - validations: { resourceForm: { resourceName: { @@ -314,21 +332,6 @@ export default defineComponent({ }, }, - props: { - value: { - type: Object as PropType<ResourceObject>, - required: true, - }, - isLoading: { - default: false, - type: Boolean, - }, - readonly: { - default: false, - type: Boolean, - }, - }, - data() { return { resourceForm: this.value, @@ -514,12 +517,6 @@ export default defineComponent({ } }, }, - - emits: { - valid: (_: boolean) => null, - validation: (_: Validation) => null, - input: (_: ResourceObject) => null, - }, }); </script> diff --git a/src/modules/resource/components/create-resource/Metadata.vue b/src/modules/resource/components/create-resource/Metadata.vue index 02887dd7a69638e8527df7038599e563c50e1a53..10cce526ec77b80570e1f3098903319e47bea2cb 100644 --- a/src/modules/resource/components/create-resource/Metadata.vue +++ b/src/modules/resource/components/create-resource/Metadata.vue @@ -3,7 +3,7 @@ <div> <!-- Application Profile Dropdown --> <coscine-form-group - labelFor="ApplicationProfiles" + label-for="ApplicationProfiles" :mandatory="true" :label="$t('page.createResource.metadata.applicationProfileLabel')" > @@ -12,10 +12,10 @@ id="ApplicationProfiles" v-model="selectedApplicationProfile" :options="applicationProfileList" - @change="notifyFormGenerator" :placeholder=" $t('page.createResource.metadata.selectApplicationProfile') " + @change="notifyFormGenerator" > <template #first> <b-form-select-option :value="null" disabled> @@ -71,13 +71,13 @@ <FormGenerator v-else :key="resource.applicationProfile" - :fixedValueMode="fixedValueMode" - :fixedValues="resource.fixedValues" - :applicationProfileId="resource.applicationProfile" - :SHACLDefinition="applicationProfileString" - :classReceiver="receiveClass" - :userReceiver="async () => user" - mimeType="application/ld+json" + :fixed-value-mode="fixedValueMode" + :fixed-values="resource.fixedValues" + :application-profile-id="resource.applicationProfile" + :s-h-a-c-l-definition="applicationProfileString" + :class-receiver="receiveClass" + :user-receiver="async () => user" + mime-type="application/ld+json" /> </div> </template> @@ -95,17 +95,9 @@ import type { BilingualLabels } from "@coscine/api-client/dist/types/Coscine.Api import type { UserObject } from "@coscine/api-client/dist/types/Coscine.Api.User"; export default defineComponent({ - setup() { - const resourceStore = useResourceStore(); - const userStore = useUserStore(); - - return { resourceStore, userStore }; - }, - components: { CreateAPModal, }, - props: { value: { type: Object as PropType<ResourceObject>, @@ -124,6 +116,16 @@ export default defineComponent({ required: true, }, }, + emits: { + valid: (_: boolean) => null, + input: (_: ResourceObject) => null, + }, + setup() { + const resourceStore = useResourceStore(); + const userStore = useUserStore(); + + return { resourceStore, userStore }; + }, data() { return { @@ -191,11 +193,6 @@ export default defineComponent({ ); }, }, - - emits: { - valid: (_: boolean) => null, - input: (_: ResourceObject) => null, - }, }); </script> diff --git a/src/modules/resource/components/create-resource/Overview.vue b/src/modules/resource/components/create-resource/Overview.vue index 4911072f22f59bce641024b95af6e5ad4b1f6acf..6eb9af95d287e4d2f10487dc9ea54623c2efb7c9 100644 --- a/src/modules/resource/components/create-resource/Overview.vue +++ b/src/modules/resource/components/create-resource/Overview.vue @@ -1,7 +1,7 @@ <template> <div class="overview"> <!-- Resource Configuration --> - <b-card @click.prevent="toTab(tabs[0])" class="my-2"> + <b-card class="my-2" @click.prevent="toTab(tabs[0])"> <CoscineHeadline :headline="$t('form.steps.first')" h="h5" /> <coscine-form-group @@ -27,7 +27,7 @@ </b-card> <!-- General Information --> - <b-card @click.prevent="toTab(tabs[1])" class="my-2"> + <b-card class="my-2" @click.prevent="toTab(tabs[1])"> <CoscineHeadline :headline="$t('form.steps.second')" h="h5" /> <!-- General --> @@ -35,7 +35,7 @@ </b-card> <!-- Metadata --> - <b-card @click.prevent="toTab(tabs[2])" class="my-2 p-0"> + <b-card class="my-2 p-0" @click.prevent="toTab(tabs[2])"> <CoscineHeadline :headline="$t('form.steps.third')" h="h5" /> <!-- Form Generator --> @@ -45,31 +45,31 @@ <FormGenerator v-else :key="resource.applicationProfile" - :projectId="project.id" - :fixedValueMode="fixedValueMode" - :fixedValues="resource.fixedValues" - :applicationProfileId="resource.applicationProfile" - :disabledMode="true" - :SHACLDefinition="applicationProfileString" - :classReceiver="receiveClass" - :userReceiver="async () => user" - mimeType="application/ld+json" + :project-id="project.id" + :fixed-value-mode="fixedValueMode" + :fixed-values="resource.fixedValues" + :application-profile-id="resource.applicationProfile" + :disabled-mode="true" + :s-h-a-c-l-definition="applicationProfileString" + :class-receiver="receiveClass" + :user-receiver="async () => user" + mime-type="application/ld+json" /> </b-card> <!-- Buttons --> <b-form-group> <!-- Button Back --> - <b-button @click.prevent="back" variant="outline-primary" + <b-button variant="outline-primary" @click.prevent="back" >{{ $t("buttons.back") }} </b-button> <!-- Button Confirm --> <b-button - @click.prevent="clickSave" :disabled="isUploadInProgress || isLoadingFormGenerator" class="float-right" variant="outline-primary" + @click.prevent="clickSave" >{{ $t("buttons.confirm") }} </b-button> </b-form-group> @@ -90,25 +90,10 @@ import type { ResourceCreationTab, ResourceTypeOption } from "../../types"; import type { ProjectObject } from "@coscine/api-client/dist/types/Coscine.Api.Project"; import type { BilingualLabels } from "@coscine/api-client/dist/types/Coscine.Api.Metadata"; import type { UserObject } from "@coscine/api-client/dist/types/Coscine.Api.User"; +import useNotificationStore from "@/store/notification"; export default defineComponent({ components: { General }, - setup() { - const projectStore = useProjectStore(); - const resourceStore = useResourceStore(); - const userStore = useUserStore(); - - return { projectStore, resourceStore, userStore }; - }, - - data() { - return { - resource: this.value, - fixedValueMode: true, - isUploadInProgress: false, - }; - }, - props: { value: { type: Object as PropType<ResourceObject>, @@ -127,6 +112,28 @@ export default defineComponent({ required: true, }, }, + emits: { + back: null, + toTab: (_: ResourceCreationTab) => null, + waitingForResponse: (_: boolean) => null, + input: (_: ResourceObject) => null, + }, + setup() { + const projectStore = useProjectStore(); + const resourceStore = useResourceStore(); + const userStore = useUserStore(); + const notificationStore = useNotificationStore(); + + return { projectStore, resourceStore, userStore, notificationStore }; + }, + + data() { + return { + resource: this.value, + fixedValueMode: true, + isUploadInProgress: false, + }; + }, computed: { project(): ProjectObject | null { @@ -186,37 +193,16 @@ export default defineComponent({ } else { this.$emit("waitingForResponse", false); // On Failure - this.makeToast( - this.$t("toast.onSave.failure.message").toString(), - this.$t("toast.onSave.failure.title").toString(), - "danger" - ); + this.notificationStore.postNotification({ + title: this.$t("toast.onSave.failure.title").toString(), + body: this.$t("toast.onSave.failure.message").toString(), + variant: "danger", + }); } this.isUploadInProgress = false; } }, - - makeToast( - text = "Message", - givenTitle = "Title", - variant: string | undefined = undefined - ) { - this.$root.$bvToast.toast(text, { - title: givenTitle, - autoHideDelay: 5000, - toaster: "b-toaster-bottom-right", - variant: variant, - noCloseButton: true, - }); - }, - }, - - emits: { - back: null, - toTab: (_: ResourceCreationTab) => null, - waitingForResponse: (_: boolean) => null, - input: (_: ResourceObject) => null, }, }); </script> diff --git a/src/modules/resource/components/resource-page/FilesView.vue b/src/modules/resource/components/resource-page/FilesView.vue index 3f96e72dbcff8b47a5a81b2a08177235f7f49780..3743e07f4be3cf652978139c96cbffe4a4a51a63 100644 --- a/src/modules/resource/components/resource-page/FilesView.vue +++ b/src/modules/resource/components/resource-page/FilesView.vue @@ -1,13 +1,14 @@ <template> <div class="DataSource"> <FilesViewHeader - @clickFileSelect="clickFileSelect" - :isUploading="isUploading" v-model="filter" + :is-uploading="isUploading" + @clickFileSelect="clickFileSelect" /> <b-row> <b-table id="resourceViewTable" + ref="adaptTable" :fields="headers" :items="folderContents" :busy="isBusy" @@ -23,11 +24,10 @@ responsive head-variant="dark" class="adaptTable" - ref="adaptTable" - @row-selected="onRowSelected" show-empty :empty-text="$t('page.resource.emptyTableText')" :empty-filtered-text="$t('page.resource.emptyFilterText')" + @row-selected="onRowSelected" > <div slot="table-busy" class="text-center text-danger my-2"> <b-spinner class="align-middle"></b-spinner> @@ -35,17 +35,17 @@ $t("page.resource.loading") }}</strong> </div> - <template v-slot:head(name)="row"> + <template #head(name)="row"> <b-form-checkbox v-model="selectAll" @change="allSelect(row)" ></b-form-checkbox> <span>{{ $t("page.resource.fileName") }}</span> </template> - <template v-slot:head(lastModified)="row"> + <template #head(lastModified)="row"> <span>{{ row.label }}</span> </template> - <template v-slot:head()="row"> + <template #head()="row"> <template v-if="visibleColumns.includes(row.field.key)"> <span>{{ row.label }}</span> </template> @@ -56,15 +56,15 @@ </span> </template> </template> - <template v-slot:head(addColumn)> - <b-dropdown size="sm" right :no-caret="true" id="addColumnDropDown"> - <template v-slot:button-content> + <template #head(addColumn)> + <b-dropdown id="addColumnDropDown" size="sm" right :no-caret="true"> + <template #button-content> <b-icon icon="arrow-down" /> </template> <b-form-checkbox v-for="column in columns" - v-model="column.active" :key="column.value" + v-model="column.active" :value="column.value" stacked > @@ -72,11 +72,11 @@ </b-form-checkbox> </b-dropdown> </template> - <template v-slot:cell(name)="row"> + <template #cell(name)="row"> <span class="checkFile"> <b-form-checkbox - class="tableCheck" v-model="row.rowSelected" + class="tableCheck" @change="select(row)" /> <b-icon @@ -102,7 +102,7 @@ :no-caret="true" :disabled="editableDataUrl && resource.archived" > - <template v-slot:button-content> ... </template> + <template #button-content> ... </template> <b-dropdown-item v-if="!editableDataUrl" @click=" @@ -113,16 +113,16 @@ }}</b-dropdown-item > <b-dropdown-item - @click="deleteFile(row.item)" :disabled="resource.archived" + @click="deleteFile(row.item)" >{{ $t("buttons.delete") }}</b-dropdown-item > </b-dropdown> </template> - <template v-slot:cell(size)="row"> + <template #cell(size)="row"> {{ renderSize(row.item) }} </template> - <template v-slot:cell(lastModified)="row"> + <template #cell(lastModified)="row"> {{ renderDate(row.item) }} </template> </b-table> @@ -169,6 +169,28 @@ interface CustomTableField extends BvTableField { } export default defineComponent({ + components: { + FilesViewHeader, + }, + props: { + folderContents: { + default() { + return []; + }, + type: Array as PropType<FolderContent[]>, + }, + currentFolder: { + default: "/", + type: String, + }, + fileListEdit: { + default() { + return []; + }, + type: Array as PropType<FolderContent[]>, + }, + isUploading: Boolean, + }, setup() { const mainStore = useMainStore(); const resourceStore = useResourceStore(); @@ -176,6 +198,36 @@ export default defineComponent({ return { mainStore, resourceStore, projectStore }; }, + data() { + return { + defaultHeaders: [ + { + label: this.$t("page.resource.fileName").toString(), + key: "name", + sortable: true, + active: true, + }, + { + label: this.$t("page.resource.lastModified").toString(), + key: "lastModified", + sortable: true, + active: true, + }, + { + label: this.$t("page.resource.size").toString(), + key: "size", + sortable: true, + active: true, + }, + ] as Array<CustomTableField>, + columns: [] as CustomTableField[], + isBusy: true, + selectAll: false, + filter: "", + folderPath: [] as string[], + selectableFiles: [] as FolderContent[], + }; + }, computed: { applicationProfile(): ApplicationProfile | null { @@ -245,58 +297,6 @@ export default defineComponent({ return visibleColumns; }, }, - data() { - return { - defaultHeaders: [ - { - label: this.$t("page.resource.fileName").toString(), - key: "name", - sortable: true, - active: true, - }, - { - label: this.$parent.$t("page.resource.lastModified").toString(), - key: "lastModified", - sortable: true, - active: true, - }, - { - label: this.$t("page.resource.size").toString(), - key: "size", - sortable: true, - active: true, - }, - ] as Array<CustomTableField>, - columns: [] as CustomTableField[], - isBusy: true, - selectAll: false, - filter: "", - folderPath: [] as string[], - selectableFiles: [] as FolderContent[], - }; - }, - components: { - FilesViewHeader, - }, - props: { - folderContents: { - default() { - return []; - }, - type: Array as PropType<FolderContent[]>, - }, - currentFolder: { - default: "/", - type: String, - }, - fileListEdit: { - default() { - return []; - }, - type: Array as PropType<FolderContent[]>, - }, - isUploading: Boolean, - }, watch: { applicationProfile() { this.getColumns(); @@ -395,7 +395,7 @@ export default defineComponent({ getData() { // Doesn't end with '/' => Probably a file let currentFolder = this.currentFolder; - if (!currentFolder.endsWith("/")) { + if (!currentFolder.endsWith("/") && currentFolder !== "") { // TODO: Change to open modal this.openFile({ id: uuidv4(), @@ -479,12 +479,15 @@ export default defineComponent({ // (Other workaround would be to keep the editing files open) this.$emit("fileListEdit", []); + const absolutePath = + folder.absolutePath !== "" ? folder.absolutePath : "/"; + // Show location change - window.location.hash = folder.absolutePath; + window.location.hash = absolutePath; const response = await this.resourceStore.getMetadata( this.resource, - folder.absolutePath + absolutePath ); const tmpFolder: FolderContent[] = []; @@ -492,9 +495,9 @@ export default defineComponent({ this.$emit("currentFolder", this.folderPath.pop()); } else if (this.currentFolder !== "") { this.folderPath.push(this.currentFolder); - this.$emit("currentFolder", folder.absolutePath); + this.$emit("currentFolder", absolutePath); } else { - this.$emit("currentFolder", folder.absolutePath); + this.$emit("currentFolder", absolutePath); } if (this.folderPath.length > 0) { diff --git a/src/modules/resource/components/resource-page/FilesViewHeader.vue b/src/modules/resource/components/resource-page/FilesViewHeader.vue index 61a580dc994932133d67a0cec166a20b82d42e4f..40141d254e19652e54cded2f8c92d7fa06aad649 100644 --- a/src/modules/resource/components/resource-page/FilesViewHeader.vue +++ b/src/modules/resource/components/resource-page/FilesViewHeader.vue @@ -3,13 +3,13 @@ <div class="col-sm-7 file-view-header"> <span> <p - class="h4" v-if=" resource && resource.type && resource.type.displayName && resource.displayName " + class="h4" > {{ $t("resourceTypes." + resource.type.displayName + ".displayName") @@ -29,7 +29,7 @@ triggers="hover focus" placement="bottom" > - <template v-slot:title + <template #title ><b>{{ resource.displayName }}</b></template > <div v-if="resource.displayName"> @@ -53,10 +53,7 @@ ><b>{{ $t("page.resource.disciplines") }}: </b> </span> <ul> - <li - v-for="discipline in resource.disciplines" - v-bind:key="discipline.id" - > + <li v-for="discipline in resource.disciplines" :key="discipline.id"> <div v-if="$i18n.locale === 'de'"> {{ discipline.displayNameDe }} </div> @@ -71,7 +68,7 @@ ><b>{{ $t("page.resource.keywords") }}: </b> </span ><br /> <ul> - <li v-for="keyword in resource.keywords" v-bind:key="keyword"> + <li v-for="keyword in resource.keywords" :key="keyword"> {{ keyword }} </li> </ul> @@ -96,18 +93,18 @@ </div> </b-popover> <b-button - @click="edit" + v-if="canEditResource" :title="$t('page.resource.edit')" class="btn btn-sm" - v-if="canEditResource" + @click="edit" > <b-icon icon="pencil-fill" :title="$t('page.resource.edit')" /> </b-button> <b-button - @click="upload" :title="$t('page.resource.upload')" class="btn btn-sm" :disabled="isUploading || readOnly || (resource && resource.archived)" + @click="upload" > <b-icon icon="plus" :title="$t('page.resource.upload')" /> </b-button> @@ -142,8 +139,8 @@ <div class="col-sm-2 searchColumn"> <b-input-group> <b-form-input - type="search" id="filterInput" + type="search" :placeholder="$t('page.resource.typeToSearch')" :value="value" @input="$emit('input', $event)" @@ -175,6 +172,14 @@ import type { ResourceTypeInformation } from "@coscine/api-client/dist/types/Cos import type { VisitedResourceObject } from "../../types"; export default defineComponent({ + name: "Header", + props: { + isUploading: Boolean, + value: { + default: "", + type: String, + }, + }, setup() { const mainStore = useMainStore(); const resourceStore = useResourceStore(); @@ -235,12 +240,6 @@ export default defineComponent({ return undefined; }, }, - - name: "Header", - props: { - isUploading: Boolean, - value: String, - }, methods: { edit() { if ( diff --git a/src/modules/resource/components/resource-page/MetadataManager.vue b/src/modules/resource/components/resource-page/MetadataManager.vue index c9a221543194bf9769f91f6db06043638aec460a..f456b4a222206cf0708e7fc2c2e379095c292974 100644 --- a/src/modules/resource/components/resource-page/MetadataManager.vue +++ b/src/modules/resource/components/resource-page/MetadataManager.vue @@ -2,23 +2,23 @@ <b-container id="detail-view"> <MetadataManagerHeader v-if="resource" - :editableDataUrl="editableDataUrl" - :isUploading="isUploading" - :readOnly="readOnly" + :editable-data-url="editableDataUrl" + :is-uploading="isUploading" + :read-only="readOnly" :resource="resource" - :showDetail="showDetail" - :shownFiles="shownFiles" + :show-detail="showDetail" + :shown-files="shownFiles" @download="download" @selectFiles="selectFiles" @showModalDeleteFolderContents="showModalDeleteFolderContents" /> <MetadataManagerTable - :currentFileId="currentFileId" - :currentFolderContent="currentFolderContent" - :editableDataUrl="editableDataUrl" - :editableKey="editableKey" - :showDetail="showDetail" - :shownFiles="shownFiles" + :current-file-id="currentFileId" + :current-folder-content="currentFolderContent" + :editable-data-url="editableDataUrl" + :editable-key="editableKey" + :show-detail="showDetail" + :shown-files="shownFiles" @changeMetadata="changeMetadata" @loadAllFilesTab="loadAllFilesTab" @removeElement="removeElement" @@ -32,8 +32,8 @@ currentFileId >= 0 && currentFileId < fileListEdit.length " - :currentFileId="currentFileId" - :fileListEdit="fileListEdit" + :current-file-id="currentFileId" + :file-list-edit="fileListEdit" /> <MetadataManagerSpecialProperties v-if=" @@ -42,10 +42,10 @@ resource && currentFolderContent " - :currentFolderContent="currentFolderContent" - :editableDataUrl="editableDataUrl" - :editableKey="editableKey" - :readOnly="readOnly" + :current-folder-content="currentFolderContent" + :editable-data-url="editableDataUrl" + :editable-key="editableKey" + :read-only="readOnly" :resource="resource" /> <span @@ -53,44 +53,44 @@ class="generatedFormSpan" > <FormGenerator - class="generatedForm" :key="formGeneratorKey" - :applicationProfileId="resource.applicationProfile" - :fixedValues="resource.fixedValues" - :formData="currentMetadata" - :SHACLDefinition="applicationProfileString" - :disabledMode="resource.archived" - :classReceiver="receiveClass" - :userReceiver="async () => user" - mimeType="application/ld+json" + class="generatedForm" + :application-profile-id="resource.applicationProfile" + :fixed-values="resource.fixedValues" + :form-data="currentMetadata" + :s-h-a-c-l-definition="applicationProfileString" + :disabled-mode="resource.archived" + :class-receiver="receiveClass" + :user-receiver="async () => user" + mime-type="application/ld+json" @isValid="isValid" /> </span> </b-col> </b-row> <MetadataManagerFooter - :isUploading="isUploading" - :numberOfCurrentlyProcessedFiles="numberOfCurrentlyProcessedFiles" - :progressStatus="progressStatus" - :saveButtonDisabled="saveButtonDisabled" - :showDetail="showDetail" - :totalNumberOfCurrentlyProcessedFiles=" + :is-uploading="isUploading" + :number-of-currently-processed-files="numberOfCurrentlyProcessedFiles" + :progress-status="progressStatus" + :save-button-disabled="saveButtonDisabled" + :show-detail="showDetail" + :total-number-of-currently-processed-files=" totalNumberOfCurrentlyProcessedFiles " @update="update" @uploadPreparation="uploadPreparation" /> - <ValidationPopover :valid="valid" :validationResults="validationResults" /> + <ValidationPopover :valid="valid" :validation-results="validationResults" /> <SaveDuplicateFilesModal :visible="saveDuplicateFilesModalVisible" - :uploadFileListReplaceFiles="uploadFileListReplaceFiles" + :upload-file-list-replace-files="uploadFileListReplaceFiles" @close="hideModalSaveDuplicateFiles" @skip="skipModalSaveDuplicateFiles" @ok="overwriteModalSaveDuplicateFiles" /> <DeleteFolderContentsModal :visible="deleteFolderContentsModalVisible" - :shownFiles="shownFiles" + :shown-files="shownFiles" @close="hideModalDeleteFolderContents" @ok="deleteModalDeleteFolderContents" /> @@ -98,7 +98,7 @@ </template> <script lang="ts"> -import { defineComponent, PropType, VNode } from "vue-demi"; +import { defineComponent, PropType } from "vue-demi"; // import the store for current module import useResourceStore from "../../store"; @@ -141,16 +141,9 @@ import type ValidationReport from "rdf-validate-shacl/src/validation-report"; import { v4 as uuidv4 } from "uuid"; import type { ValidationResult } from "rdf-validate-shacl/src/validation-report"; import type { ApplicationProfile, Metadata } from "../../types"; +import useNotificationStore from "@/store/notification"; export default defineComponent({ - setup() { - const mainStore = useMainStore(); - const resourceStore = useResourceStore(); - const projectStore = useProjectStore(); - const userStore = useUserStore(); - - return { mainStore, resourceStore, projectStore, userStore }; - }, components: { MetadataManagerHeader, MetadataManagerTable, @@ -162,6 +155,64 @@ export default defineComponent({ SaveDuplicateFilesModal, ValidationPopover, }, + props: { + showDetail: Boolean, + isUploading: Boolean, + fileListEdit: { + default() { + return []; + }, + type: Array as PropType<FolderContent[]>, + }, + fileListUpload: { + default() { + return []; + }, + type: Array as PropType<FileInformation[]>, + }, + folderContents: { + default() { + return []; + }, + type: Array as PropType<FolderContent[]>, + }, + currentFolder: { + default: "/", + type: String, + }, + }, + setup() { + const mainStore = useMainStore(); + const resourceStore = useResourceStore(); + const projectStore = useProjectStore(); + const userStore = useUserStore(); + const notificationStore = useNotificationStore(); + + return { + mainStore, + resourceStore, + projectStore, + userStore, + notificationStore, + }; + }, + data() { + return { + numberOfCurrentlyProcessedFiles: 0, + totalNumberOfCurrentlyProcessedFiles: 0, + uploadDuplicates: true, + currentFileId: -1, + uploadFileListNewFiles: [] as FileInformation[], + uploadFileListReplaceFiles: [] as FileInformation[], + fileListError: [] as FolderContent[], + progressStatus: 0, + valid: false, + validationResults: [] as ValidationResult[], + + deleteFolderContentsModalVisible: false, + saveDuplicateFilesModalVisible: false, + }; + }, computed: { applicationProfile(): ApplicationProfile | null { return this.resourceStore.currentFullApplicationProfile; @@ -265,52 +316,6 @@ export default defineComponent({ return shownFiles; }, }, - data() { - return { - numberOfCurrentlyProcessedFiles: 0, - totalNumberOfCurrentlyProcessedFiles: 0, - uploadDuplicates: true, - currentFileId: -1, - uploadFileListNewFiles: [] as FileInformation[], - uploadFileListReplaceFiles: [] as FileInformation[], - fileListError: [] as FolderContent[], - progressStatus: 0, - valid: false, - validationResults: [] as ValidationResult[], - - deleteFolderContentsModalVisible: false, - saveDuplicateFilesModalVisible: false, - }; - }, - props: { - showDetail: Boolean, - isUploading: Boolean, - fileListEdit: { - default() { - return []; - }, - type: Array as PropType<FolderContent[]>, - }, - fileListUpload: { - default() { - return []; - }, - type: Array as PropType<FileInformation[]>, - }, - folderContents: { - default() { - return []; - }, - type: Array as PropType<FolderContent[]>, - }, - currentFolder: { - default: "/", - type: String, - }, - }, - created() { - this.getOptions(); - }, watch: { fileListUpload() { this.getOptions(); @@ -319,6 +324,9 @@ export default defineComponent({ this.getOptions(); }, }, + created() { + this.getOptions(); + }, methods: { async receiveClass(className: string): Promise<BilingualLabels> { return await this.resourceStore.getClass(className); @@ -396,7 +404,7 @@ export default defineComponent({ const h = this.$createElement; const content = []; content.push( - "" + this.$t("page.resource.toastSavingFailedBodyTop") + this.$t("page.resource.toastSavingFailedBodyTop").toString() ); content.push(h("br")); @@ -406,23 +414,25 @@ export default defineComponent({ } content.push( - "" + this.$t("page.resource.toastSavingFailedBodyBottom") + this.$t("page.resource.toastSavingFailedBodyBottom").toString() ); const vNodesMsg = h("span", {}, content); - this.makeToast( - "" + this.$t("page.resource.toastSavingFailedTitle"), - vNodesMsg, - true - ); + this.notificationStore.postNotification({ + title: this.$t("page.resource.toastSavingFailedTitle").toString(), + body: vNodesMsg, + variant: "warning", + }); } if (numberOfSuccessfulUploadedFiles > 0) { - this.makeToast( - "" + this.$t("page.resource.toastSavingSuccessfulTitle"), - "" + - this.$t("page.resource.toastSavingSuccessfulBody") + - numberOfSuccessfulUploadedFiles - ); + this.notificationStore.postNotification({ + title: this.$t( + "page.resource.toastSavingSuccessfulTitle" + ).toString(), + body: this.$t("page.resource.toastSavingSuccessfulBody", { + number: numberOfSuccessfulUploadedFiles, + }).toString(), + }); } } } @@ -666,26 +676,6 @@ export default defineComponent({ cleanup() { this.$emit("emptyFileLists"); }, - makeToast( - givenTitle = "Title", - text: string | VNode | VNode[] = "Message", - error = false - ) { - if (error) { - this.$bvToast.toast(text, { - title: givenTitle, - noAutoHide: true, - variant: "warning", - toaster: "b-toaster-bottom-right", - }); - } else { - this.$bvToast.toast(text, { - title: givenTitle, - toaster: "b-toaster-bottom-right", - noCloseButton: true, - }); - } - }, showModalDeleteFolderContents() { this.deleteFolderContentsModalVisible = true; }, diff --git a/src/modules/resource/components/resource-page/metadata/MetadataManagerFooter.vue b/src/modules/resource/components/resource-page/metadata/MetadataManagerFooter.vue index e3c3e7f5e2a11841e13c23e3212ae3d1ff36d1f9..67de1e7edf4b7a75783f374bdb20f6fa43aacfda 100644 --- a/src/modules/resource/components/resource-page/metadata/MetadataManagerFooter.vue +++ b/src/modules/resource/components/resource-page/metadata/MetadataManagerFooter.vue @@ -1,6 +1,6 @@ <template> <b-row id="metadataManagerButtonRowBottom"> - <span class="processStatement" v-if="isUploading" + <span v-if="isUploading" class="processStatement" >{{ totalNumberOfCurrentlyProcessedFiles - numberOfCurrentlyProcessedFiles }}/{{ totalNumberOfCurrentlyProcessedFiles }}</span @@ -24,6 +24,7 @@ id="metadataManagerButtonRowBottomSave" class="metadataManagerButtonRowBottomSave" variant="primary" + :disabled="saveButtonDisabled" @click=" isUploading ? undefined @@ -31,8 +32,7 @@ ? $emit('uploadPreparation') : $emit('update') " - :disabled="saveButtonDisabled" - ><b-spinner label="Spinning" v-show="isUploading"></b-spinner + ><b-spinner v-show="isUploading" label="Spinning"></b-spinner >{{ isUploading ? $t("page.resource.metadataManagerBtnSaving") diff --git a/src/modules/resource/components/resource-page/metadata/MetadataManagerHeader.vue b/src/modules/resource/components/resource-page/metadata/MetadataManagerHeader.vue index 7d13b717768a380e040ce9a8638ebe13092c3a46..8f4ce1c2bd804868f544f826adbcbff9ddc5cce9 100644 --- a/src/modules/resource/components/resource-page/metadata/MetadataManagerHeader.vue +++ b/src/modules/resource/components/resource-page/metadata/MetadataManagerHeader.vue @@ -4,19 +4,19 @@ <b-button id="buttonSelectFiles" variant="secondary" - @click="$emit('selectFiles')" :placeholder="$t('page.resource.metadataManagerBtnSelectFiles')" :disabled="isUploading || readOnly || (resource && resource.archived)" autofocus + @click="$emit('selectFiles')" >{{ $t("page.resource.metadataManagerBtnSelectFiles") }} </b-button> </b-col> <b-col> <b-input-group id="metadataManagerDropDownMenu" class="float-right"> <b-dropdown + id="addColumnDropDown" size="sm" right - id="addColumnDropDown" :disabled=" !showDetail || readOnly || @@ -32,8 +32,8 @@ </b-dropdown> <b-button v-if="!editableDataUrl" - @click="$emit('download')" :disabled="!showDetail || shownFiles.length === 0" + @click="$emit('download')" >{{ $t("page.resource.metadataManagerBtnDownload") }}</b-button > </b-input-group> diff --git a/src/modules/resource/components/resource-page/metadata/MetadataManagerSpecialProperties.vue b/src/modules/resource/components/resource-page/metadata/MetadataManagerSpecialProperties.vue index 680b65b57ee87720f93b8be8591099558527b14a..11c11da9a9bafbe83d861b44f75c5273a3c02c6f 100644 --- a/src/modules/resource/components/resource-page/metadata/MetadataManagerSpecialProperties.vue +++ b/src/modules/resource/components/resource-page/metadata/MetadataManagerSpecialProperties.vue @@ -3,18 +3,18 @@ <span v-if="editableDataUrl"> <coscine-form-group :mandatory="true" - labelFor="dataUrl" + label-for="dataUrl" :label="$t('page.resource.dataUrl')" > <b-input-group> <b-form-input id="dataUrl" - @input="updateDataUrl(currentFolderContent, $event)" :value="currentFolderContent.dataUrl" :placeholder="$t('page.resource.dataUrl')" :disabled="resource.archived || readOnly" + @input="updateDataUrl(currentFolderContent, $event)" /> - <b-button id="URLBtn" @click="openURL" :disabled="!isValidUrl" + <b-button id="URLBtn" :disabled="!isValidUrl" @click="openURL" ><b-icon-link-45deg /> </b-button> </b-input-group> @@ -23,14 +23,14 @@ <span v-if="editableKey"> <coscine-form-group :mandatory="true" - labelFor="metadataKey" + label-for="metadataKey" :label="$t('page.resource.metadataKey')" > <b-form-input - @change="updateAbsolutePath(currentFolderContent, $event)" :value="currentFolderContent.name" :placeholder="$t('page.resource.metadataKey')" :disabled="resource.archived || readOnly" + @change="updateAbsolutePath(currentFolderContent, $event)" /> </coscine-form-group> </span> @@ -47,6 +47,28 @@ import type { import type { ResourceObject } from "@coscine/api-client/dist/types/Coscine.Api.Resources"; export default defineComponent({ + props: { + currentFolderContent: { + required: true, + type: [Object] as PropType<FolderContent>, + }, + editableDataUrl: { + required: true, + type: Boolean, + }, + editableKey: { + required: true, + type: Boolean, + }, + readOnly: { + required: true, + type: Boolean, + }, + resource: { + required: true, + type: [Object] as PropType<ResourceObject>, + }, + }, computed: { isValidUrl(): boolean { if ( @@ -74,28 +96,6 @@ export default defineComponent({ return validUrl.test(url.toString()); }, }, - props: { - currentFolderContent: { - required: true, - type: [Object] as PropType<FolderContent>, - }, - editableDataUrl: { - required: true, - type: Boolean, - }, - editableKey: { - required: true, - type: Boolean, - }, - readOnly: { - required: true, - type: Boolean, - }, - resource: { - required: true, - type: [Object] as PropType<ResourceObject>, - }, - }, methods: { openURL() { if ( diff --git a/src/modules/resource/components/resource-page/metadata/MetadataManagerTable.vue b/src/modules/resource/components/resource-page/metadata/MetadataManagerTable.vue index abc8293c7b6fc0e1e1c2018b43b0d23d310116b9..557689da3d75b262a4e68ad5268482e6725d3eb1 100644 --- a/src/modules/resource/components/resource-page/metadata/MetadataManagerTable.vue +++ b/src/modules/resource/components/resource-page/metadata/MetadataManagerTable.vue @@ -1,41 +1,41 @@ <template> <div> <b-row - id="metadataManagerShownFilesTable" v-show="showDetail || !editableDataUrl || !editableKey" + id="metadataManagerShownFilesTable" > <b-col> <b-input-group v-for="(item, index) in shownFiles" :key="index"> <b-button - @click="$emit('changeMetadata', index)" variant="outline-secondary" :pressed="currentFileId === index" + @click="$emit('changeMetadata', index)" >{{ index + 1 }}</b-button > <b-button - @click="$emit('changeMetadata', index)" class="metadataManagerFileListFileName" :pressed="false" variant="outline-secondary" + @click="$emit('changeMetadata', index)" >{{ item.name }}<b-spinner v-show="item.uploading" label="Spinning"></b-spinner ></b-button> <b-button class="deleteFolderContentFromList" - @click="$emit('removeElement', index)" variant="outline-secondary" :disabled="item.uploading" + @click="$emit('removeElement', index)" >X</b-button > </b-input-group> </b-col> </b-row> - <b-row id="metadataManagerQuickAccess" v-show="shownFiles.length > 1"> + <b-row v-show="shownFiles.length > 1" id="metadataManagerQuickAccess"> <b-col> <b-button - @click="$emit('loadAllFilesTab')" :pressed="currentFileId === -1" variant="outline-secondary" + @click="$emit('loadAllFilesTab')" >{{ $t("page.resource.allFiles") }}</b-button > <span v-if="shownFiles.length > 1 && shownFiles.length <= 10"> @@ -43,9 +43,9 @@ v-for="(item, index) in shownFiles" :key="index" :pressed="currentFileId === index" - @click="$emit('changeMetadata', index)" variant="outline-secondary" class="metadataTabButton" + @click="$emit('changeMetadata', index)" >{{ index + 1 }}</b-button > </span> @@ -54,12 +54,12 @@ <b-row id="metadataManagerFileName" class="text-center"> <b-col> <span - class="showSpaces" v-if=" currentFileId >= 0 && currentFileId < shownFiles.length && currentFolderContent " + class="showSpaces" > {{ currentFolderContent.name }} </span> @@ -83,6 +83,7 @@ export default defineComponent({ type: Number, }, currentFolderContent: { + default: undefined, type: [Object, undefined] as PropType<FolderContent | undefined>, }, editableDataUrl: { diff --git a/src/modules/resource/components/resource-page/modals/DeleteFolderContentsModal.vue b/src/modules/resource/components/resource-page/modals/DeleteFolderContentsModal.vue index 066826c37f0d4bafa49e33086eb05e195c97273d..b2276a0dda715d128f882725a1078d7f262c74eb 100644 --- a/src/modules/resource/components/resource-page/modals/DeleteFolderContentsModal.vue +++ b/src/modules/resource/components/resource-page/modals/DeleteFolderContentsModal.vue @@ -24,8 +24,8 @@ <br /> <b-button class="float-left" - @click="$emit('close', $event.target.value)" autofocus + @click="$emit('close', $event.target.value)" >{{ $t("buttons.cancel") }}</b-button > <b-button diff --git a/src/modules/resource/components/resource-page/modals/SaveDuplicateFilesModal.vue b/src/modules/resource/components/resource-page/modals/SaveDuplicateFilesModal.vue index c8e42d4612089fe16aa4b10ca97e7ead38b95185..ddeb6207bf34eb404fdef4ab1231a28f2c64c4e8 100644 --- a/src/modules/resource/components/resource-page/modals/SaveDuplicateFilesModal.vue +++ b/src/modules/resource/components/resource-page/modals/SaveDuplicateFilesModal.vue @@ -25,8 +25,8 @@ <div> <b-button class="float-left" - @click="$emit('close', $event.target.value)" autofocus + @click="$emit('close', $event.target.value)" >{{ $t("page.resource.modalSaveDuplicateFilesBtnCancel") }}</b-button > <b-button diff --git a/src/modules/resource/components/resource-page/popovers/ValidationPopover.vue b/src/modules/resource/components/resource-page/popovers/ValidationPopover.vue index 5a3c5e4308a20bd144f1edff823be47e29808eac..cc7b813d021eefc77dbc01845f3cdf629610ccad 100644 --- a/src/modules/resource/components/resource-page/popovers/ValidationPopover.vue +++ b/src/modules/resource/components/resource-page/popovers/ValidationPopover.vue @@ -7,7 +7,7 @@ triggers="hover focus" placement="top" > - <template v-slot:title + <template #title ><b>{{ $t("page.resource.validationErrors") }}</b></template > <div> diff --git a/src/modules/resource/components/settings/Actions.vue b/src/modules/resource/components/settings/Actions.vue index ff0aeed9fd8044668ab4e5415f8441d2a8880772..b725b2b36a66f117ac638d49cd4671f6259a627e 100644 --- a/src/modules/resource/components/settings/Actions.vue +++ b/src/modules/resource/components/settings/Actions.vue @@ -2,26 +2,26 @@ <div> <!-- Archive --> <coscine-form-group - labelFor="Archive" + label-for="Archive" :label="$t('page.settings.actions.resourceArchiveLabel')" - :isLoading="isLoading" + :is-loading="isLoading" class="d-flex align-items-center" > <b-form-checkbox id="Archive" v-model="resourceForm.archived" :disabled="!(isOwner || isResourceCreator) || !resourceForm" - @click.native.prevent="isArchiveModalVisible = true" switch size="lg" + @click.native.prevent="isArchiveModalVisible = true" /> </coscine-form-group> <!-- Delete Resource --> <coscine-form-group - labelFor="DeleteResource" + label-for="DeleteResource" :label="$t('page.settings.actions.resourceDeleteLabel')" - :isLoading="isLoading" + :is-loading="isLoading" class="d-flex align-items-center" > <!-- Delete Button --> @@ -47,7 +47,7 @@ <!-- Delete Resource Modal --> <DeleteResourceModal :open="isDeleteModalVisible" - :displayName="resourceForm.displayName" + :display-name="resourceForm.displayName" @close="isDeleteModalVisible = false" @clickDelete="clickDelete" /> @@ -64,18 +64,10 @@ import type { ResourceObject } from "@coscine/api-client/dist/types/Coscine.Api. import type { UserObject } from "@coscine/api-client/dist/types/Coscine.Api.User"; export default defineComponent({ - setup() { - const projectStore = useProjectStore(); - const userStore = useUserStore(); - - return { projectStore, userStore }; - }, - components: { ArchiveResourceModal, DeleteResourceModal, }, - props: { value: { type: Object as PropType<ResourceObject>, @@ -86,6 +78,17 @@ export default defineComponent({ type: Boolean, }, }, + emits: { + toggleArchive: null, + clickDelete: null, + input: (_: ResourceObject) => null, + }, + setup() { + const projectStore = useProjectStore(); + const userStore = useUserStore(); + + return { projectStore, userStore }; + }, data() { return { @@ -131,12 +134,6 @@ export default defineComponent({ this.isDeleteModalVisible = false; }, }, - - emits: { - toggleArchive: null, - clickDelete: null, - input: (_: ResourceObject) => null, - }, }); </script> diff --git a/src/modules/resource/components/settings/Configuration.vue b/src/modules/resource/components/settings/Configuration.vue index 35a7866020c55ae83dbc2980139178210ffe3077..147ea2cd6301e8e9597df23e9631bcd20bade285 100644 --- a/src/modules/resource/components/settings/Configuration.vue +++ b/src/modules/resource/components/settings/Configuration.vue @@ -12,7 +12,7 @@ <!-- Field Definition --> <coscine-form-group v-if="resourceOption !== 'Id'" - :labelFor="resourceOption" + :label-for="resourceOption" :label=" $t( 'page.settings.configuration.resource' + resourceOption + 'Label' @@ -74,14 +74,13 @@ import type { ResourceObject } from "@coscine/api-client/dist/types/Coscine.Api. import type { ResourceTypeOption } from "../../types"; export default defineComponent({ + components: {}, setup() { const resourceStore = useResourceStore(); return { resourceStore }; }, - components: {}, - data() { return { readonly: true, diff --git a/src/modules/resource/components/settings/Metadata.vue b/src/modules/resource/components/settings/Metadata.vue index 87a7d3e0ab2b403f963c1b9eff9d50cd40d9d6ab..a279fe238917192c5ed49d136b8e84601102457a 100644 --- a/src/modules/resource/components/settings/Metadata.vue +++ b/src/modules/resource/components/settings/Metadata.vue @@ -7,14 +7,14 @@ <FormGenerator v-else :key="resourceForm.applicationProfile" - :disabledMode="!isOwner || resource.archived" - :fixedValueMode="true" - :fixedValues="resourceForm.fixedValues" - :applicationProfileId="resourceForm.applicationProfile" - :SHACLDefinition="applicationProfileString" - :classReceiver="receiveClass" - :userReceiver="async () => user" - mimeType="application/ld+json" + :disabled-mode="!isOwner || resource.archived" + :fixed-value-mode="true" + :fixed-values="resourceForm.fixedValues" + :application-profile-id="resourceForm.applicationProfile" + :s-h-a-c-l-definition="applicationProfileString" + :class-receiver="receiveClass" + :user-receiver="async () => user" + mime-type="application/ld+json" /> </div> </template> @@ -31,14 +31,6 @@ import type { BilingualLabels } from "@coscine/api-client/dist/types/Coscine.Api import type { UserObject } from "@coscine/api-client/dist/types/Coscine.Api.User"; export default defineComponent({ - setup() { - const resourceStore = useResourceStore(); - const projectStore = useProjectStore(); - const userStore = useUserStore(); - - return { resourceStore, projectStore, userStore }; - }, - props: { value: { type: Object as PropType<ResourceObject>, @@ -54,6 +46,18 @@ export default defineComponent({ }, }, + emits: { + input: (_: ResourceObject) => null, + }, + + setup() { + const resourceStore = useResourceStore(); + const projectStore = useProjectStore(); + const userStore = useUserStore(); + + return { resourceStore, projectStore, userStore }; + }, + data() { return { resourceForm: this.value, @@ -86,10 +90,6 @@ export default defineComponent({ return await this.resourceStore.getClass(className); }, }, - - emits: { - input: (_: ResourceObject) => null, - }, }); </script> diff --git a/src/modules/resource/components/settings/Overview.vue b/src/modules/resource/components/settings/Overview.vue index d01f1079a4cf884edae201a373ef46466969e2af..65d6b658c8247954a57c40732f61c8fe16de09dc 100644 --- a/src/modules/resource/components/settings/Overview.vue +++ b/src/modules/resource/components/settings/Overview.vue @@ -5,9 +5,9 @@ <!-- Project --> <b-col> <coscine-form-group - labelFor="ProjectName" + label-for="ProjectName" :label="$t('form.project.projectNameLabel')" - :isLoading="!project" + :is-loading="!project" type="input" > <b-form-input @@ -23,9 +23,9 @@ <!-- Resource Dropdown --> <b-col> <coscine-form-group - labelFor="Resource" + label-for="Resource" :label="$t('page.settings.overview.resourceLabel')" - :isLoading="!resource" + :is-loading="!resource" > <b-form-select v-if="resource" @@ -51,9 +51,9 @@ <!-- Display Name --> <b-col> <coscine-form-group - labelFor="DisplayName" + label-for="DisplayName" :label="$t('form.resource.resourceNameLabel')" - :isLoading="!resource" + :is-loading="!resource" > <b-form-input v-if="resource" @@ -68,9 +68,9 @@ <!-- Persistent ID --> <b-col> <coscine-form-group - labelFor="PersistentId" + label-for="PersistentId" :label="$t('page.settings.overview.persistentIdLabel')" - :isLoading="!resource" + :is-loading="!resource" > <b-button-group class="w-100"> <!-- Text Field --> @@ -110,9 +110,9 @@ <!-- Resource Type --> <b-col> <coscine-form-group - labelFor="ResourceType" + label-for="ResourceType" :label="$t('page.settings.overview.resourceTypeLabel')" - :isLoading="!resource" + :is-loading="!resource" type="input" > <b-form-input @@ -131,9 +131,11 @@ <b-col> <coscine-form-group v-if="resource && resource.resourceTypeOption.Size" - labelFor="Quota" + label-for="Quota" :label="$t('page.settings.overview.quotaLabel')" - :isLoading="!(resource && quotaCurrent >= 0 && quotaCurrent !== null)" + :is-loading=" + !(resource && quotaCurrent >= 0 && quotaCurrent !== null) + " > <b-button-group class="progressContainer h-100 w-100"> <!-- Progress Bar --> @@ -175,7 +177,7 @@ </template> <script lang="ts"> -import { defineComponent, PropType } from "vue-demi"; +import { defineComponent } from "vue-demi"; // import the store for current module import useResourceStore from "../../store"; import useProjectStore from "@/modules/project/store"; @@ -185,6 +187,7 @@ import type { ProjectObject } from "@coscine/api-client/dist/types/Coscine.Api.P import type { RawLocation } from "vue-router"; export default defineComponent({ + components: {}, setup() { const resourceStore = useResourceStore(); const projectStore = useProjectStore(); @@ -192,15 +195,6 @@ export default defineComponent({ return { resourceStore, projectStore }; }, - components: {}, - - props: { - value: { - type: Object as PropType<ResourceObject>, - required: false, - }, - }, - data() { return { readonly: true, @@ -209,11 +203,6 @@ export default defineComponent({ }; }, - created() { - // Fill the resource form - this.onResourceLoaded(); - }, - computed: { project(): ProjectObject | null { return this.projectStore.currentProject; @@ -245,6 +234,11 @@ export default defineComponent({ }, }, + created() { + // Fill the resource form + this.onResourceLoaded(); + }, + methods: { onResourceLoaded() { if (this.resource) { diff --git a/src/modules/resource/components/settings/modals/ArchiveResourceModal.vue b/src/modules/resource/components/settings/modals/ArchiveResourceModal.vue index fcbe449b46fe7f03f1fd7f5fb4f12e2a73a3955f..3c50d7714f4b33df5154064f20fb64bf7f4a5cf5 100644 --- a/src/modules/resource/components/settings/modals/ArchiveResourceModal.vue +++ b/src/modules/resource/components/settings/modals/ArchiveResourceModal.vue @@ -1,6 +1,6 @@ <template> <!-- Archive Resource Modal --> - <b-modal v-model="isOpen" @close="close" @hidden="hidden" :hide-footer="true"> + <b-modal v-model="isOpen" :hide-footer="true" @close="close" @hidden="hidden"> <!-- Title --> <template #modal-title> <span class="h6"> @@ -17,14 +17,12 @@ <template #br><br /></template> </i18n> - <template> - <!-- Modal Cancel Button --> - <b-button @click="close">{{ $t("buttons.cancel") }}</b-button> - <!-- Modal Delete Button --> - <b-button @click="toggleArchive" variant="primary" class="float-right"> - {{ $t(`buttons.${action}`) }} - </b-button> - </template> + <!-- Modal Cancel Button --> + <b-button @click="close">{{ $t("buttons.cancel") }}</b-button> + <!-- Modal Delete Button --> + <b-button variant="primary" class="float-right" @click="toggleArchive"> + {{ $t(`buttons.${action}`) }} + </b-button> </b-modal> </template> @@ -44,6 +42,11 @@ export default defineComponent({ }, }, + emits: { + toggleArchive: null, + close: null, + }, + data() { return { isOpen: false, @@ -76,11 +79,6 @@ export default defineComponent({ this.$emit("toggleArchive"); }, }, - - emits: { - toggleArchive: null, - close: null, - }, }); </script> diff --git a/src/modules/resource/components/settings/modals/DeleteResourceModal.vue b/src/modules/resource/components/settings/modals/DeleteResourceModal.vue index 4da11940a68ad0d677419f97e661f2c292bcf902..27f82f8411121b7faad1e747e61ecab11972350d 100644 --- a/src/modules/resource/components/settings/modals/DeleteResourceModal.vue +++ b/src/modules/resource/components/settings/modals/DeleteResourceModal.vue @@ -1,6 +1,6 @@ <template> <!-- Delete Resource Modal --> - <b-modal v-model="isOpen" @close="close" @hidden="hidden" :hide-footer="true"> + <b-modal v-model="isOpen" :hide-footer="true" @close="close" @hidden="hidden"> <!-- Title --> <template #modal-title> <span class="h6"> {{ $t(titleKey) }} </span> @@ -29,18 +29,16 @@ </div> </b-form-group> - <template> - <!-- Modal Cancel Button --> - <b-button @click="close">{{ $t("buttons.cancel") }}</b-button> - <!-- Modal Delete Button --> - <b-button - @click="clickDelete" - variant="danger" - class="float-right" - :disabled="!nameValid" - >{{ $t("buttons.delete") }}</b-button - > - </template> + <!-- Modal Cancel Button --> + <b-button @click="close">{{ $t("buttons.cancel") }}</b-button> + <!-- Modal Delete Button --> + <b-button + variant="danger" + class="float-right" + :disabled="!nameValid" + @click="clickDelete" + >{{ $t("buttons.delete") }}</b-button + > </b-modal> </template> @@ -68,6 +66,11 @@ export default defineComponent({ }, }, + emits: { + clickDelete: null, + close: null, + }, + data() { return { isOpen: false, @@ -104,11 +107,6 @@ export default defineComponent({ } }, }, - - emits: { - clickDelete: null, - close: null, - }, }); </script> diff --git a/src/modules/resource/i18n/de.ts b/src/modules/resource/i18n/de.ts index 83cbe6ddd81ba0b82c2960994df8407d982edab4..41b6b02b58a0a25664c85b7f3f072c3e8340b954 100644 --- a/src/modules/resource/i18n/de.ts +++ b/src/modules/resource/i18n/de.ts @@ -152,7 +152,8 @@ export default { modalLeavingPageBtnLeave: "SEITE VERLASSEN", toastSavingSuccessfulTitle: "Speichern erfolgreich", - toastSavingSuccessfulBody: "Zahl der erfolgreich gespeicherten Dateien: ", + toastSavingSuccessfulBody: + "Zahl der erfolgreich gespeicherten Dateien: {number}", toastSavingFailedTitle: "Speichern fehlgeschlagen", toastSavingFailedBodyTop: @@ -319,7 +320,7 @@ export default { toastSavingSuccessfulTitle: "Speichern erfolgreich", toastSavingSuccessfulBody: - "Zahl der erfolgreich gespeicherten Einträge: ", + "Zahl der erfolgreich gespeicherten Einträge: {number}", toastSavingFailedTitle: "Speichern fehlgeschlagen", toastSavingFailedBodyTop: diff --git a/src/modules/resource/i18n/en.ts b/src/modules/resource/i18n/en.ts index 39c2f3ae188dff91c0087bd79d417076d708705c..5993f65775556c82f9fd1139a65d35c9076799c6 100644 --- a/src/modules/resource/i18n/en.ts +++ b/src/modules/resource/i18n/en.ts @@ -149,11 +149,11 @@ export default { modalLeavingPageBtnLeave: "LEAVE CURRENT PAGE", toastSavingSuccessfulTitle: "Saving file(s) successful", - toastSavingSuccessfulBody: "Number of files saved: ", + toastSavingSuccessfulBody: "Number of files saved: {number}", toastSavingFailedTitle: "Saving file(s) failed", toastSavingFailedBodyTop: - "An error occured while saving the following files:", + "An error occurred while saving the following files:", toastSavingFailedBodyBottom: "Please try again.", dataUrl: "Data URL", @@ -311,11 +311,11 @@ export default { modalLeavingPageBodyTop: "These entries are currently saving:", toastSavingSuccessfulTitle: "Saving entries(s) successful", - toastSavingSuccessfulBody: "Number of entries saved: ", + toastSavingSuccessfulBody: "Number of entries saved: {number}", toastSavingFailedTitle: "Saving entry(s) failed", toastSavingFailedBodyTop: - "An error occured while saving the following entries:", + "An error occurred while saving the following entries:", }, }, }, diff --git a/src/modules/resource/pages/CreateResource.vue b/src/modules/resource/pages/CreateResource.vue index b2e8f0aa14b480ff8661fb8240f28b8832a0ea1d..0e21d5639c3c01b7628103afa6ab22e6090ba789 100644 --- a/src/modules/resource/pages/CreateResource.vue +++ b/src/modules/resource/pages/CreateResource.vue @@ -3,13 +3,13 @@ <CoscineHeadline :headline="$t('page.createResource.title')" /> <!-- Navigation Tabs --> - <b-tabs justified v-model="currentTab" class="mb-4"> + <b-tabs v-model="currentTab" justified class="mb-4"> <b-tab v-for="(tab, index) in tabs" :key="index" :disabled="!tab.active" - @click.prevent="toTab(tab)" :title="tab.title" + @click.prevent="toTab(tab)" /> </b-tabs> @@ -20,31 +20,31 @@ <Configuration v-if="currentTab === 0" v-model="resource" - :isLoading="isLoading" + :is-loading="isLoading" @valid="setNextTab" @next="next" /> <General v-else-if="currentTab === 1" v-model="resource" - :isLoading="isLoading" + :is-loading="isLoading" :readonly="false" @valid="setNextTab" /> <Metadata v-else-if="currentTab === 2" v-model="resource" - :applicationProfileList="groupedAPList" - :applicationProfileString="applicationProfileString" - :isLoadingFormGenerator="isLoadingFormGenerator" + :application-profile-list="groupedAPList" + :application-profile-string="applicationProfileString" + :is-loading-form-generator="isLoadingFormGenerator" @valid="setNextTab" /> <Overview v-else-if="currentTab === 3" v-model="resource" :tabs="tabs" - :applicationProfileString="applicationProfileString" - :isLoadingFormGenerator="isLoadingFormGenerator" + :application-profile-string="applicationProfileString" + :is-loading-form-generator="isLoadingFormGenerator" @back="back" @toTab="toTab" @waitingForResponse="isWaitingForResponse = $event" @@ -52,16 +52,16 @@ <b-form-group v-if="currentTab > 0 && currentTab < tabs.length - 1"> <!-- Button Back --> - <b-button @click.prevent="back" variant="outline-primary" + <b-button variant="outline-primary" @click.prevent="back" >{{ $t("buttons.back") }} </b-button> <!-- Button Next --> <b-button - @click.prevent="next" class="float-right" variant="outline-primary" :disabled="!tabs[currentTab + 1].active" + @click.prevent="next" >{{ $t("buttons.next") }} </b-button> </b-form-group> @@ -70,7 +70,7 @@ </b-row> <!-- Loading Spinner on Submit --> - <LoadingSpinner :isWaitingForResponse="isWaitingForResponse" /> + <LoadingSpinner :is-waiting-for-response="isWaitingForResponse" /> </div> </template> diff --git a/src/modules/resource/pages/ResourcePage.vue b/src/modules/resource/pages/ResourcePage.vue index 2817eaf19ed6e31ce1d9f75650ba9c8bb150b0eb..8808567aabf2e48292ab9f18ee097b6ff4c600b3 100644 --- a/src/modules/resource/pages/ResourcePage.vue +++ b/src/modules/resource/pages/ResourcePage.vue @@ -7,7 +7,7 @@ @dragover.prevent="" @drop.prevent="uploadDrop" > - <div class="droppable" v-if="showDroppable && fileAddable"> + <div v-if="showDroppable && fileAddable" class="droppable"> <p class="droppableText">{{ $t("page.resource.canDropFile") }}</p> </div> <coscine-headline @@ -17,19 +17,19 @@ <b-form-file ref="fileTrigger" multiple - @input="fileListUploadSelected" class="mt-3" plain + @input="fileListUploadSelected" ></b-form-file> <span id="filesViewSpan"> <div id="filesViewCard" :class="isFullscreen == false ? 'card' : ''"> <div :class="isFullscreen == false ? 'card-body' : ''"> <FilesView ref="filesView" - :folderContents="folderContents" - :currentFolder="currentFolder" - :isUploading="isUploading" - :fileListEdit="fileListEdit" + :folder-contents="folderContents" + :current-folder="currentFolder" + :is-uploading="isUploading" + :file-list-edit="fileListEdit" @showDetail="setShowDetail" @currentFolder="setCurrentFolder" @folderContents="setFolder" @@ -46,20 +46,20 @@ > <b-button v-show="isFullscreen" - squared id="metadataManagerToggleFullscreen" + squared @click="toggleMenu()" ><span>{{ $t("page.resource.metadataManager") }}</span></b-button > <div class="card"> <div class="card-body"> <MetadataManager - :showDetail="showDetail" - :fileListEdit="fileListEdit" - :fileListUpload="fileListUpload" - :folderContents="folderContents" - :currentFolder="currentFolder" - :isUploading="isUploading" + :show-detail="showDetail" + :file-list-edit="fileListEdit" + :file-list-upload="fileListUpload" + :folder-contents="folderContents" + :current-folder="currentFolder" + :is-uploading="isUploading" @emptyFileLists="emptyFileLists" @folderContents="setFolder" @removeElement="removeElement" @@ -93,7 +93,7 @@ </div> </div> </div> - <LoadingSpinner :isWaitingForResponse="isWaitingForResponse" /> + <LoadingSpinner :is-waiting-for-response="isWaitingForResponse" /> </div> </template> @@ -126,6 +126,10 @@ import type { import type { BFormFile, BTable } from "bootstrap-vue"; export default defineComponent({ + components: { + FilesView, + MetadataManager, + }, setup() { const mainStore = useMainStore(); const resourceStore = useResourceStore(); @@ -134,6 +138,25 @@ export default defineComponent({ return { mainStore, resourceStore, projectStore }; }, + data() { + return { + isWaitingForResponse: false, + fileListEdit: [] as FolderContent[], + showDetail: false, + fileListUpload: [] as FileInformation[], + folderContents: [] as FolderContent[], + currentFolder: + window.location.hash.indexOf("#") !== -1 + ? window.location.hash.substring(1) + : "/", + dragCounter: 0, + + isFullscreen: false, + isMetadataManagerHidden: false, + isUploading: false, + }; + }, + computed: { project(): null | ProjectObject { return this.projectStore.currentProject; @@ -160,25 +183,6 @@ export default defineComponent({ return this.dragCounter > 0; }, }, - - data() { - return { - isWaitingForResponse: false, - fileListEdit: [] as FolderContent[], - showDetail: false, - fileListUpload: [] as FileInformation[], - folderContents: [] as FolderContent[], - currentFolder: - window.location.hash.indexOf("#") !== -1 - ? window.location.hash.substring(1) - : "/", - dragCounter: 0, - - isFullscreen: false, - isMetadataManagerHidden: false, - isUploading: false, - }; - }, watch: { resourceTypeInformation() { this.emptyFileLists(); @@ -343,10 +347,6 @@ export default defineComponent({ } }, }, - components: { - FilesView, - MetadataManager, - }, }); </script> diff --git a/src/modules/resource/pages/Settings.vue b/src/modules/resource/pages/Settings.vue index de0b6837c685ea748f9cc23bd3644a9bb349cb32..529d9b35e3c7291b0f10973057d522db7ca13cf0 100644 --- a/src/modules/resource/pages/Settings.vue +++ b/src/modules/resource/pages/Settings.vue @@ -6,13 +6,13 @@ <Overview /> <!-- Navigation Tabs --> - <b-tabs justified v-model="currentTab" class="my-4" v-if="resource"> + <b-tabs v-if="resource" v-model="currentTab" justified class="my-4"> <b-tab v-for="(tab, index) in tabs" :key="index" :disabled="!tab.active" - @click.prevent="toTab(tab)" :title="tab.title" + @click.prevent="toTab(tab)" /> </b-tabs> <b-row v-else align-h="center" class="my-4"> @@ -26,7 +26,7 @@ <General v-show="tabs[currentTab].step === 'general'" v-model="resourceForm" - :isLoading="isLoading" + :is-loading="isLoading" :readonly="false" @validation="validation = $event" /> @@ -35,8 +35,8 @@ <Metadata v-show="tabs[currentTab].step === 'metadata'" v-model="resourceForm" - :applicationProfileString="applicationProfileString" - :isLoadingFormGenerator="isLoading" + :application-profile-string="applicationProfileString" + :is-loading-form-generator="isLoading" @clickSave="clickSave" /> @@ -53,17 +53,17 @@ <b-form-group> <b-button v-if="confirmButtonVisibility" - @click.prevent="clickSave" :disabled="!validResourceForm" class="float-right" variant="primary" + @click.prevent="clickSave" > {{ $t("buttons.confirm") }} </b-button> </b-form-group> <!-- Loading Spinner on Submit --> - <LoadingSpinner :isWaitingForResponse="isWaitingForResponse" /> + <LoadingSpinner :is-waiting-for-response="isWaitingForResponse" /> </div> </template> @@ -86,15 +86,9 @@ import type { import type { ResourceCreationTab, ResourceTypeOption } from "../types"; import type { ProjectObject } from "@coscine/api-client/dist/types/Coscine.Api.Project"; import type { Validation } from "vuelidate"; +import useNotificationStore from "@/store/notification"; export default defineComponent({ - setup() { - const resourceStore = useResourceStore(); - const projectStore = useProjectStore(); - - return { resourceStore, projectStore }; - }, - components: { Overview, Configuration, @@ -102,6 +96,13 @@ export default defineComponent({ Metadata, Actions, }, + setup() { + const resourceStore = useResourceStore(); + const projectStore = useProjectStore(); + const notificationStore = useNotificationStore(); + + return { resourceStore, projectStore, notificationStore }; + }, data() { return { @@ -239,20 +240,6 @@ export default defineComponent({ } }, - makeToast( - text = "Message", - givenTitle = "Title", - variant: string | undefined = undefined - ) { - this.$root.$bvToast.toast(text, { - title: givenTitle, - autoHideDelay: 5000, - toaster: "b-toaster-bottom-right", - variant: variant, - noCloseButton: true, - }); - }, - async clickSave() { this.isWaitingForResponse = true; const success = await this.resourceStore.updateResource( @@ -265,17 +252,17 @@ export default defineComponent({ if (this.resource && this.resource.id) { await this.resourceStore.retrieveResource(this.resource.id); } - this.makeToast( - this.$t("toast.onSave.success.message").toString(), - this.$t("toast.onSave.success.title").toString() - ); + this.notificationStore.postNotification({ + title: this.$t("toast.onSave.success.title").toString(), + body: this.$t("toast.onSave.success.message").toString(), + }); } else { // On Failure - this.makeToast( - this.$t("toast.onSave.failure.message").toString(), - this.$t("toast.onSave.failure.title").toString(), - "danger" - ); + this.notificationStore.postNotification({ + title: this.$t("toast.onSave.failure.title").toString(), + body: this.$t("toast.onSave.failure.message").toString(), + variant: "danger", + }); } this.isWaitingForResponse = false; }, @@ -295,17 +282,21 @@ export default defineComponent({ await this.resourceStore.retrieveResource(this.resource.id); } const action = !this.resource.archived ? "unarchive" : "archive"; - this.makeToast( - this.$t(`page.settings.actions.${action}.toast.body`).toString(), - this.$t(`page.settings.actions.${action}.toast.title`).toString() - ); + this.notificationStore.postNotification({ + title: this.$t( + `page.settings.actions.${action}.toast.title` + ).toString(), + body: this.$t( + `page.settings.actions.${action}.toast.body` + ).toString(), + }); } else { // On Failure - this.makeToast( - this.$t("toast.onSave.failure.message").toString(), - this.$t("toast.onSave.failure.title").toString(), - "danger" - ); + this.notificationStore.postNotification({ + title: this.$t("toast.onSave.failure.title").toString(), + body: this.$t("toast.onSave.failure.message").toString(), + variant: "danger", + }); } this.isWaitingForResponse = false; } @@ -321,18 +312,18 @@ export default defineComponent({ const parentProject = this.project; // Refresh the project information in the store await this.projectStore.refreshProjectInformation(parentProject); - this.makeToast( - this.$t("toast.onDelete.success.message").toString(), - this.$t("toast.onDelete.success.title").toString() - ); + this.notificationStore.postNotification({ + title: this.$t("toast.onDelete.success.title").toString(), + body: this.$t("toast.onDelete.success.message").toString(), + }); navigateToProject(parentProject); } else { // On Failure - this.makeToast( - this.$t("toast.onDelete.failure.message").toString(), - this.$t("toast.onDelete.failure.title").toString(), - "danger" - ); + this.notificationStore.postNotification({ + title: this.$t("toast.onDelete.failure.title").toString(), + body: this.$t("toast.onDelete.failure.message").toString(), + variant: "danger", + }); } this.isWaitingForResponse = false; }, diff --git a/src/modules/resource/store.ts b/src/modules/resource/store.ts index 4725aaeaac3d348e10e4c8b366e98ff95c3a8c6a..8f9ed9e686158c52e77ed658dfeaceb18da9b3bc 100644 --- a/src/modules/resource/store.ts +++ b/src/modules/resource/store.ts @@ -4,7 +4,6 @@ import type { ResourceState, VisitedResourceObject, } from "./types"; -import { StatusCodes } from "http-status-codes"; import { reactive } from "vue-demi"; import { @@ -20,6 +19,8 @@ import { useLocalStorage } from "@vueuse/core"; import type { BilingualLabels } from "@coscine/api-client/dist/types/Coscine.Api.Metadata"; import type { ProjectObject } from "@coscine/api-client/dist/types/Coscine.Api.Project"; import { updatedDiff } from "deep-object-diff"; +import useNotificationStore from "@/store/notification"; +import type { AxiosError } from "axios"; /* Store variable name is "this.<id>Store" id: "resource" --> this.resourceStore @@ -85,69 +86,84 @@ export const useResourceStore = defineStore({ */ actions: { async retrieveResource(id: string) { - const apiResponse = await ResourceApi.resourceGet(id); - if (apiResponse.status === StatusCodes.OK) { - const resource: ResourceObject = apiResponse.data; - this.addResourceAsVisited(resource); - } else { + const notificationStore = useNotificationStore(); + try { + const apiResponse = await ResourceApi.resourceGet(id); + this.addResourceAsVisited(apiResponse.data as ResourceObject); + } catch (error) { // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); } }, async retrieveApplicationProfile(resource: VisitedResourceObject) { - if (resource.applicationProfile) { - const apiResponse = await MetadataApi.metadataGetProfile( - resource.applicationProfile - ); - if (apiResponse.status === StatusCodes.OK) { + const notificationStore = useNotificationStore(); + try { + if (resource.applicationProfile) { + const apiResponse = await MetadataApi.metadataGetProfile( + resource.applicationProfile + ); resource.fullApplicationProfile = apiResponse.data; } else { - // Handle other Status Codes + console.error("Resource's application profile may be undefined."); } + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); } }, async getApplicationProfile( applicationProfile: string ): Promise<ApplicationProfile> { - const apiResponse = await MetadataApi.metadataGetProfile( - applicationProfile - ); - if (apiResponse.status === StatusCodes.OK) { + const notificationStore = useNotificationStore(); + try { + const apiResponse = await MetadataApi.metadataGetProfile( + applicationProfile + ); return apiResponse.data; - } else { + } catch (error) { // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); return []; } }, async getApplicationProfilesList(): Promise<string[] | undefined> { - const apiResponse = await MetadataApi.metadataGetProfiles(); - if (apiResponse.status === StatusCodes.OK) { + const notificationStore = useNotificationStore(); + try { + const apiResponse = await MetadataApi.metadataGetProfiles(); return apiResponse.data; - } else { + } catch (error) { // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); } }, async retrieveUsedQuota(resource: VisitedResourceObject) { - if (resource.id) { - const apiResponse = await BlobApi.blobGetQuota(resource.id); - if (apiResponse.status === StatusCodes.OK) { + const notificationStore = useNotificationStore(); + try { + if (resource.id) { + const apiResponse = await BlobApi.blobGetQuota(resource.id); resource.usedQuota = Number(apiResponse.data.data.usedSizeByte); } else { - // Handle other Status Codes + console.error("Selected resource's ID is undefined."); } + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); } }, async retrieveResourceTypes() { - const apiResponse = - await ResourceTypeApi.resourceTypeGetEnabledResourceTypes(); - if (apiResponse.status === StatusCodes.OK) { + const notificationStore = useNotificationStore(); + try { + const apiResponse = + await ResourceTypeApi.resourceTypeGetEnabledResourceTypes(); this.resourceTypes = apiResponse.data; - } else { + } catch (error) { // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); } }, @@ -155,38 +171,38 @@ export const useResourceStore = defineStore({ project: ProjectObject, resource: ResourceObject ): Promise<ResourceObject | null> { - if (project.id) { - const apiResponse = await ResourceApi.resourceStoreToProject( - project.id, - resource - ); - if (apiResponse.status === StatusCodes.OK) { - const createdResource: ResourceObject = apiResponse.data; - return createdResource; + const notificationStore = useNotificationStore(); + try { + if (project.id) { + const apiResponse = await ResourceApi.resourceStoreToProject( + project.id, + resource + ); + return apiResponse.data as ResourceObject; } else { - // Handle other Status Codes + console.error("Selected project's ID is undefined."); return null; } - } else { - console.error("Selected project's ID is undefined."); + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); return null; } }, async updateResource(resource: ResourceObject): Promise<boolean> { - if (resource.id) { - const apiResponse = await ResourceApi.resourceUpdate( - resource.id, - resource - ); - if (apiResponse.status === StatusCodes.OK) { + const notificationStore = useNotificationStore(); + try { + if (resource.id) { + await ResourceApi.resourceUpdate(resource.id, resource); return true; } else { - // Handle other Status Codes + console.error("Selected resource's ID is undefined."); return false; } - } else { - console.error("Selected resource's ID is undefined."); + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); return false; } }, @@ -195,34 +211,35 @@ export const useResourceStore = defineStore({ resource: ResourceObject, status: boolean ): Promise<boolean> { - if (resource.id) { - const apiResponse = await ResourceApi.resourceSetResourceReadonly( - resource.id, - status - ); - if (apiResponse.status === StatusCodes.OK) { + const notificationStore = useNotificationStore(); + try { + if (resource.id) { + await ResourceApi.resourceSetResourceReadonly(resource.id, status); return true; } else { - // Handle other Status Codes + console.error("Selected resource's ID is undefined."); return false; } - } else { - console.error("Selected resource's ID is undefined."); + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); return false; } }, async deleteResource(resource: ResourceObject): Promise<boolean> { - if (resource.id) { - const apiResponse = await ResourceApi.resourceDelete(resource.id); - if (apiResponse.status === StatusCodes.OK) { + const notificationStore = useNotificationStore(); + try { + if (resource.id) { + await ResourceApi.resourceDelete(resource.id); return true; } else { - // Handle other Status Codes + console.error("Selected resource's ID is undefined."); return false; } - } else { - console.error("Selected resource's ID is undefined."); + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); return false; } }, @@ -275,32 +292,40 @@ export const useResourceStore = defineStore({ resource: ResourceObject | null, absoluteFilePath: string ) { - if (resource && resource.id) { - try { + const notificationStore = useNotificationStore(); + try { + if (resource && resource.id) { await BlobApi.blobDeleteFileWithParameter( resource.id, absoluteFilePath ); return true; - } catch { + } else { + console.error("Selected resource or its ID is undefined."); return false; } + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); + return false; } - return false; }, async getClass(className: string): Promise<BilingualLabels> { - if (!this.classes[className]) { - try { + const notificationStore = useNotificationStore(); + try { + if (!this.classes[className]) { const response = await MetadataApi.metadataGetClassInstances( className ); this.classes[className] = response.data; - } catch { - return {}; } + return this.classes[className]; + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); + return {}; } - return this.classes[className]; }, async getFile( @@ -308,8 +333,9 @@ export const useResourceStore = defineStore({ absoluteFilePath: string, asBlob = false ) { - if (resource && resource.id) { - try { + const notificationStore = useNotificationStore(); + try { + if (resource && resource.id) { const response = await BlobApi.blobGetFileWithParameter( resource.id, absoluteFilePath, @@ -320,29 +346,38 @@ export const useResourceStore = defineStore({ : undefined ); return response.data; - } catch { + } else { + console.error("Selected resource or its ID is undefined."); return null; } + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); + return null; } - return null; }, async getMetadata( resource: ResourceObject | null, absoluteFilePath: string ) { - if (resource && resource.id) { - try { + const notificationStore = useNotificationStore(); + try { + if (resource && resource.id) { const response = await TreeApi.treeGetMetadataWithParameter( resource.id, absoluteFilePath ); return response.data; - } catch { + } else { + console.error("Selected resource or its ID is undefined."); return null; } + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); + return null; } - return null; }, async storeFile( @@ -351,8 +386,9 @@ export const useResourceStore = defineStore({ files: Blob[], options?: unknown ) { - if (resource && resource.id) { - try { + const notificationStore = useNotificationStore(); + try { + if (resource && resource.id) { await BlobApi.blobUploadFileWithParameter( resource.id, absoluteFilePath, @@ -360,11 +396,15 @@ export const useResourceStore = defineStore({ options ); return true; - } catch { + } else { + console.error("Selected resource or its ID is undefined."); return false; } + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); + return false; } - return false; }, async storeMetadata( @@ -372,19 +412,24 @@ export const useResourceStore = defineStore({ absoluteFilePath: string, body: unknown ) { - if (resource && resource.id) { - try { + const notificationStore = useNotificationStore(); + try { + if (resource && resource.id) { await TreeApi.treeStoreMetadataForFileWithParameter( resource.id, absoluteFilePath, { data: body } ); return true; - } catch { + } else { + console.error("Selected resource or its ID is undefined."); return false; } + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); + return false; } - return false; }, }, }); diff --git a/src/modules/search/SearchModule.vue b/src/modules/search/SearchModule.vue index 1f4cb8d196f3a365d1c5439d6a2d32b84f6ebd84..f72415930c27a674fad16ee283fd9adb2261c0f9 100644 --- a/src/modules/search/SearchModule.vue +++ b/src/modules/search/SearchModule.vue @@ -1,6 +1,9 @@ <template> <div> <router-view v-if="moduleIsReady" /> + <b-row v-else align-h="center" class="my-4"> + <b-spinner variant="secondary" /> + </b-row> </div> </template> @@ -20,16 +23,16 @@ export default defineComponent({ return { mainStore, searchStore }; }, - created() { - this.initialize(); - }, - computed: { moduleIsReady(): boolean { return true; }, }, + created() { + this.initialize(); + }, + methods: { async initialize() { // do initialization stuff (e.g. API calls, element loading, etc.) diff --git a/src/modules/search/pages/Search.vue b/src/modules/search/pages/Search.vue index c6c0de5cd8499d7a8af720ab11e0a6428b184af8..444fa78ce18188b59478c17066f952f1f59638e2 100644 --- a/src/modules/search/pages/Search.vue +++ b/src/modules/search/pages/Search.vue @@ -16,7 +16,7 @@ :placeholder="$t('page.search.search')" ></b-form-input> </b-col> - <b-col sm="2" id="selectProjCol" align-self="center" class="pl-0"> + <b-col id="selectProjCol" sm="2" align-self="center" class="pl-0"> <b-form-select v-model="selectProjValue"> <template #first> <b-form-select-option :value="null" disabled @@ -25,7 +25,7 @@ </template> </b-form-select> </b-col> - <b-col sm="2" id="selectResCol" align-self="center" class="pl-0"> + <b-col id="selectResCol" sm="2" align-self="center" class="pl-0"> <b-form-select v-model="selectResValue"> <template #first> <b-form-select-option :value="null" disabled @@ -64,16 +64,16 @@ no-outer-focus class="border-0 bg-transparent" > - <template v-slot="{ tags, removeTag }"> + <template #default="{ tags, removeTag }"> <div> <b-form-tag v-for="tag in tags" - @remove="removeTag(tag)" :key="tag" :title="tag" variant="primary" pill class="mr-1" + @remove="removeTag(tag)" >{{ tag }} </b-form-tag> </div> @@ -188,6 +188,10 @@ import type { import type { SearchResult } from "@coscine/api-client/dist/types/Coscine.Api.Search"; export default defineComponent({ + components: { + Result, + Sidebar, + }, setup() { const mainStore = useMainStore(); const searchStore = useSearchStore(); @@ -212,11 +216,6 @@ export default defineComponent({ }; }, - components: { - Result, - Sidebar, - }, - computed: { paginationTotalRows(): number { if (this.searchResults !== null) { diff --git a/src/modules/search/pages/components/Result.vue b/src/modules/search/pages/components/Result.vue index e161120c4077e5aa066f2ab9720b3a9d8fbdee20..c3a42483b29ba9fe9850503e21c56d64fb8bd449 100644 --- a/src/modules/search/pages/components/Result.vue +++ b/src/modules/search/pages/components/Result.vue @@ -40,6 +40,12 @@ import type { } from "../../types"; export default defineComponent({ + props: { + result: { + required: true, + type: Object as PropType<EnhancedOldSearchResult | EnhancedSearchResult>, + }, + }, setup() { const mainStore = useMainStore(); const searchStore = useSearchStore(); @@ -49,12 +55,6 @@ export default defineComponent({ data() { return {}; }, - props: { - result: { - required: true, - type: Object as PropType<EnhancedOldSearchResult | EnhancedSearchResult>, - }, - }, computed: { archived(): boolean { // We don't get this information currently without specifically querying it diff --git a/src/modules/search/routes.ts b/src/modules/search/routes.ts index a34aa3d1cbb4ce43d267845252c6b3a4d7182e08..1ca3d091f51089e447a439a41368c9459ab46a6a 100644 --- a/src/modules/search/routes.ts +++ b/src/modules/search/routes.ts @@ -10,7 +10,6 @@ export const SearchRoutes: RouteConfig[] = [ path: "/search", component: SearchModule, meta: { - breadCrumb: "search", i18n: SearchI18nMessages, }, children: [ @@ -18,6 +17,9 @@ export const SearchRoutes: RouteConfig[] = [ path: "/", name: "search", component: Search, + meta: { + breadCrumb: "search", + }, }, ], }, diff --git a/src/modules/user/UserModule.vue b/src/modules/user/UserModule.vue index d8ae5577583f500ea49272bc22496c17934f8764..bb0697aec4e730be386ebf20e29ac3087189d036 100644 --- a/src/modules/user/UserModule.vue +++ b/src/modules/user/UserModule.vue @@ -1,6 +1,9 @@ <template> <div> <router-view v-if="moduleIsReady" /> + <b-row v-else align-h="center" class="my-4"> + <b-spinner variant="secondary" /> + </b-row> </div> </template> @@ -11,17 +14,15 @@ import { defineComponent } from "vue-demi"; import useUserStore from "./store"; // import the main store import useMainStore from "@/store/index"; +import useProjectStore from "../project/store"; export default defineComponent({ setup() { const mainStore = useMainStore(); + const projectStore = useProjectStore(); const userStore = useUserStore(); - return { mainStore, userStore }; - }, - - created() { - this.initialize(); + return { mainStore, projectStore, userStore }; }, computed: { @@ -36,6 +37,10 @@ export default defineComponent({ }, }, + created() { + this.initialize(); + }, + methods: { async initialize() { await Promise.all([ diff --git a/src/modules/user/i18n/de.ts b/src/modules/user/i18n/de.ts index 55ed3ed95eca881a48c9def8bf875dd3b1349717..5034c8a12a65ac37bf2e7606dbbaa1fefd5dfc56 100644 --- a/src/modules/user/i18n/de.ts +++ b/src/modules/user/i18n/de.ts @@ -98,7 +98,7 @@ export default { }, userPreferences: { - header: "Benutzer Voreinstellungen", + header: "Nutzerpräferenzen", language: "Sprache", labels: { diff --git a/src/modules/user/pages/UserProfile.vue b/src/modules/user/pages/UserProfile.vue index 399a70cd1c8bd368c6b4f487f3a8f728771fe089..53d07a4e2e329d4ec8094dc39e973c991545863c 100644 --- a/src/modules/user/pages/UserProfile.vue +++ b/src/modules/user/pages/UserProfile.vue @@ -9,11 +9,11 @@ /> <!-- Title --> <coscine-form-group - labelFor="title" + label-for="title" :label=" $t('page.userprofile.form.personalInformation.labels.titleLabel') " - :isLoading="isLoading" + :is-loading="isLoading" type="input" > <multiselect @@ -28,7 +28,7 @@ 'page.userprofile.form.personalInformation.multiselect.placeholderTitle' ) " - :selectLabel=" + :select-label=" $t( 'page.userprofile.form.personalInformation.multiselect.selectEnter' ) @@ -49,13 +49,13 @@ <!-- Given Name --> <coscine-form-group :mandatory="true" - labelFor="givenname" + label-for="givenname" :label=" $t( 'page.userprofile.form.personalInformation.labels.givenNameLabel' ) " - :isLoading="isLoading" + :is-loading="isLoading" type="input" > <b-form-input @@ -70,11 +70,11 @@ <!-- Surname --> <coscine-form-group :mandatory="true" - labelFor="surname" + label-for="surname" :label=" $t('page.userprofile.form.personalInformation.labels.surnameLabel') " - :isLoading="isLoading" + :is-loading="isLoading" type="input" > <b-form-input @@ -89,11 +89,11 @@ <!-- Email --> <coscine-form-group :mandatory="true" - labelFor="Email" + label-for="Email" :label=" $t('page.userprofile.form.personalInformation.labels.emailLabel') " - :isLoading="isLoading" + :is-loading="isLoading" type="input" > <b-form-input @@ -109,13 +109,13 @@ <!-- Organization --> <coscine-form-group :mandatory="true" - labelFor="organization" + label-for="organization" :label=" $t( 'page.userprofile.form.personalInformation.labels.organizationLabel' ) " - :isLoading="isLoading" + :is-loading="isLoading" type="input" > <multiselect @@ -166,13 +166,13 @@ <!-- Institute --> <coscine-form-group :mandatory="true" - labelFor="institute" + label-for="institute" :label=" $t( 'page.userprofile.form.personalInformation.labels.instituteLabel' ) " - :isLoading="isLoading" + :is-loading="isLoading" type="input" > <b-form-input @@ -203,13 +203,13 @@ <!-- Discipline --> <coscine-form-group :mandatory="true" - labelFor="Discipline" + label-for="Discipline" :label=" $t( 'page.userprofile.form.personalInformation.labels.disciplineLabel' ) " - :isLoading="isLoading" + :is-loading="isLoading" type="input" > <multiselect @@ -248,27 +248,23 @@ /> <coscine-form-group :mandatory="true" - labelFor="language" + label-for="language" :label=" $t('page.userprofile.form.userPreferences.labels.languageLabel') " - :isLoading="isLoading" + :is-loading="isLoading" type="button" > <b-form-radio-group - class="bv-no-focus-ring" id="language" - @change=" - ($event) => (this.$v.form.language.$model = { id: $event }) - " - :checked=" - this.form.language !== undefined ? this.form.language.id : false - " + class="bv-no-focus-ring" + :checked="form.language !== undefined ? form.language.id : false" :options="languages" name="radios-stacked" text-field="displayName" value-field="id" stacked + @change="($event) => ($v.form.language.$model = { id: $event })" ></b-form-radio-group> </coscine-form-group> @@ -282,15 +278,15 @@ :label=" $t('page.userprofile.form.connectedAccounts.labels.orcidLabel') " - :isLoading="isLoading" + :is-loading="isLoading" type="button" > <b-button variant="secondary" class="float-left" name="orcidConnect" - @click.prevent="clickConnect('orcid')" :disabled="orcidConnected" + @click.prevent="clickConnect('orcid')" >{{ orcidConnected ? $t("buttons.connected") : $t("buttons.connect") }}</b-button @@ -301,15 +297,15 @@ :label=" $t('page.userprofile.form.connectedAccounts.labels.shibbolethLabel') " - :isLoading="isLoading" + :is-loading="isLoading" type="button" > <b-button variant="secondary" class="float-left" name="shibbolethConnect" - @click.prevent="clickConnect('shibboleth')" :disabled="shibbolethConnected" + @click.prevent="clickConnect('shibboleth')" >{{ shibbolethConnected ? $t("buttons.connected") @@ -321,17 +317,17 @@ <!-- Save Button --> <coscine-form-group> <b-button + ref="saveBtn" type="submit" variant="primary" class="float-right" name="save" - ref="saveBtn" - @click.prevent="clickSave" :disabled="$v.form.$invalid || savingProfile || !$v.form.$anyDirty" + @click.prevent="clickSave" > <b-iconstack - animation="spin" v-if="savingProfile" + animation="spin" aria-hidden="true" > <b-icon @@ -374,9 +370,9 @@ import { defineComponent } from "vue-demi"; import { validationMixin } from "vuelidate"; import { required, email } from "vuelidate/lib/validators"; import { clone } from "lodash"; -import CoscineFormGroup from "@/components/CoscineFormGroup.vue"; +import CoscineFormGroup from "@/components/coscine/CoscineFormGroup.vue"; import AccessToken from "./components/AccessToken.vue"; -import CoscineHeadline from "@/components/CoscineHeadline.vue"; +import CoscineHeadline from "@/components/coscine/CoscineHeadline.vue"; import "@/plugins/deprecated/vue-multiselect"; @@ -392,20 +388,22 @@ import type { UserObject, } from "@coscine/api-client/dist/types/Coscine.Api.User"; import type { OrganizationObject } from "@coscine/api-client/dist/types/Coscine.Api.Project"; +import useNotificationStore from "@/store/notification"; export default defineComponent({ - setup() { - const mainStore = useMainStore(); - const userStore = useUserStore(); - - return { mainStore, userStore }; - }, components: { AccessToken, CoscineFormGroup, CoscineHeadline, }, mixins: [validationMixin], + setup() { + const mainStore = useMainStore(); + const userStore = useUserStore(); + const notificationStore = useNotificationStore(); + + return { mainStore, userStore, notificationStore }; + }, validations: { form: { title: {}, @@ -448,15 +446,13 @@ export default defineComponent({ }, emailHint(): string { if (!this.form.emailAddress) { - return this.$parent - .$t("page.userprofile.form.personalInformation.emailChange.noAddress") - .toString(); + return this.$t( + "page.userprofile.form.personalInformation.emailChange.noAddress" + ).toString(); } else if (this.contactChange !== null && this.contactChange.length > 0) { - return this.$parent - .$t( - "page.userprofile.form.personalInformation.emailChange.pendingConfirmation" - ) - .toString(); + return this.$t( + "page.userprofile.form.personalInformation.emailChange.pendingConfirmation" + ).toString(); } return ""; }, @@ -560,44 +556,33 @@ export default defineComponent({ this.userStore.retrieveContactChange(), this.userStore.retrieveUser(), ]); - this.makeToast( - this.$parent - .$t( - "page.userprofile.form.personalInformation.emailChange.changedMessage" - ) - .toString(), - this.$parent - .$t( - "page.userprofile.form.personalInformation.emailChange.changedTitle" - ) - .toString() - ); + this.notificationStore.postNotification({ + title: this.$t( + "page.userprofile.form.personalInformation.emailChange.changedTitle" + ).toString(), + body: this.$t( + "page.userprofile.form.personalInformation.emailChange.changedMessage" + ).toString(), + }); } try { await this.userStore.updateUser(this.form); this.$v.form.$reset(); - this.makeToast( - this.$t("toast.onSave.success.message").toString(), - this.$t("toast.onSave.success.title").toString() - ); + this.notificationStore.postNotification({ + title: this.$t("toast.onSave.success.title").toString(), + body: this.$t("toast.onSave.success.message").toString(), + }); } catch { - this.makeToast( - this.$t("toast.onSave.failure.message").toString(), - this.$t("toast.onSave.failure.title").toString() - ); + this.notificationStore.postNotification({ + title: this.$t("toast.onSave.failure.title").toString(), + body: this.$t("toast.onSave.failure.message").toString(), + variant: "danger", + }); } finally { this.savingProfile = false; } } }, - makeToast(text = "Message", givenTitle = "title") { - this.$root.$bvToast.toast(text, { - title: givenTitle, - autoHideDelay: 5000, - toaster: "b-toaster-bottom-right", - noCloseButton: true, - }); - }, triggerFetchOptions(search: string) { clearTimeout(this.queryTimer); if (search.length < 3) { diff --git a/src/modules/user/pages/components/AccessToken.vue b/src/modules/user/pages/components/AccessToken.vue index d05e76b06d70e0297dc90cda3d456bace04ce301..4d4f77d5cdbbce2c4ba7ead21426fca82ef4c590 100644 --- a/src/modules/user/pages/components/AccessToken.vue +++ b/src/modules/user/pages/components/AccessToken.vue @@ -13,14 +13,16 @@ v-model="$v.token.AccessToken.$model" :readonly="true" /> - <b-button id="copyButton" @click="copyToken" style="margin: inherit" - ><b-icon-clipboard - /></b-button> - <b-tooltip ref="tooltip" target="copyButton" triggers="focus">{{ - $t( - "page.userprofile.form.accessToken.modal.createToken.copyToClipboard" - ) - }}</b-tooltip> + <b-button id="copyButton" style="margin: inherit" @click="copyToken"> + <b-icon-clipboard /> + </b-button> + <b-tooltip ref="tooltip" target="copyButton" triggers="focus"> + {{ + $t( + "page.userprofile.form.accessToken.modal.createToken.copyToClipboard" + ) + }} + </b-tooltip> </b-button-group> </div> <template #buttons> @@ -40,16 +42,15 @@ > <br /> <div class="revoke-modal-content">{{ selectedTokenName }}</div> - <br /> <template #buttons> - <b-button name="close" @click="isRevokeModalVisible = false">{{ - $t("buttons.cancel") - }}</b-button> + <b-button name="close" @click="isRevokeModalVisible = false"> + {{ $t("buttons.cancel") }} + </b-button> <b-button name="deleteToken" - @click="confirmRevoke" variant="danger" style="float: right" + @click="confirmRevoke" >{{ $t("buttons.revoke") }}</b-button > </template> @@ -66,6 +67,7 @@ {{ $t("page.userprofile.form.accessToken.bodyText") }} </b-form-text> </b-form-group> + <!-- Token Name --> <b-form-group class="mandatory" @@ -104,8 +106,8 @@ class="float-right" name="create-token" style="margin-right: 0px" - @click.prevent="createToken" :disabled="$v.token.$invalid" + @click.prevent="createToken" >{{ $t("buttons.tokenCreate") }}</b-button > </b-form-group> @@ -153,9 +155,9 @@ </template> <template #cell(actions)="selectedToken"> <b-button - v-on:click="revokeToken(selectedToken.item)" size="sm" variant="danger" + @click="revokeToken(selectedToken.item)" >{{ $t("buttons.revoke") }}</b-button > </template> @@ -172,8 +174,6 @@ import { validationMixin } from "vuelidate"; import { required } from "vuelidate/lib/validators"; import { BIconClipboard } from "bootstrap-vue"; -import CoscineModal from "@/components/CoscineModal.vue"; - // import the main store import useMainStore from "@/store/index"; // import the store for current module @@ -193,18 +193,16 @@ interface TokenValidityBoundDates { } export default defineComponent({ + components: { + BIconClipboard, + }, + mixins: [validationMixin], setup() { const mainStore = useMainStore(); const userStore = useUserStore(); return { mainStore, userStore }; }, - mixins: [validationMixin], - name: "accesstoken", - components: { - CoscineModal, - BIconClipboard, - }, validations: { token: { TokenExpirationDate: {}, @@ -255,8 +253,6 @@ export default defineComponent({ TokenName: "", AccessToken: "" as string, }, - languages: [] as Record<string, unknown>[], - Language: [] as Record<string, unknown>[], }; }, diff --git a/src/modules/user/store.ts b/src/modules/user/store.ts index 8762e4e3071a4673e226bdeedfb77d7f58ee6acd..f43b2885e465a82f588f687f64eaedd89c79cac2 100644 --- a/src/modules/user/store.ts +++ b/src/modules/user/store.ts @@ -14,6 +14,8 @@ import type { UserState } from "./types"; // import the main store import useMainStore from "@/store/index"; +import useNotificationStore from "@/store/notification"; +import type { AxiosError } from "axios"; /* Store variable name is "this.<id>Store" @@ -63,108 +65,172 @@ export const useUserStore = defineStore({ @click = "this.userStore.<action_name>(); */ actions: { - async queryUser(searchString: string, projectId: string) { - return (await UserApi.userQuery(searchString, projectId)).data; + async getUser(searchString: string, projectId: string) { + const notificationStore = useNotificationStore(); + try { + const apiResponse = await UserApi.userQuery(searchString, projectId); + return apiResponse.data; + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); + } }, + async retrieveContactChange() { + const notificationStore = useNotificationStore(); try { - this.userProfile.contactChange = ( - await ContactChangeApi.contactChangeConfirmationStatus() - ).data; - } catch { - console.error("Could not fetch contact changes"); - // TODO: Handle error + const apiResponse = + await ContactChangeApi.contactChangeConfirmationStatus(); + this.userProfile.contactChange = apiResponse.data; + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); } }, + async retrieveDisciplines() { + const notificationStore = useNotificationStore(); try { - this.userProfile.disciplines = ( - await DisciplineApi.disciplineIndex() - ).data; - } catch { - console.error("Could not fetch disciplines"); - // TODO: Handle error + const apiResponse = await DisciplineApi.disciplineIndex(); + this.userProfile.disciplines = apiResponse.data; + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); } }, + async retrieveLanguages() { + const notificationStore = useNotificationStore(); try { - this.userProfile.languages = (await LanguageApi.languageIndex()).data; - } catch { - console.error("Could not fetch languages"); - // TODO: Handle error + const apiResponse = await LanguageApi.languageIndex(); + this.userProfile.languages = apiResponse.data; + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); } }, + async retrieveMemberOrganizations() { + const notificationStore = useNotificationStore(); try { - this.userProfile.memberOrganizations = ( - await OrganizationApi.organizationIsMember2() - ).data.data; - } catch { - console.error("Could not fetch member organizations"); - // TODO: Handle error + const apiResponse = await OrganizationApi.organizationIsMember2(); + this.userProfile.memberOrganizations = apiResponse.data.data; + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); } }, + async retrieveOrganizations(filter = "") { + const notificationStore = useNotificationStore(); try { - this.userProfile.organizations = ( - await OrganizationApi.organizationGetROR(filter) - ).data.data; - } catch { - console.error("Could not fetch organizations"); - // TODO: Handle error + const apiResponse = await OrganizationApi.organizationGetROR(filter); + this.userProfile.organizations = apiResponse.data.data; + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); } }, + async retrieveTitles() { + const notificationStore = useNotificationStore(); try { - this.userProfile.titles = (await TitleApi.titleIndex()).data; - } catch { - console.error("Could not fetch titles"); - // TODO: Handle error + const apiResponse = await TitleApi.titleIndex(); + this.userProfile.titles = apiResponse.data; + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); } }, + async retrieveTokens() { + const notificationStore = useNotificationStore(); try { - this.userProfile.tokens = (await TokenApi.tokenGetUserTokens()).data; - } catch { - console.error("Could not fetch user tokens"); - // TODO: Handle error + const apiResponse = await TokenApi.tokenGetUserTokens(); + this.userProfile.tokens = apiResponse.data; + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); } }, + async retrieveTokenValidityBounds() { + const notificationStore = useNotificationStore(); try { - this.tokenValidityBounds = ( - await TokenApi.tokenGetTokenValidityBounds() - ).data; - } catch { - console.error("Could not fetch token validity bounds"); - // TODO: Handle error + const apiResponse = await TokenApi.tokenGetTokenValidityBounds(); + this.tokenValidityBounds = apiResponse.data; + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); } }, + async retrieveUser(loggedIn = true) { - if (loggedIn) { - try { - this.user = (await UserApi.userGetUser()).data; - } catch { - console.error("Could not fetch user"); - // TODO: Handle error + const notificationStore = useNotificationStore(); + try { + if (loggedIn) { + const apiResponse = await UserApi.userGetUser(); + this.user = apiResponse.data; } + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); } }, + async revokeToken(tokenId: string) { - await TokenApi.tokenRevokeToken(tokenId); + const notificationStore = useNotificationStore(); + try { + await TokenApi.tokenRevokeToken(tokenId); + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); + } }, - async setMergeToken(provider: string) { - return (await UserApi.userSetAndReturnMergeToken(provider)).data; + + async setMergeToken(provider: string): Promise<string> { + const notificationStore = useNotificationStore(); + try { + const apiResponse = await UserApi.userSetAndReturnMergeToken(provider); + return apiResponse.data; + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); + return ""; + } }, + async submitToken(token: AddApiTokenParameter) { - return (await TokenApi.tokenAddToken(token)).data; + const notificationStore = useNotificationStore(); + try { + const apiResponse = await TokenApi.tokenAddToken(token); + return apiResponse.data; + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); + } }, + async updateEmail(emailAddress: string) { - await ContactChangeApi.contactChangeChangeContactEmail(emailAddress); + const notificationStore = useNotificationStore(); + try { + await ContactChangeApi.contactChangeChangeContactEmail(emailAddress); + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); + } }, + async updateUser(user: UserObject) { - await UserApi.userUpdateUser(user); + const notificationStore = useNotificationStore(); + try { + await UserApi.userUpdateUser(user); + } catch (error) { + // Handle other Status Codes + notificationStore.postApiErrorNotification(error as AxiosError); + } }, + setUserLanguagePreference() { if (this.user && this.user.language && this.user.language?.abbreviation) { const mainStore = useMainStore(); diff --git a/src/modules/user/types.d.ts b/src/modules/user/types.ts similarity index 100% rename from src/modules/user/types.d.ts rename to src/modules/user/types.ts diff --git a/src/plugins/deprecated/vue-multiselect.ts b/src/plugins/deprecated/vue-multiselect.ts index f70df74337b447505e064d6fa6e9e5cf3a1ce939..ecc9f129bd1a993088c972cd61bc9f85a888dc15 100644 --- a/src/plugins/deprecated/vue-multiselect.ts +++ b/src/plugins/deprecated/vue-multiselect.ts @@ -3,4 +3,4 @@ import Vue from "vue"; import Multiselect from "vue-multiselect"; import "vue-multiselect/dist/vue-multiselect.min.css"; -Vue.component("multiselect", Multiselect); +Vue.component("Multiselect", Multiselect); diff --git a/src/router/index.ts b/src/router/index.ts index c94909883cddb38dbc65ce3bcfaecd73d6b358ba..e6863e4a760b5e435e745cc69328669278f9faa2 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -96,12 +96,12 @@ export const removeQueryParameterFromUrl = function ( const newQuery = route.query; if (newQuery[param] !== null && newQuery[param] !== undefined) { delete newQuery[param]; + const routeNew = { + ...route, + query: newQuery, + } as RawLocation; + router.replace(routeNew); } - const routeNew = { - ...route, - query: newQuery, - } as RawLocation; - router.replace(routeNew); }; export const navigateToProject = function (project: ProjectObject | null) { diff --git a/src/store/index.ts b/src/store/index.ts index f9ff652165f12941e6b70d08b64b6c784d735971..5a01e5b7ad0ff1b36f2c3398875676e749c96ccf 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -6,7 +6,6 @@ import { v4 as uuidv4 } from "uuid"; import { removeQueryParameterFromUrl } from "@/router"; import { NoticeApi } from "@coscine/api-client"; -import { StatusCodes } from "http-status-codes"; import useLoginStore from "@/modules/login/store"; @@ -113,10 +112,7 @@ export const useMainStore = defineStore({ async getMaintenance() { const apiResponse = await NoticeApi.noticeGetMaintenance(); - if ( - apiResponse.status === StatusCodes.OK && - apiResponse.data.startsDate - ) { + if (apiResponse.data.startsDate) { const now = new Date(Date.now()); const startDate = new Date(apiResponse.data.startsDate); const endDate = apiResponse.data.endsDate; @@ -125,8 +121,6 @@ export const useMainStore = defineStore({ apiResponse.data.startsDate + apiResponse.data.endsDate; this.coscine.banner.maintenance = apiResponse.data; } - } else { - // Handle other Status Codes } }, }, diff --git a/src/store/notification.ts b/src/store/notification.ts new file mode 100644 index 0000000000000000000000000000000000000000..2dfd607f2850ccf832d516e00c53c6a4c92ed8eb --- /dev/null +++ b/src/store/notification.ts @@ -0,0 +1,96 @@ +import { defineStore } from "pinia"; +import { NotificationState, NotificationToast } from "./types"; +import i18n from "@/plugins/vue-i18n"; +import { getReasonPhrase } from "http-status-codes"; +import type { AxiosError } from "axios"; + +/* + Store variable name is "this.<id>Store" + id: "notification" --> this.notificationStore + Important! The id must be unique for every store. +*/ +export const useNotificationStore = defineStore({ + id: "notification", + /* + -------------------------------------------------------------------------------------- + STATES + -------------------------------------------------------------------------------------- + */ + state: (): NotificationState => ({ + notificationQueue: [] as NotificationToast[], + }), + + /* + -------------------------------------------------------------------------------------- + GETTERS + -------------------------------------------------------------------------------------- + Synchronous code only. + + In a component use as e.g.: + :label = "this.notificationStore.<getter_name>; + */ + getters: {}, + /* + -------------------------------------------------------------------------------------- + ACTIONS + -------------------------------------------------------------------------------------- + Asynchronous & Synchronous code comes here (e.g. API calls and VueX mutations). + To change a state use an action. + + In a component use as e.g.: + @click = "this.notificationStore.<action_name>(); + */ + actions: { + postApiErrorNotification(error: AxiosError) { + let notification: NotificationToast; + if (error.response) { + // The request was made and the server responded with a status code that falls out of the range of 2xx + const notificationBody = i18n + .t("toast.apiError.specific.body", { + error: `(${error.response.status}: ${getReasonPhrase( + error.response.status + )})`, + }) + .toString(); + notification = { + title: i18n.t("toast.apiError.specific.title").toString(), + body: notificationBody, + variant: error.response.status >= 500 ? "danger" : "warning", + noAutoHide: true, + appendToast: false, + }; + } else { + // Something happened in setting up the request that triggered an Error + notification = { + title: i18n.t("toast.apiError.general.title").toString(), + body: i18n.t("toast.apiError.general.body").toString(), + variant: "danger", + }; + } + this.postNotification(notification); + }, + + postGeneralApiWarningNotification(body: string) { + // Something happened in setting up the request that triggered an Error + const notification = { + title: i18n.t("toast.apiError.general.title").toString(), + body: i18n + .t("toast.apiError.specific.body", { error: body }) + .toString(), + variant: "warning", + } as NotificationToast; + this.postNotification(notification); + }, + + postNotification(toast: NotificationToast) { + this.notificationQueue.push(toast); // Weird typescript error because of dissolved object + }, + + deleteNotification(toast: NotificationToast) { + const index = this.notificationQueue.indexOf(toast); // Weird typescript error because of dissolved object + this.notificationQueue.splice(index); + }, + }, +}); + +export default useNotificationStore; diff --git a/src/store/types.d.ts b/src/store/types.ts similarity index 60% rename from src/store/types.d.ts rename to src/store/types.ts index 67edb2d70657d329d27911e38e4c080920eeddfb..03d17b9aa0089aa7865b4bd1926277249ade6e22 100644 --- a/src/store/types.d.ts +++ b/src/store/types.ts @@ -1,5 +1,12 @@ import type { RemovableRef } from "@vueuse/core"; import type { MaintenanceReturnObject } from "@coscine/api-client/dist/types/Coscine.Api.Notices"; +import type { VNode } from "vue-demi"; +import type { BvToastOptions } from "bootstrap-vue"; + +export interface NotificationToast extends BvToastOptions { + body: string | VNode | VNode[]; + variant?: "danger" | "warning" | "success" | "info" | "primary" | "secondary"; +} export interface MainState { /* @@ -27,3 +34,12 @@ export interface MainState { }; sidebarActive: RemovableRef<boolean>; } + +export interface NotificationState { + /* + -------------------------------------------------------------------------------------- + STATE TYPE DEFINITION + -------------------------------------------------------------------------------------- + */ + notificationQueue: NotificationToast[]; +} diff --git a/yarn.lock-workspace b/yarn.lock-workspace index 9db12784957cc91a3d0fe25da263ba5b66380d96..6fbaf58a66a3a03b334f0073de96216e73df84ec 100644 --- a/yarn.lock-workspace +++ b/yarn.lock-workspace @@ -2,7 +2,7 @@ # Manual changes might be lost - proceed with caution! __metadata: - version: 5 + version: 6 cacheKey: 8 "@achrinza/node-ipc@npm:9.2.2": @@ -17,11 +17,12 @@ __metadata: linkType: hard "@ampproject/remapping@npm:^2.1.0": - version: 2.1.2 - resolution: "@ampproject/remapping@npm:2.1.2" + version: 2.2.0 + resolution: "@ampproject/remapping@npm:2.2.0" dependencies: - "@jridgewell/trace-mapping": ^0.3.0 - checksum: e023f92cdd9723f3042cde3b4d922adfeef0e198aa73486b0b6c034ad36af5f96e5c0cc72b335b30b2eb9852d907efc92af6bfcd3f4b4d286177ee32a189cf92 + "@jridgewell/gen-mapping": ^0.1.0 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: d74d170d06468913921d72430259424b7e4c826b5a7d39ff839a29d547efb97dc577caa8ba3fb5cf023624e9af9d09651afc3d4112a45e2050328abc9b3a2292 languageName: node linkType: hard @@ -34,10 +35,10 @@ __metadata: languageName: node linkType: hard -"@antfu/utils@npm:^0.5.0": - version: 0.5.0 - resolution: "@antfu/utils@npm:0.5.0" - checksum: a5b39b556fe9e53fbc985235ea429badbacc3cd2932cce64dfe8b843b19778f0dec34db3c0d101d2364670eeacbb2bf1858149803b2eb7315cfe55737a58c9e6 +"@antfu/utils@npm:^0.5.1": + version: 0.5.1 + resolution: "@antfu/utils@npm:0.5.1" + checksum: 54a64a1a7d451d07be2ead39dee534281f0cca35db2e72b995f4d81baedfe4c8889f428e46ebefe32c7f4444fc2d5389a5a52223fe8cef01cc98415c8ffc9491 languageName: node linkType: hard @@ -50,55 +51,44 @@ __metadata: languageName: node linkType: hard -"@babel/compat-data@npm:^7.17.7": - version: 7.17.7 - resolution: "@babel/compat-data@npm:7.17.7" - checksum: bf13476676884ce9afc199747ff82f3bcd6d42a9cfb01ce91bdb762b83ea11ec619b6ec532d1a80469ab14f191f33b5d4b9f8796fa8be3bc728d42b0c5e737e3 +"@babel/compat-data@npm:^7.17.10": + version: 7.17.10 + resolution: "@babel/compat-data@npm:7.17.10" + checksum: e85051087cd4690de5061909a2dd2d7f8b6434a3c2e30be6c119758db2027ae1845bcd75a81127423dd568b706ac6994a1a3d7d701069a23bf5cfe900728290b languageName: node linkType: hard "@babel/core@npm:^7.16.10": - version: 7.17.8 - resolution: "@babel/core@npm:7.17.8" + version: 7.17.10 + resolution: "@babel/core@npm:7.17.10" dependencies: "@ampproject/remapping": ^2.1.0 "@babel/code-frame": ^7.16.7 - "@babel/generator": ^7.17.7 - "@babel/helper-compilation-targets": ^7.17.7 + "@babel/generator": ^7.17.10 + "@babel/helper-compilation-targets": ^7.17.10 "@babel/helper-module-transforms": ^7.17.7 - "@babel/helpers": ^7.17.8 - "@babel/parser": ^7.17.8 + "@babel/helpers": ^7.17.9 + "@babel/parser": ^7.17.10 "@babel/template": ^7.16.7 - "@babel/traverse": ^7.17.3 - "@babel/types": ^7.17.0 + "@babel/traverse": ^7.17.10 + "@babel/types": ^7.17.10 convert-source-map: ^1.7.0 debug: ^4.1.0 gensync: ^1.0.0-beta.2 - json5: ^2.1.2 + json5: ^2.2.1 semver: ^6.3.0 - checksum: 0e686b1be444d25494424065238931f2b3df908bf072b72bab973acfd6d27a481fc280c9cd8a3c6fe2c46beee50e0d2307468d8b15b64dc4036f025e75f6609d - languageName: node - linkType: hard - -"@babel/generator@npm:^7.17.3": - version: 7.17.3 - resolution: "@babel/generator@npm:7.17.3" - dependencies: - "@babel/types": ^7.17.0 - jsesc: ^2.5.1 - source-map: ^0.5.0 - checksum: ddf70e3489976018dfc2da8b9f43ec8c582cac2da681ed4a6227c53b26a9626223e4dca90098b3d3afe43bc67f20160856240e826c56b48e577f34a5a7e22b9f + checksum: 2545fb24b4090c1e9ead0daad4713ae6fe779df0843e6e286509146f4dd09958bd067d80995f2cc09fdb01fd0dc936f42cdd6f70b3d058de48e124cd9a3cc93e languageName: node linkType: hard -"@babel/generator@npm:^7.17.7": - version: 7.17.7 - resolution: "@babel/generator@npm:7.17.7" +"@babel/generator@npm:^7.17.10": + version: 7.17.10 + resolution: "@babel/generator@npm:7.17.10" dependencies: - "@babel/types": ^7.17.0 + "@babel/types": ^7.17.10 + "@jridgewell/gen-mapping": ^0.1.0 jsesc: ^2.5.1 - source-map: ^0.5.0 - checksum: e7344b9b4559115f2754ecc2ae9508412ea6a8f617544cd3d3f17cabc727bd30630765f96c8a4ebc8901ded1492a3a6c23d695a4f1e8f3042f860b30c891985c + checksum: 9ec596a6ffec7bec239133a4ba79d4f834e6c894019accb1c70a7a5affbec9d0912d3baef200edd9d48e553d4ef72abcbffbc73cfb7d75f327c24186e887f79c languageName: node linkType: hard @@ -111,34 +101,34 @@ __metadata: languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.17.7": - version: 7.17.7 - resolution: "@babel/helper-compilation-targets@npm:7.17.7" +"@babel/helper-compilation-targets@npm:^7.17.10": + version: 7.17.10 + resolution: "@babel/helper-compilation-targets@npm:7.17.10" dependencies: - "@babel/compat-data": ^7.17.7 + "@babel/compat-data": ^7.17.10 "@babel/helper-validator-option": ^7.16.7 - browserslist: ^4.17.5 + browserslist: ^4.20.2 semver: ^6.3.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: 24bf851539d5ec8e73779304b5d1ad5b0be09a74459ecc7d9baee9a0fa38ad016e9eaf4b5704504ae8da32f91ce0e31857bbbd9686854caeffd38f58226d3760 + checksum: 5f547c7ebd372e90fa72c2aaea867e7193166e9f469dec5acde4f0e18a78b80bdca8e02a0f641f3e998be984fb5b802c729a9034faaee8b1a9ef6670cb76f120 languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.16.7, @babel/helper-create-class-features-plugin@npm:^7.17.6": - version: 7.17.6 - resolution: "@babel/helper-create-class-features-plugin@npm:7.17.6" +"@babel/helper-create-class-features-plugin@npm:^7.16.7, @babel/helper-create-class-features-plugin@npm:^7.17.9": + version: 7.17.9 + resolution: "@babel/helper-create-class-features-plugin@npm:7.17.9" dependencies: "@babel/helper-annotate-as-pure": ^7.16.7 "@babel/helper-environment-visitor": ^7.16.7 - "@babel/helper-function-name": ^7.16.7 - "@babel/helper-member-expression-to-functions": ^7.16.7 + "@babel/helper-function-name": ^7.17.9 + "@babel/helper-member-expression-to-functions": ^7.17.7 "@babel/helper-optimise-call-expression": ^7.16.7 "@babel/helper-replace-supers": ^7.16.7 "@babel/helper-split-export-declaration": ^7.16.7 peerDependencies: "@babel/core": ^7.0.0 - checksum: d85a5b3f9a18a661372d77462e6ea2a6a03f1083f8b3055ed165284214af9ea6ad677f6bcc4b5ce215da27f95fa93064580d4b6723b578c480ecf17dd31a4307 + checksum: db7be8852096084883dbbd096f925976695e5b34919a888fded9fd359d75d9994960e459f4eeb51ff6700109f83be6c1359e57809deb3fe36fc589b2a208b6d7 languageName: node linkType: hard @@ -151,23 +141,13 @@ __metadata: languageName: node linkType: hard -"@babel/helper-function-name@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/helper-function-name@npm:7.16.7" +"@babel/helper-function-name@npm:^7.17.9": + version: 7.17.9 + resolution: "@babel/helper-function-name@npm:7.17.9" dependencies: - "@babel/helper-get-function-arity": ^7.16.7 "@babel/template": ^7.16.7 - "@babel/types": ^7.16.7 - checksum: fc77cbe7b10cfa2a262d7a37dca575c037f20419dfe0c5d9317f589599ca24beb5f5c1057748011159149eaec47fe32338c6c6412376fcded68200df470161e1 - languageName: node - linkType: hard - -"@babel/helper-get-function-arity@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/helper-get-function-arity@npm:7.16.7" - dependencies: - "@babel/types": ^7.16.7 - checksum: 25d969fb207ff2ad5f57a90d118f6c42d56a0171022e200aaa919ba7dc95ae7f92ec71cdea6c63ef3629a0dc962ab4c78e09ca2b437185ab44539193f796e0c3 + "@babel/types": ^7.17.0 + checksum: a59b2e5af56d8f43b9b0019939a43774754beb7cb01a211809ca8031c71890999d07739e955343135ec566c4d8ff725435f1f60fb0af3bb546837c1f9f84f496 languageName: node linkType: hard @@ -180,7 +160,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-member-expression-to-functions@npm:^7.16.7": +"@babel/helper-member-expression-to-functions@npm:^7.16.7, @babel/helper-member-expression-to-functions@npm:^7.17.7": version: 7.17.7 resolution: "@babel/helper-member-expression-to-functions@npm:7.17.7" dependencies: @@ -261,13 +241,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.14.9": - version: 7.14.9 - resolution: "@babel/helper-validator-identifier@npm:7.14.9" - checksum: 58552531a7674363e74672434c312ddaf1545b8a43308e1a7f38db58bf79c796c095a6dab6a6105eb0d783b97441f6cbb525bb887f29a35f232fcdbd8cb240dc - languageName: node - linkType: hard - "@babel/helper-validator-identifier@npm:^7.16.7": version: 7.16.7 resolution: "@babel/helper-validator-identifier@npm:7.16.7" @@ -282,52 +255,34 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.17.8": - version: 7.17.8 - resolution: "@babel/helpers@npm:7.17.8" +"@babel/helpers@npm:^7.17.9": + version: 7.17.9 + resolution: "@babel/helpers@npm:7.17.9" dependencies: "@babel/template": ^7.16.7 - "@babel/traverse": ^7.17.3 + "@babel/traverse": ^7.17.9 "@babel/types": ^7.17.0 - checksum: 463dad58119fefebf2d0201bfa53ec9607aa00356908895640fc07589747fb3c2e0dfee4019f3e8c9781e57c9aa5dff4c72ec8d1b031c4ed8349f90b6aefe99d + checksum: 3c6db861e4c82fff2de3efb4ad12e32658c50c29920597cd0979390659b202e5849acd9542e0e2453167a52ccc30156ee4455d64d0e330f020d991d7551566f8 languageName: node linkType: hard "@babel/highlight@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/highlight@npm:7.16.7" + version: 7.17.9 + resolution: "@babel/highlight@npm:7.17.9" dependencies: "@babel/helper-validator-identifier": ^7.16.7 chalk: ^2.0.0 js-tokens: ^4.0.0 - checksum: f7e04e7e03b83c2cca984f4d3e180c9b018784f45d03367e94daf983861229ddc47264045f3b58dfeb0007f9c67bc2a76c4de1693bad90e5394876ef55ece5bb - languageName: node - linkType: hard - -"@babel/parser@npm:^7.16.10, @babel/parser@npm:^7.17.8": - version: 7.17.8 - resolution: "@babel/parser@npm:7.17.8" - bin: - parser: ./bin/babel-parser.js - checksum: 1771808491982cc47baa888a997aef6b58308e3844c8c00f730f8fd97defe57d32cdbf46075cd49aaee310fa31f3d2c80a0d41b41a4ee0ff336ee09e2ff6c222 - languageName: node - linkType: hard - -"@babel/parser@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/parser@npm:7.16.7" - bin: - parser: ./bin/babel-parser.js - checksum: e664ff1edda164ab3f3c97fc1dd1a8930b0fba9981cbf873d3f25a22d16d50e2efcfaf81daeefa978bff2c4f268d34832f6817c8bc4e03594c3f43beba92fb68 + checksum: 7bdf10228f2e4d18f48f114411ed584380d356e7c168d7582c14abd8df9909b2fc09e0a7cd334f47c3eb0bc17e639e0c8d9688c6afd5d09a2bdbf0ac193b11fd languageName: node linkType: hard -"@babel/parser@npm:^7.17.3": - version: 7.17.3 - resolution: "@babel/parser@npm:7.17.3" +"@babel/parser@npm:^7.16.10, @babel/parser@npm:^7.16.7, @babel/parser@npm:^7.17.10": + version: 7.17.10 + resolution: "@babel/parser@npm:7.17.10" bin: parser: ./bin/babel-parser.js - checksum: 311869baef97c7630ac3b3c4600da18229b95aa2785b2daab2044384745fe0653070916ade28749fb003f7369a081111ada53e37284ba48d6b5858cbb9e411d1 + checksum: a9493d9fb8625e0904a178703866c8ee4d3a6003f0954b08df9f772b54dae109c69376812b74732e0c3e1a7f1d5b30915577a1db12e5e16b0abee083539df574 languageName: node linkType: hard @@ -344,17 +299,18 @@ __metadata: linkType: hard "@babel/plugin-proposal-decorators@npm:^7.16.7": - version: 7.17.8 - resolution: "@babel/plugin-proposal-decorators@npm:7.17.8" + version: 7.17.9 + resolution: "@babel/plugin-proposal-decorators@npm:7.17.9" dependencies: - "@babel/helper-create-class-features-plugin": ^7.17.6 + "@babel/helper-create-class-features-plugin": ^7.17.9 "@babel/helper-plugin-utils": ^7.16.7 "@babel/helper-replace-supers": ^7.16.7 + "@babel/helper-split-export-declaration": ^7.16.7 "@babel/plugin-syntax-decorators": ^7.17.0 charcodes: ^0.2.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 8687de0ef0d671bc0c7e2ae0a7970055f8f6a0c8a50dcf81fe54bad85ffb59447ad7d75169f891244ef4a5a7bc2d146d753b7077635597fd998a44db632481ae + checksum: a3d177b88843bf73d798e4b21c1b8146bd33fd19ab56e5ab379d6670db84e172570e73bcf5a4e5a83193cfea49fed3db0015454e78f30f46d25d256c6e65a7b3 languageName: node linkType: hard @@ -381,13 +337,13 @@ __metadata: linkType: hard "@babel/plugin-syntax-typescript@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-syntax-typescript@npm:7.16.7" + version: 7.17.10 + resolution: "@babel/plugin-syntax-typescript@npm:7.17.10" dependencies: "@babel/helper-plugin-utils": ^7.16.7 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 661e636060609ede9a402e22603b01784c21fabb0a637e65f561c8159351fe0130bbc11fdefe31902107885e3332fc34d95eb652ac61d3f61f2d61f5da20609e + checksum: 43e908acf4a1e267f7bd86dc2fcb015b1fbcc364da43b125289d6a91bd32eeed41e5d9870051f7a3e4e2da9eeff7655f7988b6f27beac06bcb60c054aa5bac6d languageName: node linkType: hard @@ -415,51 +371,38 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.16.7, @babel/traverse@npm:^7.17.3": - version: 7.17.3 - resolution: "@babel/traverse@npm:7.17.3" +"@babel/traverse@npm:^7.16.7, @babel/traverse@npm:^7.17.10, @babel/traverse@npm:^7.17.3, @babel/traverse@npm:^7.17.9": + version: 7.17.10 + resolution: "@babel/traverse@npm:7.17.10" dependencies: "@babel/code-frame": ^7.16.7 - "@babel/generator": ^7.17.3 + "@babel/generator": ^7.17.10 "@babel/helper-environment-visitor": ^7.16.7 - "@babel/helper-function-name": ^7.16.7 + "@babel/helper-function-name": ^7.17.9 "@babel/helper-hoist-variables": ^7.16.7 "@babel/helper-split-export-declaration": ^7.16.7 - "@babel/parser": ^7.17.3 - "@babel/types": ^7.17.0 + "@babel/parser": ^7.17.10 + "@babel/types": ^7.17.10 debug: ^4.1.0 globals: ^11.1.0 - checksum: 780d7ecf711758174989794891af08d378f81febdb8932056c0d9979524bf0298e28f8e7708a872d7781151506c28f56c85c63ea3f1f654662c2fcb8a3eb9fdc - languageName: node - linkType: hard - -"@babel/types@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/types@npm:7.16.7" - dependencies: - "@babel/helper-validator-identifier": ^7.16.7 - to-fast-properties: ^2.0.0 - checksum: df9210723259df9faea8c7e5674a59e57ead82664aab9f54daae887db5a50a956f30f57ed77a2d6cbb89b908d520cf8d883267c4e9098e31bc74649f2f714654 + checksum: 44ec0a59aa274b59464d52b1796eb6e54c67ae0f946de0d608068e28b1ab7065bdf53c0169d9102854cb00aa01944c83e722f08aeab96d9cc6bf56f8aede70fd languageName: node linkType: hard -"@babel/types@npm:^7.17.0": - version: 7.17.0 - resolution: "@babel/types@npm:7.17.0" +"@babel/types@npm:^7.16.7, @babel/types@npm:^7.17.0, @babel/types@npm:^7.17.10, @babel/types@npm:^7.8.3": + version: 7.17.10 + resolution: "@babel/types@npm:7.17.10" dependencies: "@babel/helper-validator-identifier": ^7.16.7 to-fast-properties: ^2.0.0 - checksum: 12e5a287986fe557188e87b2c5202223f1dc83d9239a196ab936fdb9f8c1eb0be717ff19f934b5fad4e29a75586d5798f74bed209bccea1c20376b9952056f0e + checksum: 40cfc3f43a3ab7374df8ee6844793f804c65e7bea0fd1b090886b425106ba26e16e8fa698ae4b2caf2746083fe3e62f03f12997a5982e0d131700f17cbdcfca1 languageName: node linkType: hard -"@babel/types@npm:^7.8.3": - version: 7.15.4 - resolution: "@babel/types@npm:7.15.4" - dependencies: - "@babel/helper-validator-identifier": ^7.14.9 - to-fast-properties: ^2.0.0 - checksum: dac7d733edf2102e97f197929693fae6025161f3edda5a0f621f69e9d0741b8596c6f2152492bef869b55d0205e214867e8730f389283e85432b8f093e295c4b +"@colors/colors@npm:1.5.0": + version: 1.5.0 + resolution: "@colors/colors@npm:1.5.0" + checksum: d64d5260bed1d5012ae3fc617d38d1afc0329fec05342f4e6b838f46998855ba56e0a73833f4a80fa8378c84810da254f76a8a19c39d038260dc06dc4e007425 languageName: node linkType: hard @@ -707,16 +650,7 @@ __metadata: languageName: node linkType: hard -"@coscine/api-client@npm:^1.5.0": - version: 1.5.1 - resolution: "@coscine/api-client@npm:1.5.1" - dependencies: - axios: ^0.21.1 - checksum: e17dc39bc8c5fcc3eb0ef9647556cb9e17cba59567f9e63f8ce821202363b45fcde122c651c37515b317c83930dda399afacd020ce5e8a83603e84b5b2a3fe81 - languageName: node - linkType: hard - -"@coscine/api-client@npm:^1.5.2": +"@coscine/api-client@npm:^1.5.0, @coscine/api-client@npm:^1.5.2": version: 1.5.2 resolution: "@coscine/api-client@npm:1.5.2" dependencies: @@ -746,9 +680,9 @@ __metadata: languageName: node linkType: hard -"@eslint/eslintrc@npm:^1.2.1": - version: 1.2.1 - resolution: "@eslint/eslintrc@npm:1.2.1" +"@eslint/eslintrc@npm:^1.2.2": + version: 1.2.2 + resolution: "@eslint/eslintrc@npm:1.2.2" dependencies: ajv: ^6.12.4 debug: ^4.3.2 @@ -759,14 +693,7 @@ __metadata: js-yaml: ^4.1.0 minimatch: ^3.0.4 strip-json-comments: ^3.1.1 - checksum: 1f797b9f94d71b965992cf6c44e3bcb574643014fd1e3d4862d25056bd5568f59c488461a7e9a1c1758ca7f0def5d3cb69c3d8b38581bcf4a53af74371243797 - languageName: node - linkType: hard - -"@gar/promisify@npm:^1.0.1": - version: 1.1.2 - resolution: "@gar/promisify@npm:1.1.2" - checksum: d05081e0887a49c178b75ee3067bd6ee086f73c154d121b854fb2e044e8a89cb1cbb6de3a0dd93a519b80f0531fda68b099dd7256205f7fbb3490324342f2217 + checksum: d891036bbffb0efec1462aa4a603ed6e349d546b1632dde7d474ddd15c2a8b6895671b25293f1d3ba10ff629c24a3649ad049373fe695a0e44b612537088563c languageName: node linkType: hard @@ -844,27 +771,44 @@ __metadata: languageName: node linkType: hard +"@jridgewell/gen-mapping@npm:^0.1.0": + version: 0.1.1 + resolution: "@jridgewell/gen-mapping@npm:0.1.1" + dependencies: + "@jridgewell/set-array": ^1.0.0 + "@jridgewell/sourcemap-codec": ^1.4.10 + checksum: 3bcc21fe786de6ffbf35c399a174faab05eb23ce6a03e8769569de28abbf4facc2db36a9ddb0150545ae23a8d35a7cf7237b2aa9e9356a7c626fb4698287d5cc + languageName: node + linkType: hard + "@jridgewell/resolve-uri@npm:^3.0.3": - version: 3.0.4 - resolution: "@jridgewell/resolve-uri@npm:3.0.4" - checksum: 799bcba2730280a42f11b4d41a5d34d68ce72cb1bd23186bd3356607c93b62765b2b050e5dfb67f04ce4e817f882bfc10a4d1c43fe2d8eeb38371c98d71217b4 + version: 3.0.6 + resolution: "@jridgewell/resolve-uri@npm:3.0.6" + checksum: e57cc08d2aaea6bd55e77e7a124beb2fcca87be28c0db6c2d69b7cb2cb4e14109bbef1d57ae6250bf5f4a4ad950f094ed99c8925adaf82336b66dab0ad6906e6 + languageName: node + linkType: hard + +"@jridgewell/set-array@npm:^1.0.0": + version: 1.1.0 + resolution: "@jridgewell/set-array@npm:1.1.0" + checksum: 86ddd72ce7d2f7756dfb69804b35d0e760a85dcef30ed72e8610bf2c5e843f8878d977a0c77c4fdfa6a0e3d5b18e5bde4a1f1dd73fd2db06b200c998e9b5a6c5 languageName: node linkType: hard "@jridgewell/sourcemap-codec@npm:^1.4.10": - version: 1.4.10 - resolution: "@jridgewell/sourcemap-codec@npm:1.4.10" - checksum: 247229218edbe165dcf0a5ae0c4b81bff1b5438818bb09221f756681fe158597fdf25c2a803f9260453b299c98c7e01ddebeb1555cda3157d987cd22c08605ef + version: 1.4.12 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.12" + checksum: a179bd442e74e5e3880d5a603bb63292ba3d55b3adf64ab9f1ea8c466bb32808e8fff032362dccb1157268574db99999bf4c3e6919d69a41f1951f1a534f2f77 languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.0": - version: 0.3.4 - resolution: "@jridgewell/trace-mapping@npm:0.3.4" +"@jridgewell/trace-mapping@npm:^0.3.9": + version: 0.3.9 + resolution: "@jridgewell/trace-mapping@npm:0.3.9" dependencies: "@jridgewell/resolve-uri": ^3.0.3 "@jridgewell/sourcemap-codec": ^1.4.10 - checksum: ab8bce84bbbc8c34f3ba8325ed926f8f2d3098983c10442a80c55764c4eb6e47d5b92d8ff20a0dd868c3e76a3535651fd8a0138182c290dbfc8396195685c37b + checksum: d89597752fd88d3f3480845691a05a44bd21faac18e2185b6f436c3b0fd0c5a859fbbd9aaa92050c4052caf325ad3e10e2e1d1b64327517471b7d51babc0ddef languageName: node linkType: hard @@ -921,74 +865,32 @@ __metadata: languageName: node linkType: hard -"@npmcli/arborist@npm:*, @npmcli/arborist@npm:^4.0.0": - version: 4.2.0 - resolution: "@npmcli/arborist@npm:4.2.0" - dependencies: - "@isaacs/string-locale-compare": ^1.1.0 - "@npmcli/installed-package-contents": ^1.0.7 - "@npmcli/map-workspaces": ^2.0.0 - "@npmcli/metavuln-calculator": ^2.0.0 - "@npmcli/move-file": ^1.1.0 - "@npmcli/name-from-folder": ^1.0.1 - "@npmcli/node-gyp": ^1.0.3 - "@npmcli/package-json": ^1.0.1 - "@npmcli/run-script": ^2.0.0 - bin-links: ^2.3.0 - cacache: ^15.0.3 - common-ancestor-path: ^1.0.1 - json-parse-even-better-errors: ^2.3.1 - json-stringify-nice: ^1.1.4 - mkdirp: ^1.0.4 - mkdirp-infer-owner: ^2.0.0 - npm-install-checks: ^4.0.0 - npm-package-arg: ^8.1.5 - npm-pick-manifest: ^6.1.0 - npm-registry-fetch: ^11.0.0 - pacote: ^12.0.2 - parse-conflict-json: ^2.0.1 - proc-log: ^1.0.0 - promise-all-reject-late: ^1.0.0 - promise-call-limit: ^1.0.1 - read-package-json-fast: ^2.0.2 - readdir-scoped-modules: ^1.1.0 - rimraf: ^3.0.2 - semver: ^7.3.5 - ssri: ^8.0.1 - treeverse: ^1.0.4 - walk-up-path: ^1.0.0 - bin: - arborist: bin/index.js - checksum: 31188be8ca264e49440ad1efe5d99330d986d571d8715907a3b04ed8ddc22f8fa36bffce055dd759514d9ee36c24413be7b96f944cb1e1c7b094f7c07bf4c195 - languageName: node - linkType: hard - -"@npmcli/arborist@npm:^5.0.0, @npmcli/arborist@npm:^5.0.3": - version: 5.0.3 - resolution: "@npmcli/arborist@npm:5.0.3" +"@npmcli/arborist@npm:*, @npmcli/arborist@npm:^5.0.0, @npmcli/arborist@npm:^5.0.4": + version: 5.1.1 + resolution: "@npmcli/arborist@npm:5.1.1" dependencies: "@isaacs/string-locale-compare": ^1.1.0 "@npmcli/installed-package-contents": ^1.0.7 - "@npmcli/map-workspaces": ^2.0.0 + "@npmcli/map-workspaces": ^2.0.3 "@npmcli/metavuln-calculator": ^3.0.1 - "@npmcli/move-file": ^1.1.0 + "@npmcli/move-file": ^2.0.0 "@npmcli/name-from-folder": ^1.0.1 - "@npmcli/node-gyp": ^1.0.3 - "@npmcli/package-json": ^1.0.1 + "@npmcli/node-gyp": ^2.0.0 + "@npmcli/package-json": ^2.0.0 "@npmcli/run-script": ^3.0.0 bin-links: ^3.0.0 - cacache: ^16.0.0 + cacache: ^16.0.6 common-ancestor-path: ^1.0.1 json-parse-even-better-errors: ^2.3.1 json-stringify-nice: ^1.1.4 mkdirp: ^1.0.4 mkdirp-infer-owner: ^2.0.0 nopt: ^5.0.0 - npm-install-checks: ^4.0.0 + npm-install-checks: ^5.0.0 npm-package-arg: ^9.0.0 npm-pick-manifest: ^7.0.0 npm-registry-fetch: ^13.0.0 - npmlog: ^6.0.1 + npmlog: ^6.0.2 pacote: ^13.0.5 parse-conflict-json: ^2.0.1 proc-log: ^2.0.0 @@ -997,75 +899,45 @@ __metadata: read-package-json-fast: ^2.0.2 readdir-scoped-modules: ^1.1.0 rimraf: ^3.0.2 - semver: ^7.3.5 - ssri: ^8.0.1 - treeverse: ^1.0.4 + semver: ^7.3.7 + ssri: ^9.0.0 + treeverse: ^2.0.0 walk-up-path: ^1.0.0 bin: arborist: bin/index.js - checksum: 97569978e568668cb1658d286a02450e8002817554246aa672fa65a7234ef4088bffa8a92a06a1eac72792c684b3961bb741553fde08f36fdb510efdf365d70b - languageName: node - linkType: hard - -"@npmcli/ci-detect@npm:*, @npmcli/ci-detect@npm:^1.3.0": - version: 1.4.0 - resolution: "@npmcli/ci-detect@npm:1.4.0" - checksum: c262fc86dd543efb8a721dec39ab333f99861abff5850136c2dcbee58610ccb1f5e66c3c669903b1bcf0668084c1fe6c443a90490fba771223fb6db137e9bfc5 + checksum: e6a989d3743d47444405aad943abcbb87d075184afd394cd968cc1abfe59ab0fad737f2c2417ceebf40b98d640309e8eb94c1e0fb72a6db88a52c4ff5c123ca7 languageName: node linkType: hard -"@npmcli/ci-detect@npm:^2.0.0": +"@npmcli/ci-detect@npm:*, @npmcli/ci-detect@npm:^2.0.0": version: 2.0.0 resolution: "@npmcli/ci-detect@npm:2.0.0" checksum: 26e964eca908706c1a612915cbc5614860ac7dbfacbb07870396c82b1377794f123a7aaa821c4a68575b67ff7e3ad170e296d3aa6a5e03dbab9b3f1e61491812 languageName: node linkType: hard -"@npmcli/config@npm:*": - version: 2.4.0 - resolution: "@npmcli/config@npm:2.4.0" - dependencies: - ini: ^2.0.0 - mkdirp-infer-owner: ^2.0.0 - nopt: ^5.0.0 - semver: ^7.3.4 - walk-up-path: ^1.0.0 - checksum: 46373eaeedff91b6d6450954d64f440bd325f49c49caa6c3378f2aaa44b3b27305693db82d1a59d861712b70286a114db519147e368e66905f72504c7ffaf897 - languageName: node - linkType: hard - -"@npmcli/config@npm:^4.0.1": - version: 4.0.1 - resolution: "@npmcli/config@npm:4.0.1" +"@npmcli/config@npm:*, @npmcli/config@npm:^4.1.0": + version: 4.1.0 + resolution: "@npmcli/config@npm:4.1.0" dependencies: - "@npmcli/map-workspaces": ^2.0.1 - ini: ^2.0.0 + "@npmcli/map-workspaces": ^2.0.2 + ini: ^3.0.0 mkdirp-infer-owner: ^2.0.0 nopt: ^5.0.0 proc-log: ^2.0.0 read-package-json-fast: ^2.0.3 semver: ^7.3.5 walk-up-path: ^1.0.0 - checksum: a7fd2011b2c1725acef36ebfa1e1c6ef253a70adcea889a2b8a76810cfdbda5c6bb5fb153c0860cd0c65afedd097470e066e8732e4d6a2abe9f4361611df633f + checksum: ec0f8947e7695d246dafde2fb5bb0cb20c3cab55bbee4326468f51a3a811bfb3677517bf5f66185a10cca258938d15be0c7f30ae69f45ca6e62c938d5e309843 languageName: node linkType: hard -"@npmcli/disparity-colors@npm:^1.0.1": - version: 1.0.1 - resolution: "@npmcli/disparity-colors@npm:1.0.1" +"@npmcli/disparity-colors@npm:^2.0.0": + version: 2.0.0 + resolution: "@npmcli/disparity-colors@npm:2.0.0" dependencies: ansi-styles: ^4.3.0 - checksum: 20aa252b2d66694050e867da92d8479192a864288c5f47443392ea34d990f6785cc4c0c5f6e89b8c297b1c2765614fc8ffe928050909f1353394d414b9b1115f - languageName: node - linkType: hard - -"@npmcli/fs@npm:^1.0.0": - version: 1.0.0 - resolution: "@npmcli/fs@npm:1.0.0" - dependencies: - "@gar/promisify": ^1.0.1 - semver: ^7.3.5 - checksum: f2b4990107dd2a5b18794c89aaff6f62f3a67883d49a20602fdfc353cbc7f8c5fd50edeffdc769e454900e01b8b8e43d0b9eb524d00963d69f3c829be1a2e8ac + checksum: 2e85d371bb2a705c119b0eb350beab0a67ff84f13097719f20bacae7fe6d3187b9aec33b7f27553d0774a209937c5f587f049e1a5274b3288a8456357fd2a795 languageName: node linkType: hard @@ -1079,28 +951,12 @@ __metadata: languageName: node linkType: hard -"@npmcli/git@npm:^2.0.7, @npmcli/git@npm:^2.1.0": - version: 2.1.0 - resolution: "@npmcli/git@npm:2.1.0" - dependencies: - "@npmcli/promise-spawn": ^1.3.2 - lru-cache: ^6.0.0 - mkdirp: ^1.0.4 - npm-pick-manifest: ^6.1.1 - promise-inflight: ^1.0.1 - promise-retry: ^2.0.1 - semver: ^7.3.5 - which: ^2.0.2 - checksum: 1f89752df7b836f378b8828423c6ae344fe59399915b9460acded19686e2d0626246251a3cd4cc411ed21c1be6fe7f0c2195c17f392e88748581262ee806dc33 - languageName: node - linkType: hard - "@npmcli/git@npm:^3.0.0": - version: 3.0.0 - resolution: "@npmcli/git@npm:3.0.0" + version: 3.0.1 + resolution: "@npmcli/git@npm:3.0.1" dependencies: - "@npmcli/promise-spawn": ^1.3.2 - lru-cache: ^7.3.1 + "@npmcli/promise-spawn": ^3.0.0 + lru-cache: ^7.4.4 mkdirp: ^1.0.4 npm-pick-manifest: ^7.0.0 proc-log: ^2.0.0 @@ -1108,11 +964,11 @@ __metadata: promise-retry: ^2.0.1 semver: ^7.3.5 which: ^2.0.2 - checksum: 3978020d439fd2cd9a7b00ebdbbefbbe8a81b99399ac9ecdd1984d1a236f1a75fb1292f30f6a94a8f576e34419b7e240954424e68d9d8d9cde49fb8a77a16a1d + checksum: 0e289d11e2d6034652993f2d05f68396d8377603a1c1f983b2d0893e7591a22bcf3896a43c7dfbcc43f03c308a110f0b9ec37e0191e48b0bd1d236e0f57a3ec6 languageName: node linkType: hard -"@npmcli/installed-package-contents@npm:^1.0.6, @npmcli/installed-package-contents@npm:^1.0.7": +"@npmcli/installed-package-contents@npm:^1.0.7": version: 1.0.7 resolution: "@npmcli/installed-package-contents@npm:1.0.7" dependencies: @@ -1124,61 +980,37 @@ __metadata: languageName: node linkType: hard -"@npmcli/map-workspaces@npm:*, @npmcli/map-workspaces@npm:^2.0.0": - version: 2.0.0 - resolution: "@npmcli/map-workspaces@npm:2.0.0" - dependencies: - "@npmcli/name-from-folder": ^1.0.1 - glob: ^7.1.6 - minimatch: ^3.0.4 - read-package-json-fast: ^2.0.1 - checksum: 33707f80cc556aca2d748e228bbe62b6d7ae4a6e95b18b94ca64dd72e9c071ace29e7dd140bce4c2f96a238e40030212ee0ac00dda6026c7b2e23b2f173d75c8 - languageName: node - linkType: hard - -"@npmcli/map-workspaces@npm:^2.0.1, @npmcli/map-workspaces@npm:^2.0.2": - version: 2.0.2 - resolution: "@npmcli/map-workspaces@npm:2.0.2" +"@npmcli/map-workspaces@npm:*, @npmcli/map-workspaces@npm:^2.0.2, @npmcli/map-workspaces@npm:^2.0.3": + version: 2.0.3 + resolution: "@npmcli/map-workspaces@npm:2.0.3" dependencies: "@npmcli/name-from-folder": ^1.0.1 - glob: ^7.2.0 + glob: ^8.0.1 minimatch: ^5.0.1 read-package-json-fast: ^2.0.3 - checksum: 0de1c757c0067eda1d0ab7ee71749d9066b7c8159ec631ed38cd0fe444e984255fb24c412e3a592724feb823fd40d5caffe28165139fcca93b504c33b50c2bc0 - languageName: node - linkType: hard - -"@npmcli/metavuln-calculator@npm:^2.0.0": - version: 2.0.0 - resolution: "@npmcli/metavuln-calculator@npm:2.0.0" - dependencies: - cacache: ^15.0.5 - json-parse-even-better-errors: ^2.3.1 - pacote: ^12.0.0 - semver: ^7.3.2 - checksum: bf88115e7c52a5fcf9d3f06d47eeb18acb6077327ee035661b6e4c26102b5e963aa3461679a50fb54427ff4526284a8fdebc743689dd7d71d8ee3814e8f341ee + checksum: c9878a22168d3f2d8df9e339ed0799628db3ea8502bd623b5bbe7b0dfcac065b3310e4093df94667a4a28ef2c54c02ce6956467a8aaa2e150305f2fe1cd64f9d languageName: node linkType: hard "@npmcli/metavuln-calculator@npm:^3.0.1": - version: 3.0.1 - resolution: "@npmcli/metavuln-calculator@npm:3.0.1" + version: 3.1.0 + resolution: "@npmcli/metavuln-calculator@npm:3.1.0" dependencies: cacache: ^16.0.0 json-parse-even-better-errors: ^2.3.1 pacote: ^13.0.3 semver: ^7.3.5 - checksum: 9f139806ed20d3c46d010ec512c339380d88d3774130dbc0067b5b3fd2b39649bb05c87c55d325e26c8f21e58b16d2b20c9ff1fbaa54d22422ab76e64ce594c5 + checksum: 39fb474e239d3f221178f0c2f6089cd4a2fce8183343b7f52f8f9fe0b3cb0a98b386b15c9afe63a0b0dc2ae5302497d00eb2de2f4b3431953dbf05e69d613c9a languageName: node linkType: hard -"@npmcli/move-file@npm:^1.0.1, @npmcli/move-file@npm:^1.1.0, @npmcli/move-file@npm:^1.1.2": - version: 1.1.2 - resolution: "@npmcli/move-file@npm:1.1.2" +"@npmcli/move-file@npm:^2.0.0": + version: 2.0.0 + resolution: "@npmcli/move-file@npm:2.0.0" dependencies: mkdirp: ^1.0.4 rimraf: ^3.0.2 - checksum: c96381d4a37448ea280951e46233f7e541058cf57a57d4094dd4bdcaae43fa5872b5f2eb6bfb004591a68e29c5877abe3cdc210cb3588cbf20ab2877f31a7de7 + checksum: 1388777b507b0c592d53f41b9d182e1a8de7763bc625fc07999b8edbc22325f074e5b3ec90af79c89d6987fdb2325bc66d59f483258543c14a43661621f841b0 languageName: node linkType: hard @@ -1189,52 +1021,40 @@ __metadata: languageName: node linkType: hard -"@npmcli/node-gyp@npm:^1.0.2, @npmcli/node-gyp@npm:^1.0.3": - version: 1.0.3 - resolution: "@npmcli/node-gyp@npm:1.0.3" - checksum: 496d5eef2e90e34bb07e96adbcbbce3dba5370ae87e8c46ff5b28570848f35470c8e008b8f69e50863632783e0a9190e6f55b2e4b049c537142821153942d26a +"@npmcli/node-gyp@npm:^2.0.0": + version: 2.0.0 + resolution: "@npmcli/node-gyp@npm:2.0.0" + checksum: b6bbf0015000f9b64d31aefdc30f244b0348c57adb64017667e0304e96c38644d83da46a4581252652f5d606268df49118f9c9993b41d8020f62b7b15dd2c8d8 languageName: node linkType: hard -"@npmcli/package-json@npm:*, @npmcli/package-json@npm:^1.0.1": - version: 1.0.1 - resolution: "@npmcli/package-json@npm:1.0.1" +"@npmcli/package-json@npm:*, @npmcli/package-json@npm:^2.0.0": + version: 2.0.0 + resolution: "@npmcli/package-json@npm:2.0.0" dependencies: json-parse-even-better-errors: ^2.3.1 - checksum: 08b66c8ddb1d6b678975a83006d2fe5070b3013bcb68ea9d54c0142538a614596ddfd1143183fbb8f82c5cecf477d98f3c4e473ef34df3bbf3814e97e37e18d3 + checksum: 7a598e42d2778654ec87438ebfafbcbafbe5a5f5e89ed2ca1db6ca3f94ef14655e304aa41f77632a2a3f5c66b6bd5960bd9370e0ceb4902ea09346720364f9e4 languageName: node linkType: hard -"@npmcli/promise-spawn@npm:^1.2.0, @npmcli/promise-spawn@npm:^1.3.2": - version: 1.3.2 - resolution: "@npmcli/promise-spawn@npm:1.3.2" +"@npmcli/promise-spawn@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/promise-spawn@npm:3.0.0" dependencies: infer-owner: ^1.0.4 - checksum: 543b7c1e26230499b4100b10d45efa35b1077e8f25595050f34930ca3310abe9524f7387279fe4330139e0f28a0207595245503439276fd4b686cca2b6503080 - languageName: node - linkType: hard - -"@npmcli/run-script@npm:*, @npmcli/run-script@npm:^2.0.0": - version: 2.0.0 - resolution: "@npmcli/run-script@npm:2.0.0" - dependencies: - "@npmcli/node-gyp": ^1.0.2 - "@npmcli/promise-spawn": ^1.3.2 - node-gyp: ^8.2.0 - read-package-json-fast: ^2.0.1 - checksum: c016ea9411e434d84e9bb9c30814c2868eee3ff32625f3e1af4671c3abfe0768739ffb2dba5520da926ae44315fc5f507b744f0626a80bc9461f2f19760e5fa0 + checksum: 3454465a2731cea5875ba51f80873e2205e5bd878c31517286b0ede4ea931c7bf3de895382287e906d03710fff6f9e44186bd0eee068ce578901c5d3b58e7692 languageName: node linkType: hard -"@npmcli/run-script@npm:^3.0.0, @npmcli/run-script@npm:^3.0.1": - version: 3.0.1 - resolution: "@npmcli/run-script@npm:3.0.1" +"@npmcli/run-script@npm:*, @npmcli/run-script@npm:^3.0.0, @npmcli/run-script@npm:^3.0.1": + version: 3.0.2 + resolution: "@npmcli/run-script@npm:3.0.2" dependencies: - "@npmcli/node-gyp": ^1.0.3 - "@npmcli/promise-spawn": ^1.3.2 + "@npmcli/node-gyp": ^2.0.0 + "@npmcli/promise-spawn": ^3.0.0 node-gyp: ^9.0.0 read-package-json-fast: ^2.0.3 - checksum: 81fd97182ef84d976f3e808f6aac0cec0ec4096fcfad59f606f4068aa1b4f79d510354804459467c1f98c453a5739937f88e1141a30450d4379bf175f23d46a1 + checksum: b874637640b6a025611eb46de45f0df6b599bb97925370b81430a3fc0f900e1b0d31510b6d75a4b3821d41a6915912be1102afe7fef5028f15a35a447e9d2005 languageName: node linkType: hard @@ -1261,17 +1081,17 @@ __metadata: linkType: hard "@octokit/core@npm:^3.5.1": - version: 3.5.1 - resolution: "@octokit/core@npm:3.5.1" + version: 3.6.0 + resolution: "@octokit/core@npm:3.6.0" dependencies: "@octokit/auth-token": ^2.4.4 "@octokit/graphql": ^4.5.8 - "@octokit/request": ^5.6.0 + "@octokit/request": ^5.6.3 "@octokit/request-error": ^2.0.5 "@octokit/types": ^6.0.3 before-after-hook: ^2.2.0 universal-user-agent: ^6.0.0 - checksum: 67179739fc9712b201f2400f132287a2c56a18506e00900bc9d2a3f742b74f1ba69ad998e42f28f3964c0bd1d5478232c1ec7b485c97702b821fbe22b76afa90 + checksum: f81160129037bd8555d47db60cd5381637b7e3602ad70735a7bdf8f3d250c7b7114a666bb12ef7a8746a326a5d72ed30a1b8f8a5a170007f7285c8e217bef1f0 languageName: node linkType: hard @@ -1347,17 +1167,17 @@ __metadata: languageName: node linkType: hard -"@octokit/request@npm:^5.6.0": - version: 5.6.2 - resolution: "@octokit/request@npm:5.6.2" +"@octokit/request@npm:^5.6.0, @octokit/request@npm:^5.6.3": + version: 5.6.3 + resolution: "@octokit/request@npm:5.6.3" dependencies: "@octokit/endpoint": ^6.0.1 "@octokit/request-error": ^2.1.0 "@octokit/types": ^6.16.1 is-plain-object: ^5.0.0 - node-fetch: ^2.6.1 + node-fetch: ^2.6.7 universal-user-agent: ^6.0.0 - checksum: 51ef3ad244b3d89ffd6d997fa0ed3e13a7a93b4c868ce5c53b0fcc93a654965135528e62d0720ebfeb7dfd586448a4a45d08fd75ba2e170cfa19d37834e49f1f + checksum: c0b4542eb4baaf880d673c758d3e0b5c4a625a4ae30abf40df5548b35f1ff540edaac74625192b1aff42a79ac661e774da4ab7d5505f1cb4ef81239b1e8510c5 languageName: node linkType: hard @@ -1446,12 +1266,12 @@ __metadata: linkType: hard "@rollup/pluginutils@npm:^4.1.1": - version: 4.2.0 - resolution: "@rollup/pluginutils@npm:4.2.0" + version: 4.2.1 + resolution: "@rollup/pluginutils@npm:4.2.1" dependencies: estree-walker: ^2.0.1 picomatch: ^2.2.2 - checksum: 2e86d9bfb95919727bcba0bbbdbedc98e25a1e51fe3047f18ec6d85e0743d1c73e1c0de3f9fdbd2ff6b90c32f30d4b2706c9e794f3c2e7a80156980081558e2e + checksum: 6bc41f22b1a0f1efec3043899e4d3b6b1497b3dea4d94292d8f83b4cf07a1073ecbaedd562a22d11913ff7659f459677b01b09e9598a98936e746780ecc93a12 languageName: node linkType: hard @@ -1505,8 +1325,8 @@ __metadata: linkType: hard "@semantic-release/github@npm:^8.0.0": - version: 8.0.2 - resolution: "@semantic-release/github@npm:8.0.2" + version: 8.0.4 + resolution: "@semantic-release/github@npm:8.0.4" dependencies: "@octokit/rest": ^18.0.0 "@semantic-release/error": ^2.2.0 @@ -1526,7 +1346,7 @@ __metadata: url-join: ^4.0.0 peerDependencies: semantic-release: ">=18.0.0-beta.1" - checksum: 260ecf3fc0aaf2dad87ba85aadf779083015b8c413f8526c28cf10a9cc0c0faa72ddc742ea1170c848985f33d5f3adfe67c2a171e658c13d3819253e701a9231 + checksum: e344b26f12891fe7ba157473d1c9c4ceebe2165cc0ba64fef36e20bc857694afe5e9c4bf196301b7b6fea2686c6a995949dc30d35d52120a8b6fef6016d76714 languageName: node linkType: hard @@ -1634,13 +1454,6 @@ __metadata: languageName: node linkType: hard -"@tootallnate/once@npm:1": - version: 1.1.2 - resolution: "@tootallnate/once@npm:1.1.2" - checksum: e1fb1bbbc12089a0cb9433dc290f97bddd062deadb6178ce9bcb93bb7c1aecde5e60184bc7065aec42fe1663622a213493c48bbd4972d931aae48315f18e1be9 - languageName: node - linkType: hard - "@tootallnate/once@npm:2": version: 2.0.0 resolution: "@tootallnate/once@npm:2.0.0" @@ -1661,11 +1474,11 @@ __metadata: linkType: hard "@types/clownface@npm:*": - version: 1.2.6 - resolution: "@types/clownface@npm:1.2.6" + version: 1.5.0 + resolution: "@types/clownface@npm:1.5.0" dependencies: rdf-js: ^4.0.2 - checksum: 6bd310f8395fe1d3e16afbe4faa2be67e00ee3823764aa8f8a8b61b8c5805fd5afe5c8ba1a2665c431f94fc68143e4dd5434e712eaa1238e9fd07eafe049d2da + checksum: 2270532edf6d27adce48bda7edf8e019cf585e4dddc47d7f207a619c01aa481885f26ed217d35f73aa8c23bc93f53edfebda7db3f1b556564041579e48b0d39c languageName: node linkType: hard @@ -1702,10 +1515,17 @@ __metadata: languageName: node linkType: hard +"@types/json-buffer@npm:~3.0.0": + version: 3.0.0 + resolution: "@types/json-buffer@npm:3.0.0" + checksum: 6b0a371dd603f0eec9d00874574bae195382570e832560dadf2193ee0d1062b8e0694bbae9798bc758632361c227b1e3b19e3bd914043b498640470a2da38b77 + languageName: node + linkType: hard + "@types/json-schema@npm:^7.0.9": - version: 7.0.10 - resolution: "@types/json-schema@npm:7.0.10" - checksum: 369f12207298e3c8931100ab86c9c60d9217ab930a8ae0b851495f4f30695d3f0eb431eedc8e8d9c69357869899ea0fe6f9d65ddde5ea70415d67ef340dfdd1f + version: 7.0.11 + resolution: "@types/json-schema@npm:7.0.11" + checksum: 527bddfe62db9012fccd7627794bd4c71beb77601861055d87e3ee464f2217c85fca7a4b56ae677478367bbd248dbde13553312b7d4dbc702a2f2bbf60c4018d languageName: node linkType: hard @@ -1717,18 +1537,18 @@ __metadata: linkType: hard "@types/keyv@npm:*": - version: 3.1.3 - resolution: "@types/keyv@npm:3.1.3" + version: 3.1.4 + resolution: "@types/keyv@npm:3.1.4" dependencies: "@types/node": "*" - checksum: b5f8aa592cc21c16d99e69aec0976f12b893b055e4456d90148a610a6b6088e297b2ba5f38f8c8280cef006cfd8f9ec99e069905020882619dc5fc8aa46f5f27 + checksum: e009a2bfb50e90ca9b7c6e8f648f8464067271fd99116f881073fa6fa76dc8d0133181dd65e6614d5fb1220d671d67b0124aef7d97dc02d7e342ab143a47779d languageName: node linkType: hard "@types/lodash@npm:^4.14.178": - version: 4.14.180 - resolution: "@types/lodash@npm:4.14.180" - checksum: fc42ae3473695cac6e91553f832fef8eb51a31c1c0381cafa81b00dc3efe18e279786bdda77caf0b90a8340ba2ba7aa46ae6541d69870565f775d04c89128bc1 + version: 4.14.182 + resolution: "@types/lodash@npm:4.14.182" + checksum: 7dd137aa9dbabd632408bd37009d984655164fa1ecc3f2b6eb94afe35bf0a5852cbab6183148d883e9c73a958b7fec9a9bcf7c8e45d41195add6a18c34958209 languageName: node linkType: hard @@ -1757,9 +1577,9 @@ __metadata: linkType: hard "@types/node@npm:*": - version: 17.0.7 - resolution: "@types/node@npm:17.0.7" - checksum: 3cb3024f8c12152f609fabadd66d55e1b02f2a1fd61ae859755d493f01f0e15e66f71784e2f1dac57133415083a426effd12210eb4ed4f2a35d190836eb789ae + version: 17.0.31 + resolution: "@types/node@npm:17.0.31" + checksum: 704618350f8420d5c47db0f7778398e821b7724369946f5c441a7e6b9343295553936400eb8309f0b07d5e39c240988ab3456b983712ca86265dabc9aee4ad3d languageName: node linkType: hard @@ -1819,10 +1639,10 @@ __metadata: languageName: node linkType: hard -"@types/retry@npm:^0.12.0": - version: 0.12.1 - resolution: "@types/retry@npm:0.12.1" - checksum: 5f46b2556053655f78262bb33040dc58417c900457cc63ff37d6c35349814471453ef511af0cec76a540c601296cd2b22f64bab1ab649c0dacc0223765ba876c +"@types/retry@npm:0.12.0": + version: 0.12.0 + resolution: "@types/retry@npm:0.12.0" + checksum: 61a072c7639f6e8126588bf1eb1ce8835f2cb9c2aba795c4491cf6310e013267b0c8488039857c261c387e9728c1b43205099223f160bb6a76b4374f741b5603 languageName: node linkType: hard @@ -1868,12 +1688,12 @@ __metadata: linkType: hard "@typescript-eslint/eslint-plugin@npm:^5.15.0": - version: 5.16.0 - resolution: "@typescript-eslint/eslint-plugin@npm:5.16.0" + version: 5.22.0 + resolution: "@typescript-eslint/eslint-plugin@npm:5.22.0" dependencies: - "@typescript-eslint/scope-manager": 5.16.0 - "@typescript-eslint/type-utils": 5.16.0 - "@typescript-eslint/utils": 5.16.0 + "@typescript-eslint/scope-manager": 5.22.0 + "@typescript-eslint/type-utils": 5.22.0 + "@typescript-eslint/utils": 5.22.0 debug: ^4.3.2 functional-red-black-tree: ^1.0.1 ignore: ^5.1.8 @@ -1886,53 +1706,42 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 4007cc1599503424037300e7401fb969ca441b122ef8a8f2fc8d70f84d656fdf7ab7b0d00e506a3aaf702871616c3756da17eb1508ff315dfb25170f2d28a904 - languageName: node - linkType: hard - -"@typescript-eslint/experimental-utils@npm:^5.0.0": - version: 5.16.0 - resolution: "@typescript-eslint/experimental-utils@npm:5.16.0" - dependencies: - "@typescript-eslint/utils": 5.16.0 - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 2e51aac3ebcfb781b0899f1068b686fd425270218ae63d719af053595cf047b6d97c575a62ad51da8836779690a37c3b62ecd5e7f00ab1e693d65c7fbfab03aa + checksum: 3b083f7003f091c3ef7b3970dca9cfd507ab8c52a9b8a52259c630010adf765e9766f0e6fd9c901fc0e807319a4e8c003e12287b1f12a4b9eb4d7222e8d6db83 languageName: node linkType: hard "@typescript-eslint/parser@npm:^5.15.0": - version: 5.16.0 - resolution: "@typescript-eslint/parser@npm:5.16.0" + version: 5.22.0 + resolution: "@typescript-eslint/parser@npm:5.22.0" dependencies: - "@typescript-eslint/scope-manager": 5.16.0 - "@typescript-eslint/types": 5.16.0 - "@typescript-eslint/typescript-estree": 5.16.0 + "@typescript-eslint/scope-manager": 5.22.0 + "@typescript-eslint/types": 5.22.0 + "@typescript-eslint/typescript-estree": 5.22.0 debug: ^4.3.2 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 40006578e9ac451c80dc4b4b7e29af97b53fb9e9ea660d6ca17fb98b5c9858c648f9b17523c9de9b9b9e4155af17b65435e6163f02c4a2dfacf48274f45cba21 + checksum: 28a7d4b73154fc97336be9a4efd5ffdc659f748232c82479909e86ed87ed8a78d23280b3aaf532ca4e735caaffac43d9576e6af2dfd11865e30a9d70c8a3f275 languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:5.16.0": - version: 5.16.0 - resolution: "@typescript-eslint/scope-manager@npm:5.16.0" +"@typescript-eslint/scope-manager@npm:5.22.0": + version: 5.22.0 + resolution: "@typescript-eslint/scope-manager@npm:5.22.0" dependencies: - "@typescript-eslint/types": 5.16.0 - "@typescript-eslint/visitor-keys": 5.16.0 - checksum: 008a6607d3e6ebcc59a9b28cddcc25703f39a88e27a96c69a6d988acc50a1ea7dbf50963c165ffa5b85a101209a0da3a7ec6832633a162ca4ecc78c0e54acd9f + "@typescript-eslint/types": 5.22.0 + "@typescript-eslint/visitor-keys": 5.22.0 + checksum: ebf2ad44f4e5a4dfd55225419804f81f68056086c20f1549adbcca4236634eac3aae461e30d6cab6539ce6f42346ed6e1fbbb2710d2cc058a3283ef91a0fe174 languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:5.16.0": - version: 5.16.0 - resolution: "@typescript-eslint/type-utils@npm:5.16.0" +"@typescript-eslint/type-utils@npm:5.22.0": + version: 5.22.0 + resolution: "@typescript-eslint/type-utils@npm:5.22.0" dependencies: - "@typescript-eslint/utils": 5.16.0 + "@typescript-eslint/utils": 5.22.0 debug: ^4.3.2 tsutils: ^3.21.0 peerDependencies: @@ -1940,23 +1749,23 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 86d9f1dff6a096c8465453b8c7d0cc667b87a769f19073bfa9bbd36f8baa772c0384ec396b1132052383846bbbcf0d051345ed7d373260c1b506ed27100b383d + checksum: 7128085bfbeca3a9646a795a34730cdfeca110bc00240569f6a7b3dc0854680afa56e015715675a78198b414de869339bd6036cc33cb14903919780a60321a95 languageName: node linkType: hard -"@typescript-eslint/types@npm:5.16.0": - version: 5.16.0 - resolution: "@typescript-eslint/types@npm:5.16.0" - checksum: 0450125741c3eef9581da0b75b4a987a633d77009cfb03507c3db29885b790ee80e3c0efc4f9a0dd3376ba758b49c7829722676153472616a57bb04bce5cc4fa +"@typescript-eslint/types@npm:5.22.0": + version: 5.22.0 + resolution: "@typescript-eslint/types@npm:5.22.0" + checksum: 74f822c5a3b96bba05229eea4ed370c4bd48b17f475c37f08d6ba708adf65c3aa026bb544f1d0308c96e043b30015e396fd53b1e8e4e9fbb6dc9c92d2ccc0a15 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:5.16.0": - version: 5.16.0 - resolution: "@typescript-eslint/typescript-estree@npm:5.16.0" +"@typescript-eslint/typescript-estree@npm:5.22.0": + version: 5.22.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.22.0" dependencies: - "@typescript-eslint/types": 5.16.0 - "@typescript-eslint/visitor-keys": 5.16.0 + "@typescript-eslint/types": 5.22.0 + "@typescript-eslint/visitor-keys": 5.22.0 debug: ^4.3.2 globby: ^11.0.4 is-glob: ^4.0.3 @@ -1965,33 +1774,33 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 930ead4655712c3bd40885fb6b2074cd3c10fb03da864dd7a7dd2e43abfd330bb07e505f0aec8b4846178bff8befbb017f9f3370c67e9c717e4cb8d3df6e16ef + checksum: 2797a79d7d32a9a547b7f1de77a353d8e8c8519791f865f5e061bfc4918d12cdaddec51afa015f5aac5d068ef525c92bd65afc83b84dc9e52e697303acf0873a languageName: node linkType: hard -"@typescript-eslint/utils@npm:5.16.0": - version: 5.16.0 - resolution: "@typescript-eslint/utils@npm:5.16.0" +"@typescript-eslint/utils@npm:5.22.0, @typescript-eslint/utils@npm:^5.10.2": + version: 5.22.0 + resolution: "@typescript-eslint/utils@npm:5.22.0" dependencies: "@types/json-schema": ^7.0.9 - "@typescript-eslint/scope-manager": 5.16.0 - "@typescript-eslint/types": 5.16.0 - "@typescript-eslint/typescript-estree": 5.16.0 + "@typescript-eslint/scope-manager": 5.22.0 + "@typescript-eslint/types": 5.22.0 + "@typescript-eslint/typescript-estree": 5.22.0 eslint-scope: ^5.1.1 eslint-utils: ^3.0.0 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 46749091a204d7cf80d81b04704e23a86903a142a7e35cc5068a821c147c3bf098a7eff99af2b0e2ea7310013ca90300db9bab33ae5e3b5f773ed1d2961a5ed4 + checksum: 5019485e76d754a7a60c042545fd884dc666fddf9d4223ff706bbf0c275f19ea25a6b210fb5cf7ed368b019fe538fd854a925e9c6f12007d51b1731a29d95cc1 languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:5.16.0": - version: 5.16.0 - resolution: "@typescript-eslint/visitor-keys@npm:5.16.0" +"@typescript-eslint/visitor-keys@npm:5.22.0": + version: 5.22.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.22.0" dependencies: - "@typescript-eslint/types": 5.16.0 + "@typescript-eslint/types": 5.22.0 eslint-visitor-keys: ^3.0.0 - checksum: b587bf3b0da95bb58ff877b75fefcee6472222de1e3ec76aa4b94cae66078b62a372c7d0343374a16aab15cdcbae3f9e019624028b35827f68ef6559389f7fd0 + checksum: d30dfa98dcce75da49a6a204a0132d42e63228c35681cb9b3643e47a0a24a633e259832d48d101265bd85b8eb5a9f2b4858f9447646c1d3df6a2ac54258dfe8f languageName: node linkType: hard @@ -2167,18 +1976,18 @@ __metadata: linkType: hard "@vue/composition-api@npm:^1.4.5": - version: 1.4.9 - resolution: "@vue/composition-api@npm:1.4.9" + version: 1.6.0 + resolution: "@vue/composition-api@npm:1.6.0" peerDependencies: vue: ">= 2.5 < 3" - checksum: 08853aee4326804f9b8e53d7abc53bbcfc44e1b9df260644656ae39803b4c3427d5deeb87821413a1e82737704447743cf573315f3f4f038c2b29c7cf6cd5910 + checksum: ffbd1ba769e58f8ab69ef94fbe9fb956924c5cb3d5fac5ecb2991595348f9d0e15456d0a971bdaf547ed9f6cd5690082ff2705d2439cf7569165a648837fe308 languageName: node linkType: hard -"@vue/devtools-api@npm:^6.1.0": - version: 6.1.3 - resolution: "@vue/devtools-api@npm:6.1.3" - checksum: 1ed9171ef889eb94ab69715ecb5c03c3d5df4639c02aac9ae35f880e186de2fdc7dfe1d1efd945878131871815fc88aeeaf64dac58ec31e09a96ec5f5e484bf9 +"@vue/devtools-api@npm:^6.1.4": + version: 6.1.4 + resolution: "@vue/devtools-api@npm:6.1.4" + checksum: 027bb138b03ec7147dd15e5d0ef28d5b72c822530396cc8a86bc6fdb049dc6850314b9e897e497064e3ed47fad229a18141f56b8b8ca3d41092a576dc5b6538d languageName: node linkType: hard @@ -2425,29 +2234,29 @@ __metadata: languageName: node linkType: hard -"@windicss/config@npm:1.8.3": - version: 1.8.3 - resolution: "@windicss/config@npm:1.8.3" +"@windicss/config@npm:1.8.4": + version: 1.8.4 + resolution: "@windicss/config@npm:1.8.4" dependencies: - debug: ^4.3.3 + debug: ^4.3.4 jiti: ^1.13.0 windicss: ^3.5.1 - checksum: e60cbb3eff1a5a5a02b302af2bed3f1fbadf82ab25821db05b950befee85e55df8bb24cdc54bf70a0e402781c958af4b009bc9ed4938a9e00c545b69e2658463 + checksum: 2913d34ce205c6d337b0bc3d2f138260811b16df5dbb0a54a067a29b87d1067a8be0d2575a18a077445629d0589a8c9a22b3df7dac81f880154dd859436f9a72 languageName: node linkType: hard -"@windicss/plugin-utils@npm:1.8.3": - version: 1.8.3 - resolution: "@windicss/plugin-utils@npm:1.8.3" +"@windicss/plugin-utils@npm:1.8.4": + version: 1.8.4 + resolution: "@windicss/plugin-utils@npm:1.8.4" dependencies: - "@antfu/utils": ^0.5.0 - "@windicss/config": 1.8.3 - debug: ^4.3.3 + "@antfu/utils": ^0.5.1 + "@windicss/config": 1.8.4 + debug: ^4.3.4 fast-glob: ^3.2.11 - magic-string: ^0.25.7 - micromatch: ^4.0.4 + magic-string: ^0.26.1 + micromatch: ^4.0.5 windicss: ^3.5.1 - checksum: 9af4cd77b0efd38d671cb64a26ba18c4995d884e5ed31d2fab49170d565cfb5d0efd59525ef1d98dc756872da5b4eff424ccd99b04cf2735280723545789a246 + checksum: 1fdd8b50b73d4e0dd5efd733acc53d94158c5ecce671386e0703bc9415a495e6a7e16682c18dd05f99c4677af97e041c79b3268ccc912ccbb6ecec895c2dcfd3 languageName: node linkType: hard @@ -2511,12 +2320,12 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.7.0": - version: 8.7.0 - resolution: "acorn@npm:8.7.0" +"acorn@npm:^8.5.0, acorn@npm:^8.7.0": + version: 8.7.1 + resolution: "acorn@npm:8.7.1" bin: acorn: bin/acorn - checksum: e0f79409d68923fbf1aa6d4166f3eedc47955320d25c89a20cc822e6ba7c48c5963d5bc657bc242d68f7a4ac9faf96eef033e8f73656da6c640d4219935fdfd0 + checksum: aca0aabf98826717920ac2583fdcad0a6fbe4e583fdb6e843af2594e907455aeafe30b1e14f1757cd83ce1776773cf8296ffc3a4acf13f0bd3dfebcf1db6ae80 languageName: node linkType: hard @@ -2529,17 +2338,6 @@ __metadata: languageName: node linkType: hard -"agentkeepalive@npm:^4.1.3": - version: 4.1.4 - resolution: "agentkeepalive@npm:4.1.4" - dependencies: - debug: ^4.1.0 - depd: ^1.1.2 - humanize-ms: ^1.2.1 - checksum: d49c24d4b333e9507119385895a583872f4f53d62764a89be165926e824056a126955bae4a6d3c6f7cd26f4089621a40f7b27675f7868214d82118f744b9e82d - languageName: node - linkType: hard - "agentkeepalive@npm:^4.2.1": version: 4.2.1 resolution: "agentkeepalive@npm:4.2.1" @@ -2609,24 +2407,10 @@ __metadata: languageName: node linkType: hard -"ansi-regex@npm:^2.0.0": - version: 2.1.1 - resolution: "ansi-regex@npm:2.1.1" - checksum: 190abd03e4ff86794f338a31795d262c1dfe8c91f7e01d04f13f646f1dcb16c5800818f886047876f1272f065570ab86b24b99089f8b68a0e11ff19aed4ca8f1 - languageName: node - linkType: hard - -"ansi-regex@npm:^3.0.0": - version: 3.0.0 - resolution: "ansi-regex@npm:3.0.0" - checksum: 2ad11c416f81c39f5c65eafc88cf1d71aa91d76a2f766e75e457c2a3c43e8a003aadbf2966b61c497aa6a6940a36412486c975b3270cdfc3f413b69826189ec3 - languageName: node - linkType: hard - "ansi-regex@npm:^4.1.0": - version: 4.1.0 - resolution: "ansi-regex@npm:4.1.0" - checksum: 97aa4659538d53e5e441f5ef2949a3cffcb838e57aeaad42c4194e9d7ddb37246a6526c4ca85d3940a9d1e19b11cc2e114530b54c9d700c8baf163c31779baf8 + version: 4.1.1 + resolution: "ansi-regex@npm:4.1.1" + checksum: b1a6ee44cb6ecdabaa770b2ed500542714d4395d71c7e5c25baa631f680fb2ad322eb9ba697548d498a6fd366949fc8b5bfcf48d49a32803611f648005b01888 languageName: node linkType: hard @@ -2676,7 +2460,7 @@ __metadata: languageName: node linkType: hard -"ansistyles@npm:*, ansistyles@npm:~0.1.3": +"ansistyles@npm:*": version: 0.1.3 resolution: "ansistyles@npm:0.1.3" checksum: 0072507f97e46cc3cb71439f1c0935ceec5c8bca812ebb5034b9f8f6a9ee7d65cdc150c375b8d56643fc8305a08542f6df3a1cd6c80e32eba0b27c4e72da4efd @@ -2710,7 +2494,7 @@ __metadata: languageName: node linkType: hard -"aproba@npm:^1.0.3, aproba@npm:^1.1.1": +"aproba@npm:^1.1.1": version: 1.2.0 resolution: "aproba@npm:1.2.0" checksum: 0fca141966559d195072ed047658b6e6c4fe92428c385dd38e288eacfc55807e7b4989322f030faff32c0f46bb0bc10f1e0ac32ec22d25315a1e5bbc0ebb76dc @@ -2724,16 +2508,6 @@ __metadata: languageName: node linkType: hard -"are-we-there-yet@npm:^2.0.0": - version: 2.0.0 - resolution: "are-we-there-yet@npm:2.0.0" - dependencies: - delegates: ^1.0.0 - readable-stream: ^3.6.0 - checksum: 6c80b4fd04ecee6ba6e737e0b72a4b41bdc64b7d279edfc998678567ff583c8df27e27523bc789f2c99be603ffa9eaa612803da1d886962d2086e7ff6fa90c7c - languageName: node - linkType: hard - "are-we-there-yet@npm:^3.0.0": version: 3.0.0 resolution: "are-we-there-yet@npm:3.0.0" @@ -2744,16 +2518,6 @@ __metadata: languageName: node linkType: hard -"are-we-there-yet@npm:~1.1.2": - version: 1.1.7 - resolution: "are-we-there-yet@npm:1.1.7" - dependencies: - delegates: ^1.0.0 - readable-stream: ^2.0.6 - checksum: 70d251719c969b2745bfe5ddf3ebaefa846a636e90a6d5212573676af5d6670e15457761d4725731e19cbebdce42c4ab0cbedf23ab047f2a08274985aa10a3c7 - languageName: node - linkType: hard - "argparse@npm:^2.0.1": version: 2.0.1 resolution: "argparse@npm:2.0.1" @@ -2797,15 +2561,15 @@ __metadata: linkType: hard "array-includes@npm:^3.1.4": - version: 3.1.4 - resolution: "array-includes@npm:3.1.4" + version: 3.1.5 + resolution: "array-includes@npm:3.1.5" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.1 + define-properties: ^1.1.4 + es-abstract: ^1.19.5 get-intrinsic: ^1.1.1 is-string: ^1.0.7 - checksum: 69967c38c52698f84b50a7aed5554aadc89c6ac6399b6d92ad061a5952f8423b4bba054c51d40963f791dfa294d7247cdd7988b6b1f2c5861477031c6386e1c0 + checksum: f6f24d834179604656b7bec3e047251d5cc87e9e87fab7c175c61af48e80e75acd296017abcde21fb52292ab6a2a449ab2ee37213ee48c8709f004d75983f9c5 languageName: node linkType: hard @@ -2847,13 +2611,14 @@ __metadata: linkType: hard "array.prototype.flat@npm:^1.2.5": - version: 1.2.5 - resolution: "array.prototype.flat@npm:1.2.5" + version: 1.3.0 + resolution: "array.prototype.flat@npm:1.3.0" dependencies: call-bind: ^1.0.2 define-properties: ^1.1.3 - es-abstract: ^1.19.0 - checksum: 9cc6414b111abfc7717e39546e4887b1e5ec74df8f1618d83425deaa95752bf05d475d1d241253b4d88d4a01f8e1bc84845ad5b7cc2047f8db2f614512acd40e + es-abstract: ^1.19.2 + es-shim-unscopables: ^1.0.0 + checksum: 2a652b3e8dc0bebb6117e42a5ab5738af0203a14c27341d7bb2431467bdb4b348e2c5dc555dfcda8af0a5e4075c400b85311ded73861c87290a71a17c3e0a257 languageName: node linkType: hard @@ -3044,31 +2809,17 @@ __metadata: languageName: node linkType: hard -"bin-links@npm:^2.3.0": - version: 2.3.0 - resolution: "bin-links@npm:2.3.0" - dependencies: - cmd-shim: ^4.0.1 - mkdirp-infer-owner: ^2.0.0 - npm-normalize-package-bin: ^1.0.0 - read-cmd-shim: ^2.0.0 - rimraf: ^3.0.0 - write-file-atomic: ^3.0.3 - checksum: ec02b9b3fa50a8179baa656801de980023f25a71c1a39491fc5672277f0d76d2ae6330ecedf8f9c279ea3751664c46e5ed9a9e1be67c3c5792fa94b31000626f - languageName: node - linkType: hard - "bin-links@npm:^3.0.0": - version: 3.0.0 - resolution: "bin-links@npm:3.0.0" + version: 3.0.1 + resolution: "bin-links@npm:3.0.1" dependencies: - cmd-shim: ^4.0.1 + cmd-shim: ^5.0.0 mkdirp-infer-owner: ^2.0.0 npm-normalize-package-bin: ^1.0.0 - read-cmd-shim: ^2.0.0 + read-cmd-shim: ^3.0.0 rimraf: ^3.0.0 write-file-atomic: ^4.0.0 - checksum: 61cec54a913bf1897c29db1ac277c022cc97a7189a55b2ed7343e75955800e4ec149e76b134f9c685947e37196282d652bf1f9fa893919283827b61ca289b170 + checksum: c608f0746c5851f259f7578ae5157d24fb019b00792d246bade6255136e5fbd41df43219a50d53f844c562afb6e41092a5f2b0be1bd890e08ff023d330327380 languageName: node linkType: hard @@ -3116,6 +2867,13 @@ __metadata: languageName: node linkType: hard +"boolbase@npm:^1.0.0": + version: 1.0.0 + resolution: "boolbase@npm:1.0.0" + checksum: 3e25c80ef626c3a3487c73dbfc70ac322ec830666c9ad915d11b701142fab25ec1e63eff2c450c74347acfd2de854ccde865cd79ef4db1683f7c7b046ea43bb0 + languageName: node + linkType: hard + "bootstrap-icons@npm:^1.8.1": version: 1.8.1 resolution: "bootstrap-icons@npm:1.8.1" @@ -3123,20 +2881,7 @@ __metadata: languageName: node linkType: hard -"bootstrap-vue@npm:^2.20.1": - version: 2.21.2 - resolution: "bootstrap-vue@npm:2.21.2" - dependencies: - "@nuxt/opencollective": ^0.3.2 - bootstrap: ">=4.5.3 <5.0.0" - popper.js: ^1.16.1 - portal-vue: ^2.1.7 - vue-functional-data-merge: ^3.1.0 - checksum: cf49df1a38917d9fcfca7f015f2660880c11cae8b36da612cb485c995af3823ec9da9620b65f9f5a8dfaa1c88d8bf03dfeb4a7501a6c2c52abc92c6c3af97319 - languageName: node - linkType: hard - -"bootstrap-vue@npm:^2.22.0": +"bootstrap-vue@npm:^2.20.1, bootstrap-vue@npm:^2.22.0": version: 2.22.0 resolution: "bootstrap-vue@npm:2.22.0" dependencies: @@ -3149,7 +2894,7 @@ __metadata: languageName: node linkType: hard -"bootstrap@npm:>=4.5.3 <5.0.0, bootstrap@npm:^4.6.1": +"bootstrap@npm:^4.6.1": version: 4.6.1 resolution: "bootstrap@npm:4.6.1" peerDependencies: @@ -3203,7 +2948,7 @@ __metadata: languageName: node linkType: hard -"braces@npm:^3.0.1, braces@npm:~3.0.2": +"braces@npm:^3.0.2, braces@npm:~3.0.2": version: 3.0.2 resolution: "braces@npm:3.0.2" dependencies: @@ -3292,18 +3037,18 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.17.5": - version: 4.18.1 - resolution: "browserslist@npm:4.18.1" +"browserslist@npm:^4.20.2": + version: 4.20.3 + resolution: "browserslist@npm:4.20.3" dependencies: - caniuse-lite: ^1.0.30001280 - electron-to-chromium: ^1.3.896 + caniuse-lite: ^1.0.30001332 + electron-to-chromium: ^1.4.118 escalade: ^3.1.1 - node-releases: ^2.0.1 + node-releases: ^2.0.3 picocolors: ^1.0.0 bin: browserslist: cli.js - checksum: ae58322deef15960fc2e601d71bc081b571cfab6705999a3d24db5325b9cfadf5f676615f4460207a93e600549c33d60d37b4502007fe9e737b3cc19e20575d5 + checksum: 1e4b719ac2ca0fe235218a606e8b8ef16b8809e0973b924158c39fbc435a0b0fe43437ea52dd6ef5ad2efcb83fcb07431244e472270177814217f7c563651f7d languageName: node linkType: hard @@ -3339,36 +3084,38 @@ __metadata: languageName: node linkType: hard -"builtins@npm:^1.0.3": - version: 1.0.3 - resolution: "builtins@npm:1.0.3" - checksum: 47ce94f7eee0e644969da1f1a28e5f29bd2e48b25b2bbb61164c345881086e29464ccb1fb88dbc155ea26e8b1f5fc8a923b26c8c1ed0935b67b644d410674513 +"builtins@npm:^5.0.0": + version: 5.0.1 + resolution: "builtins@npm:5.0.1" + dependencies: + semver: ^7.0.0 + checksum: 66d204657fe36522822a95b288943ad11b58f5eaede235b11d8c4edaa28ce4800087d44a2681524c340494aadb120a0068011acabe99d30e8f11a7d826d83515 languageName: node linkType: hard -"cacache@npm:*, cacache@npm:^15.0.3, cacache@npm:^15.0.5, cacache@npm:^15.2.0": - version: 15.3.0 - resolution: "cacache@npm:15.3.0" +"cacache@npm:*, cacache@npm:^16.0.0, cacache@npm:^16.0.2, cacache@npm:^16.0.6": + version: 16.0.7 + resolution: "cacache@npm:16.0.7" dependencies: - "@npmcli/fs": ^1.0.0 - "@npmcli/move-file": ^1.0.1 + "@npmcli/fs": ^2.1.0 + "@npmcli/move-file": ^2.0.0 chownr: ^2.0.0 - fs-minipass: ^2.0.0 - glob: ^7.1.4 + fs-minipass: ^2.1.0 + glob: ^8.0.1 infer-owner: ^1.0.4 - lru-cache: ^6.0.0 - minipass: ^3.1.1 + lru-cache: ^7.7.1 + minipass: ^3.1.6 minipass-collect: ^1.0.2 minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.2 - mkdirp: ^1.0.3 + minipass-pipeline: ^1.2.4 + mkdirp: ^1.0.4 p-map: ^4.0.0 promise-inflight: ^1.0.1 rimraf: ^3.0.2 - ssri: ^8.0.1 - tar: ^6.0.2 + ssri: ^9.0.0 + tar: ^6.1.11 unique-filename: ^1.1.1 - checksum: a07327c27a4152c04eb0a831c63c00390d90f94d51bb80624a66f4e14a6b6360bbf02a84421267bd4d00ca73ac9773287d8d7169e8d2eafe378d2ce140579db8 + checksum: 2155b099b7e0f0369fb1155ca4673532ca7efe2ebdbec63acca8743580b8446b5d4fd7184626b1cb059001af77b981cdc67035c7855544d365d4f048eafca2ca languageName: node linkType: hard @@ -3395,32 +3142,6 @@ __metadata: languageName: node linkType: hard -"cacache@npm:^16.0.0, cacache@npm:^16.0.2": - version: 16.0.3 - resolution: "cacache@npm:16.0.3" - dependencies: - "@npmcli/fs": ^2.1.0 - "@npmcli/move-file": ^1.1.2 - chownr: ^2.0.0 - fs-minipass: ^2.1.0 - glob: ^7.2.0 - infer-owner: ^1.0.4 - lru-cache: ^7.7.1 - minipass: ^3.1.6 - minipass-collect: ^1.0.2 - minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.4 - mkdirp: ^1.0.4 - p-map: ^4.0.0 - promise-inflight: ^1.0.1 - rimraf: ^3.0.2 - ssri: ^8.0.1 - tar: ^6.1.11 - unique-filename: ^1.1.1 - checksum: 9bb9a0bd1b8bee3284c6fa9dcb4b28a62b528dd181f7cd482319611b5d6df295a3594dcefc24d1a4f16162bac50d6facc183ed21935f3d09af6d16f620ea54d3 - languageName: node - linkType: hard - "cache-base@npm:^1.0.1": version: 1.0.1 resolution: "cache-base@npm:1.0.1" @@ -3502,10 +3223,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.30001280": - version: 1.0.30001282 - resolution: "caniuse-lite@npm:1.0.30001282" - checksum: 62797fd756e88bfa01f0f983bea9de7814293b209456e8f0b20596b03d2880246f63dc90f947a1fa63f92806ebefbb86fc7811dbecb7839927886d07996938be +"caniuse-lite@npm:^1.0.30001332": + version: 1.0.30001335 + resolution: "caniuse-lite@npm:1.0.30001335" + checksum: fe08b49ec6cb76cc69958ff001cf89d0a8ef9f35e0c8028b65981585046384f76e007d64dea372a34ca56d91caa83cc614c00779fe2b4d378aa0e68696374f67 languageName: node linkType: hard @@ -3535,10 +3256,10 @@ __metadata: languageName: node linkType: hard -"chalk@npm:*": - version: 5.0.0 - resolution: "chalk@npm:5.0.0" - checksum: 6eba7c518b9aa5fe882ae6d14a1ffa58c418d72a3faa7f72af56641f1bbef51b645fca1d6e05d42357b7d3c846cd504c0b7b64d12309cdd07867e3b4411e0d01 +"chalk@npm:*, chalk@npm:^5.0.0": + version: 5.0.1 + resolution: "chalk@npm:5.0.1" + checksum: 7b45300372b908f0471fbf7389ce2f5de8d85bb949026fd51a1b95b10d0ed32c7ed5aab36dd5e9d2bf3191867909b4404cef75c5f4d2d1daeeacd301dd280b76 languageName: node linkType: hard @@ -3563,13 +3284,6 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^5.0.0": - version: 5.0.1 - resolution: "chalk@npm:5.0.1" - checksum: 7b45300372b908f0471fbf7389ce2f5de8d85bb949026fd51a1b95b10d0ed32c7ed5aab36dd5e9d2bf3191867909b4404cef75c5f4d2d1daeeacd301dd280b76 - languageName: node - linkType: hard - "charcodes@npm:^0.2.0": version: 0.2.0 resolution: "charcodes@npm:0.2.0" @@ -3727,16 +3441,16 @@ __metadata: languageName: node linkType: hard -"cli-table3@npm:*, cli-table3@npm:^0.6.1": - version: 0.6.1 - resolution: "cli-table3@npm:0.6.1" +"cli-table3@npm:*, cli-table3@npm:^0.6.1, cli-table3@npm:^0.6.2": + version: 0.6.2 + resolution: "cli-table3@npm:0.6.2" dependencies: - colors: 1.4.0 + "@colors/colors": 1.5.0 string-width: ^4.2.0 dependenciesMeta: - colors: + "@colors/colors": optional: true - checksum: 956e175f8eb019c26465b9f1e51121c08d8978e2aab04be7f8520ea8a4e67906fcbd8516dfb77e386ae3730ef0281aa21a65613dffbfa3d62969263252bd25a9 + checksum: 2f82391698b8a2a2a5e45d2adcfea5d93e557207f90455a8d4c1aac688e9b18a204d9eb4ba1d322fa123b17d64ea3dc5e11de8b005529f3c3e7dbeb27cb4d9be languageName: node linkType: hard @@ -3795,28 +3509,21 @@ __metadata: linkType: hard "clownface@npm:^1.0.0, clownface@npm:^1.4.0": - version: 1.4.0 - resolution: "clownface@npm:1.4.0" + version: 1.5.1 + resolution: "clownface@npm:1.5.1" dependencies: "@rdfjs/data-model": ^1.1.0 "@rdfjs/namespace": ^1.0.0 - checksum: 97d01895f82e6fbc911f61b1f3cb8a56b7e693c07d6caa3adb291e91e63f219e4d52ecbb304459443dc3b54d9ea09be5a87f22606257d6c8c049e137c94d02b0 + checksum: 2515b54e2874390b5d212fca824f2e9e57cdc87fe271a980d3fa5aaf9f511ca184e71806bd4ed0902858accdafab933c7e28d8afca36a68e2a49a1562d68c81b languageName: node linkType: hard -"cmd-shim@npm:^4.0.1": - version: 4.1.0 - resolution: "cmd-shim@npm:4.1.0" +"cmd-shim@npm:^5.0.0": + version: 5.0.0 + resolution: "cmd-shim@npm:5.0.0" dependencies: mkdirp-infer-owner: ^2.0.0 - checksum: d25bb57a8accab681bcfc632e085573b9395cdc60aed8d0ce479f988f9ced16720c89732aef81020140e43fd223b6573c22402e5a1c0cbd0149443104df88d68 - languageName: node - linkType: hard - -"code-point-at@npm:^1.0.0": - version: 1.1.0 - resolution: "code-point-at@npm:1.1.0" - checksum: 17d5666611f9b16d64fdf48176d9b7fb1c7d1c1607a189f7e600040a11a6616982876af148230336adb7d8fe728a559f743a4e29db3747e3b1a32fa7f4529681 + checksum: 83d2a46cdf4adbb38d3d3184364b2df0e4c001ac770f5ca94373825d7a48838b4cb8a59534ef48f02b0d556caa047728589ca65c640c17c0b417b3afb34acfbb languageName: node linkType: hard @@ -3862,7 +3569,7 @@ __metadata: languageName: node linkType: hard -"color-support@npm:^1.1.2": +"color-support@npm:^1.1.3": version: 1.1.3 resolution: "color-support@npm:1.1.3" bin: @@ -3878,24 +3585,7 @@ __metadata: languageName: node linkType: hard -"colors@npm:1.4.0": - version: 1.4.0 - resolution: "colors@npm:1.4.0" - checksum: 98aa2c2418ad87dedf25d781be69dc5fc5908e279d9d30c34d8b702e586a0474605b3a189511482b9d5ed0d20c867515d22749537f7bc546256c6014f3ebdcec - languageName: node - linkType: hard - -"columnify@npm:*": - version: 1.5.4 - resolution: "columnify@npm:1.5.4" - dependencies: - strip-ansi: ^3.0.0 - wcwidth: ^1.0.0 - checksum: f0693937412ec41d387f8ae89ff8cd5811a07ad636f753f0276ba8394fd76c0f610621ebeb379d6adcb30d98696919546dbbf93a28bd4e546efc7e30d905edc2 - languageName: node - linkType: hard - -"columnify@npm:^1.6.0": +"columnify@npm:*, columnify@npm:^1.6.0": version: 1.6.0 resolution: "columnify@npm:1.6.0" dependencies: @@ -3972,6 +3662,16 @@ __metadata: languageName: node linkType: hard +"compress-brotli@npm:^1.3.6": + version: 1.3.6 + resolution: "compress-brotli@npm:1.3.6" + dependencies: + "@types/json-buffer": ~3.0.0 + json-buffer: ~3.0.1 + checksum: 9db8e082a3286bd6a0da2b6b2929c62a827c5a1bee8f0d1c777cccfcef14c9e751d93ae46329f1529bfbfab9b6f241465e3a1c895be235c6e923f5017d952d00 + languageName: node + linkType: hard + "concat-map@npm:0.0.1": version: 0.0.1 resolution: "concat-map@npm:0.0.1" @@ -4005,7 +3705,7 @@ __metadata: languageName: node linkType: hard -"console-control-strings@npm:^1.0.0, console-control-strings@npm:^1.1.0, console-control-strings@npm:~1.1.0": +"console-control-strings@npm:^1.1.0": version: 1.1.0 resolution: "console-control-strings@npm:1.1.0" checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed @@ -4132,9 +3832,9 @@ __metadata: linkType: hard "core-js@npm:^3.21.1": - version: 3.21.1 - resolution: "core-js@npm:3.21.1" - checksum: d68eddd831340ad5b24ac29c72fda022a43b17f194c4278b6b875a843283d316502cb4abd07f28631d6ebc4387f66aa06e2b1b3c8fd7e08096a751b5c63f6889 + version: 3.22.4 + resolution: "core-js@npm:3.22.4" + checksum: 1d031597a61d11266343c7f9a788ad620bb8e1a15207c8ff41ee77183789f1d6592d7cbaf4931d74773be08739871c6ae1a59090a7e03f0bc5131d4443cc04d2 languageName: node linkType: hard @@ -4311,15 +4011,15 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1": - version: 4.3.2 - resolution: "debug@npm:4.3.2" +"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": + version: 4.3.4 + resolution: "debug@npm:4.3.4" dependencies: ms: 2.1.2 peerDependenciesMeta: supports-color: optional: true - checksum: 820ea160e267e23c953c9ed87e7ad93494d8cda2f7349af5e7e3bb236d23707ee3022f477d5a7d2ee86ef2bf7d60aa9ab22d1f58080d7deb9dccd073585e1e43 + checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 languageName: node linkType: hard @@ -4341,30 +4041,6 @@ __metadata: languageName: node linkType: hard -"debug@npm:^4.0.0, debug@npm:^4.3.1": - version: 4.3.3 - resolution: "debug@npm:4.3.3" - dependencies: - ms: 2.1.2 - peerDependenciesMeta: - supports-color: - optional: true - checksum: 14472d56fe4a94dbcfaa6dbed2dd3849f1d72ba78104a1a328047bb564643ca49df0224c3a17fa63533fd11dd3d4c8636cd861191232a2c6735af00cc2d4de16 - languageName: node - linkType: hard - -"debug@npm:^4.3.2, debug@npm:^4.3.3": - version: 4.3.4 - resolution: "debug@npm:4.3.4" - dependencies: - ms: 2.1.2 - peerDependenciesMeta: - supports-color: - optional: true - checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 - languageName: node - linkType: hard - "debuglog@npm:^1.0.1": version: 1.0.1 resolution: "debuglog@npm:1.0.1" @@ -4426,12 +4102,12 @@ __metadata: languageName: node linkType: hard -"deepmerge-ts@npm:^2.0.1": - version: 2.0.1 - resolution: "deepmerge-ts@npm:2.0.1" +"deepmerge-ts@npm:^4.0.3": + version: 4.0.3 + resolution: "deepmerge-ts@npm:4.0.3" dependencies: is-plain-object: ^5.0.0 - checksum: 9dca78c3c2aedcedb2e863c951c4c34b095317c33c408422b4741c6f12fb51eb645dc55633f5992ade70bdd9421cc6804a6c638ae14e85de8945cfcd121a28f3 + checksum: 4973705394bcbf13f896942491366b16b9776a1484c60f827e56fd2fa2327dc1f9634d00a5ac321a17c8099427890dcfb406fa216ba406644107281ed79a1e86 languageName: node linkType: hard @@ -4451,12 +4127,13 @@ __metadata: languageName: node linkType: hard -"define-properties@npm:^1.1.3": - version: 1.1.3 - resolution: "define-properties@npm:1.1.3" +"define-properties@npm:^1.1.3, define-properties@npm:^1.1.4": + version: 1.1.4 + resolution: "define-properties@npm:1.1.4" dependencies: - object-keys: ^1.0.12 - checksum: da80dba55d0cd76a5a7ab71ef6ea0ebcb7b941f803793e4e0257b384cb772038faa0c31659d244e82c4342edef841c1a1212580006a05a5068ee48223d787317 + has-property-descriptors: ^1.0.0 + object-keys: ^1.1.1 + checksum: ce0aef3f9eb193562b5cfb79b2d2c86b6a109dfc9fdcb5f45d680631a1a908c06824ddcdb72b7573b54e26ace07f0a23420aaba0d5c627b34d2c1de8ef527e2b languageName: node linkType: hard @@ -4543,12 +4220,12 @@ __metadata: linkType: hard "dezalgo@npm:^1.0.0": - version: 1.0.3 - resolution: "dezalgo@npm:1.0.3" + version: 1.0.4 + resolution: "dezalgo@npm:1.0.4" dependencies: asap: ^2.0.0 wrappy: 1 - checksum: 8b26238db91423b2702a7a6d9629d0019c37c415e7b6e75d4b3e8d27e9464e21cac3618dd145f4d4ee96c70cc6ff034227b5b8a0e9c09015a8bdbe6dace3cfb9 + checksum: 895389c6aead740d2ab5da4d3466d20fa30f738010a4d3f4dcccc9fc645ca31c9d10b7e1804ae489b1eb02c7986f9f1f34ba132d409b043082a86d9a4e745624 languageName: node linkType: hard @@ -4607,13 +4284,13 @@ __metadata: linkType: hard "dom-serializer@npm:^1.0.1": - version: 1.3.2 - resolution: "dom-serializer@npm:1.3.2" + version: 1.4.1 + resolution: "dom-serializer@npm:1.4.1" dependencies: domelementtype: ^2.0.1 domhandler: ^4.2.0 entities: ^2.0.0 - checksum: bff48714944d67b160db71ba244fb0f3fe72e77ef2ec8414e2eeb56f2d926e404a13456b8b83a5392e217ba47dec2ec0c368801b31481813e94d185276c3e964 + checksum: fbb0b01f87a8a2d18e6e5a388ad0f7ec4a5c05c06d219377da1abc7bb0f674d804f4a8a94e3f71ff15f6cb7dcfc75704a54b261db672b9b3ab03da6b758b0b22 languageName: node linkType: hard @@ -4625,9 +4302,9 @@ __metadata: linkType: hard "domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0": - version: 2.2.0 - resolution: "domelementtype@npm:2.2.0" - checksum: 24cb386198640cd58aa36f8c987f2ea61859929106d06ffcc8f547e70cb2ed82a6dc56dcb8252b21fba1f1ea07df6e4356d60bfe57f77114ca1aed6828362629 + version: 2.3.0 + resolution: "domelementtype@npm:2.3.0" + checksum: ee837a318ff702622f383409d1f5b25dd1024b692ef64d3096ff702e26339f8e345820f29a68bcdcea8cfee3531776b3382651232fbeae95612d6f0a75efb4f6 languageName: node linkType: hard @@ -4705,10 +4382,10 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.3.896": - version: 1.3.904 - resolution: "electron-to-chromium@npm:1.3.904" - checksum: 51cd8de455721c921ab5522e868071f7ea53eeff20938b7186283b50f3c5aad98ff10c9d6b991d98d0bef09db8206bfab63d0458adba33b25104ead9bcd395de +"electron-to-chromium@npm:^1.4.118": + version: 1.4.132 + resolution: "electron-to-chromium@npm:1.4.132" + checksum: 133be125d1fa9693ce1d2f83d3f03a79ee19059fb95c203af87c4f833e661b7185ddb918fc53e272a7c8ff4169907cf1879790d1681011c6035c5c4f66b2848a languageName: node linkType: hard @@ -4748,7 +4425,7 @@ __metadata: languageName: node linkType: hard -"encoding@npm:^0.1.12, encoding@npm:^0.1.13": +"encoding@npm:^0.1.13": version: 0.1.13 resolution: "encoding@npm:0.1.13" dependencies: @@ -4829,9 +4506,9 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.19.0, es-abstract@npm:^1.19.1": - version: 1.19.1 - resolution: "es-abstract@npm:1.19.1" +"es-abstract@npm:^1.19.1, es-abstract@npm:^1.19.2, es-abstract@npm:^1.19.5": + version: 1.19.5 + resolution: "es-abstract@npm:1.19.5" dependencies: call-bind: ^1.0.2 es-to-primitive: ^1.2.1 @@ -4839,21 +4516,30 @@ __metadata: get-intrinsic: ^1.1.1 get-symbol-description: ^1.0.0 has: ^1.0.3 - has-symbols: ^1.0.2 + has-symbols: ^1.0.3 internal-slot: ^1.0.3 is-callable: ^1.2.4 - is-negative-zero: ^2.0.1 + is-negative-zero: ^2.0.2 is-regex: ^1.1.4 - is-shared-array-buffer: ^1.0.1 + is-shared-array-buffer: ^1.0.2 is-string: ^1.0.7 - is-weakref: ^1.0.1 - object-inspect: ^1.11.0 + is-weakref: ^1.0.2 + object-inspect: ^1.12.0 object-keys: ^1.1.1 object.assign: ^4.1.2 string.prototype.trimend: ^1.0.4 string.prototype.trimstart: ^1.0.4 unbox-primitive: ^1.0.1 - checksum: b6be8410672c5364db3fb01eb786e30c7b4bb32b4af63d381c08840f4382c4a168e7855cd338bf59d4f1a1a1138f4d748d1fd40ec65aaa071876f9e9fbfed949 + checksum: 55199b0f179a12b3b0ec9c9f2e3a27a7561686e4f88d46f9ef32c836448a336e367c14d8f792612fc83a64113896e478259e4dffbbcffb3efdd06650f6360324 + languageName: node + linkType: hard + +"es-shim-unscopables@npm:^1.0.0": + version: 1.0.0 + resolution: "es-shim-unscopables@npm:1.0.0" + dependencies: + has: ^1.0.3 + checksum: 83e95cadbb6ee44d3644dfad60dcad7929edbc42c85e66c3e99aefd68a3a5c5665f2686885cddb47dfeabfd77bd5ea5a7060f2092a955a729bbd8834f0d86fa1 languageName: node linkType: hard @@ -4868,170 +4554,170 @@ __metadata: languageName: node linkType: hard -"esbuild-android-64@npm:0.14.27": - version: 0.14.27 - resolution: "esbuild-android-64@npm:0.14.27" +"esbuild-android-64@npm:0.14.38": + version: 0.14.38 + resolution: "esbuild-android-64@npm:0.14.38" conditions: os=android & cpu=x64 languageName: node linkType: hard -"esbuild-android-arm64@npm:0.14.27": - version: 0.14.27 - resolution: "esbuild-android-arm64@npm:0.14.27" +"esbuild-android-arm64@npm:0.14.38": + version: 0.14.38 + resolution: "esbuild-android-arm64@npm:0.14.38" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"esbuild-darwin-64@npm:0.14.27": - version: 0.14.27 - resolution: "esbuild-darwin-64@npm:0.14.27" +"esbuild-darwin-64@npm:0.14.38": + version: 0.14.38 + resolution: "esbuild-darwin-64@npm:0.14.38" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"esbuild-darwin-arm64@npm:0.14.27": - version: 0.14.27 - resolution: "esbuild-darwin-arm64@npm:0.14.27" +"esbuild-darwin-arm64@npm:0.14.38": + version: 0.14.38 + resolution: "esbuild-darwin-arm64@npm:0.14.38" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"esbuild-freebsd-64@npm:0.14.27": - version: 0.14.27 - resolution: "esbuild-freebsd-64@npm:0.14.27" +"esbuild-freebsd-64@npm:0.14.38": + version: 0.14.38 + resolution: "esbuild-freebsd-64@npm:0.14.38" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"esbuild-freebsd-arm64@npm:0.14.27": - version: 0.14.27 - resolution: "esbuild-freebsd-arm64@npm:0.14.27" +"esbuild-freebsd-arm64@npm:0.14.38": + version: 0.14.38 + resolution: "esbuild-freebsd-arm64@npm:0.14.38" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard -"esbuild-linux-32@npm:0.14.27": - version: 0.14.27 - resolution: "esbuild-linux-32@npm:0.14.27" +"esbuild-linux-32@npm:0.14.38": + version: 0.14.38 + resolution: "esbuild-linux-32@npm:0.14.38" conditions: os=linux & cpu=ia32 languageName: node linkType: hard -"esbuild-linux-64@npm:0.14.27": - version: 0.14.27 - resolution: "esbuild-linux-64@npm:0.14.27" +"esbuild-linux-64@npm:0.14.38": + version: 0.14.38 + resolution: "esbuild-linux-64@npm:0.14.38" conditions: os=linux & cpu=x64 languageName: node linkType: hard -"esbuild-linux-arm64@npm:0.14.27": - version: 0.14.27 - resolution: "esbuild-linux-arm64@npm:0.14.27" +"esbuild-linux-arm64@npm:0.14.38": + version: 0.14.38 + resolution: "esbuild-linux-arm64@npm:0.14.38" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"esbuild-linux-arm@npm:0.14.27": - version: 0.14.27 - resolution: "esbuild-linux-arm@npm:0.14.27" +"esbuild-linux-arm@npm:0.14.38": + version: 0.14.38 + resolution: "esbuild-linux-arm@npm:0.14.38" conditions: os=linux & cpu=arm languageName: node linkType: hard -"esbuild-linux-mips64le@npm:0.14.27": - version: 0.14.27 - resolution: "esbuild-linux-mips64le@npm:0.14.27" +"esbuild-linux-mips64le@npm:0.14.38": + version: 0.14.38 + resolution: "esbuild-linux-mips64le@npm:0.14.38" conditions: os=linux & cpu=mips64el languageName: node linkType: hard -"esbuild-linux-ppc64le@npm:0.14.27": - version: 0.14.27 - resolution: "esbuild-linux-ppc64le@npm:0.14.27" +"esbuild-linux-ppc64le@npm:0.14.38": + version: 0.14.38 + resolution: "esbuild-linux-ppc64le@npm:0.14.38" conditions: os=linux & cpu=ppc64 languageName: node linkType: hard -"esbuild-linux-riscv64@npm:0.14.27": - version: 0.14.27 - resolution: "esbuild-linux-riscv64@npm:0.14.27" +"esbuild-linux-riscv64@npm:0.14.38": + version: 0.14.38 + resolution: "esbuild-linux-riscv64@npm:0.14.38" conditions: os=linux & cpu=riscv64 languageName: node linkType: hard -"esbuild-linux-s390x@npm:0.14.27": - version: 0.14.27 - resolution: "esbuild-linux-s390x@npm:0.14.27" +"esbuild-linux-s390x@npm:0.14.38": + version: 0.14.38 + resolution: "esbuild-linux-s390x@npm:0.14.38" conditions: os=linux & cpu=s390x languageName: node linkType: hard -"esbuild-netbsd-64@npm:0.14.27": - version: 0.14.27 - resolution: "esbuild-netbsd-64@npm:0.14.27" +"esbuild-netbsd-64@npm:0.14.38": + version: 0.14.38 + resolution: "esbuild-netbsd-64@npm:0.14.38" conditions: os=netbsd & cpu=x64 languageName: node linkType: hard -"esbuild-openbsd-64@npm:0.14.27": - version: 0.14.27 - resolution: "esbuild-openbsd-64@npm:0.14.27" +"esbuild-openbsd-64@npm:0.14.38": + version: 0.14.38 + resolution: "esbuild-openbsd-64@npm:0.14.38" conditions: os=openbsd & cpu=x64 languageName: node linkType: hard -"esbuild-sunos-64@npm:0.14.27": - version: 0.14.27 - resolution: "esbuild-sunos-64@npm:0.14.27" +"esbuild-sunos-64@npm:0.14.38": + version: 0.14.38 + resolution: "esbuild-sunos-64@npm:0.14.38" conditions: os=sunos & cpu=x64 languageName: node linkType: hard -"esbuild-windows-32@npm:0.14.27": - version: 0.14.27 - resolution: "esbuild-windows-32@npm:0.14.27" +"esbuild-windows-32@npm:0.14.38": + version: 0.14.38 + resolution: "esbuild-windows-32@npm:0.14.38" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"esbuild-windows-64@npm:0.14.27": - version: 0.14.27 - resolution: "esbuild-windows-64@npm:0.14.27" +"esbuild-windows-64@npm:0.14.38": + version: 0.14.38 + resolution: "esbuild-windows-64@npm:0.14.38" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"esbuild-windows-arm64@npm:0.14.27": - version: 0.14.27 - resolution: "esbuild-windows-arm64@npm:0.14.27" +"esbuild-windows-arm64@npm:0.14.38": + version: 0.14.38 + resolution: "esbuild-windows-arm64@npm:0.14.38" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"esbuild@npm:^0.14.14": - version: 0.14.27 - resolution: "esbuild@npm:0.14.27" - dependencies: - esbuild-android-64: 0.14.27 - esbuild-android-arm64: 0.14.27 - esbuild-darwin-64: 0.14.27 - esbuild-darwin-arm64: 0.14.27 - esbuild-freebsd-64: 0.14.27 - esbuild-freebsd-arm64: 0.14.27 - esbuild-linux-32: 0.14.27 - esbuild-linux-64: 0.14.27 - esbuild-linux-arm: 0.14.27 - esbuild-linux-arm64: 0.14.27 - esbuild-linux-mips64le: 0.14.27 - esbuild-linux-ppc64le: 0.14.27 - esbuild-linux-riscv64: 0.14.27 - esbuild-linux-s390x: 0.14.27 - esbuild-netbsd-64: 0.14.27 - esbuild-openbsd-64: 0.14.27 - esbuild-sunos-64: 0.14.27 - esbuild-windows-32: 0.14.27 - esbuild-windows-64: 0.14.27 - esbuild-windows-arm64: 0.14.27 +"esbuild@npm:^0.14.27": + version: 0.14.38 + resolution: "esbuild@npm:0.14.38" + dependencies: + esbuild-android-64: 0.14.38 + esbuild-android-arm64: 0.14.38 + esbuild-darwin-64: 0.14.38 + esbuild-darwin-arm64: 0.14.38 + esbuild-freebsd-64: 0.14.38 + esbuild-freebsd-arm64: 0.14.38 + esbuild-linux-32: 0.14.38 + esbuild-linux-64: 0.14.38 + esbuild-linux-arm: 0.14.38 + esbuild-linux-arm64: 0.14.38 + esbuild-linux-mips64le: 0.14.38 + esbuild-linux-ppc64le: 0.14.38 + esbuild-linux-riscv64: 0.14.38 + esbuild-linux-s390x: 0.14.38 + esbuild-netbsd-64: 0.14.38 + esbuild-openbsd-64: 0.14.38 + esbuild-sunos-64: 0.14.38 + esbuild-windows-32: 0.14.38 + esbuild-windows-64: 0.14.38 + esbuild-windows-arm64: 0.14.38 dependenciesMeta: esbuild-android-64: optional: true @@ -5075,7 +4761,7 @@ __metadata: optional: true bin: esbuild: bin/esbuild - checksum: 19386ba13536ca69845989c981a44e006cf4aa79cf8186fe2af6fdb8f43f7b7ca708c443360fe18b455b4da71b473ad135bc3bc20b892485b2a27455d2287555 + checksum: d7523a36bd28016c010829c527386dbc0c6b9f514920abf5ac8003f346665161aa61026fd6822c5091fc1c1af52fe26c9281a81740fc06f2994cdbb7c2880297 languageName: node linkType: hard @@ -5146,7 +4832,7 @@ __metadata: languageName: node linkType: hard -"eslint-module-utils@npm:^2.7.2": +"eslint-module-utils@npm:^2.7.3": version: 2.7.3 resolution: "eslint-module-utils@npm:2.7.3" dependencies: @@ -5169,11 +4855,11 @@ __metadata: linkType: hard "eslint-plugin-functional@npm:^4.2.0": - version: 4.2.0 - resolution: "eslint-plugin-functional@npm:4.2.0" + version: 4.2.1 + resolution: "eslint-plugin-functional@npm:4.2.1" dependencies: - "@typescript-eslint/experimental-utils": ^5.0.0 - deepmerge-ts: ^2.0.1 + "@typescript-eslint/utils": ^5.10.2 + deepmerge-ts: ^4.0.3 escape-string-regexp: ^4.0.0 peerDependencies: eslint: ^8.0.0 @@ -5184,30 +4870,30 @@ __metadata: optional: true typescript: optional: true - checksum: 6bc4e90377b3b2ffb28b3322cedc0e765a99d4566cf9d1ca52d20ca1fe139d8ab55f3e2e472dabc2b3d27b19bbdce40cdbd333aabb209a0ffb6ca66127324f65 + checksum: 8369efc98c69b602d73b19ff3d8cab029483de84c2c3a7299dd542a434e2c07b22abb503c38e988320bec5291f87b9e24bbbd138cd9d37ecbbcb4886671ef300 languageName: node linkType: hard "eslint-plugin-import@npm:^2.25.4": - version: 2.25.4 - resolution: "eslint-plugin-import@npm:2.25.4" + version: 2.26.0 + resolution: "eslint-plugin-import@npm:2.26.0" dependencies: array-includes: ^3.1.4 array.prototype.flat: ^1.2.5 debug: ^2.6.9 doctrine: ^2.1.0 eslint-import-resolver-node: ^0.3.6 - eslint-module-utils: ^2.7.2 + eslint-module-utils: ^2.7.3 has: ^1.0.3 - is-core-module: ^2.8.0 + is-core-module: ^2.8.1 is-glob: ^4.0.3 - minimatch: ^3.0.4 + minimatch: ^3.1.2 object.values: ^1.1.5 - resolve: ^1.20.0 - tsconfig-paths: ^3.12.0 + resolve: ^1.22.0 + tsconfig-paths: ^3.14.1 peerDependencies: eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - checksum: 0af24f5c7c6ca692f42e3947127f0ae7dfe44f1e02740f7cbe988b510a9c52bab0065d7df04e2d953dcc88a4595a00cbdcf14018acf8cd75cfd47b72efcbb734 + checksum: 0bf77ad80339554481eafa2b1967449e1f816b94c7a6f9614ce33fb4083c4e6c050f10d241dd50b4975d47922880a34de1e42ea9d8e6fd663ebb768baa67e655 languageName: node linkType: hard @@ -5227,16 +4913,18 @@ __metadata: linkType: hard "eslint-plugin-vue@npm:^8.5.0": - version: 8.5.0 - resolution: "eslint-plugin-vue@npm:8.5.0" + version: 8.7.1 + resolution: "eslint-plugin-vue@npm:8.7.1" dependencies: eslint-utils: ^3.0.0 natural-compare: ^1.4.0 + nth-check: ^2.0.1 + postcss-selector-parser: ^6.0.9 semver: ^7.3.5 vue-eslint-parser: ^8.0.1 peerDependencies: eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 - checksum: 2edc956debe3bf22d0daab04b5d59609185799c76dc24ce0c899035ecf64de07a526accc96e8622bccd368b6848f185980e9d6e395d4d14068e89a77e0010119 + checksum: c3aefb226dea126db32cab4c570f17f4b4047d609f4f5748e8dc410e929fbbfacdc07af1421c0f7773398513e9363de4480694714bc85fa2188ca50d1d19cfbc languageName: node linkType: hard @@ -5303,10 +4991,10 @@ __metadata: linkType: hard "eslint@npm:^8.11.0": - version: 8.11.0 - resolution: "eslint@npm:8.11.0" + version: 8.14.0 + resolution: "eslint@npm:8.14.0" dependencies: - "@eslint/eslintrc": ^1.2.1 + "@eslint/eslintrc": ^1.2.2 "@humanwhocodes/config-array": ^0.9.2 ajv: ^6.10.0 chalk: ^4.0.0 @@ -5343,7 +5031,7 @@ __metadata: v8-compile-cache: ^2.0.3 bin: eslint: bin/eslint.js - checksum: a06a2ea37002d6c0a4f462fe31b4411185dc3da7857fafb896eb392ba95a1289cc3538056474b2f44f08012f265bede01a39d46df4ac39ebc6d7be90e2c8f9fa + checksum: 87d2e3e5eb93216d4ab36006e7b8c0bfad02f40b0a0f193f1d42754512cd3a9d8244152f1c69df5db2e135b3c4f1c10d0ed2f0881fe8a8c01af55465968174c1 languageName: node linkType: hard @@ -5405,9 +5093,9 @@ __metadata: linkType: hard "estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": - version: 5.2.0 - resolution: "estraverse@npm:5.2.0" - checksum: ec11b70d946bf5d7f76f91db38ef6f08109ac1b36cda293a26e678e58df4719f57f67b9ec87042afdd1f0267cee91865be3aa48d2161765a93defab5431be7b8 + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b languageName: node linkType: hard @@ -5649,11 +5337,11 @@ __metadata: linkType: hard "fastq@npm:^1.6.0": - version: 1.12.0 - resolution: "fastq@npm:1.12.0" + version: 1.13.0 + resolution: "fastq@npm:1.13.0" dependencies: reusify: ^1.0.4 - checksum: 486db511686b5ab28b1d87170f05c3fa6c8d769cde6861ed34cf3756cdf356950ba9c7dde0bc976ad4308b85aa9ef6214c685887f9f724be72c054a7becb642a + checksum: 32cf15c29afe622af187d12fc9cd93e160a0cb7c31a3bb6ace86b7dea3b28e7b72acde89c882663f307b2184e14782c6c664fa315973c03626c7d4bff070bb0b languageName: node linkType: hard @@ -5829,23 +5517,13 @@ __metadata: languageName: node linkType: hard -"follow-redirects@npm:^1.14.0": - version: 1.14.7 - resolution: "follow-redirects@npm:1.14.7" - peerDependenciesMeta: - debug: - optional: true - checksum: f6d03e5e30877431065bca0d1b2e3db93949eb799d368a5c07ea8a4b71205f0349a3f8f0191bf13a07c93885522834dca1dc8e527dc99a772c6911fba24edc5f - languageName: node - linkType: hard - -"follow-redirects@npm:^1.14.8, follow-redirects@npm:^1.5.1": - version: 1.14.9 - resolution: "follow-redirects@npm:1.14.9" +"follow-redirects@npm:^1.14.0, follow-redirects@npm:^1.14.8, follow-redirects@npm:^1.5.1": + version: 1.15.0 + resolution: "follow-redirects@npm:1.15.0" peerDependenciesMeta: debug: optional: true - checksum: f5982e0eb481818642492d3ca35a86989c98af1128b8e1a62911a3410621bc15d2b079e8170b35b19d3bdee770b73ed431a257ed86195af773771145baa57845 + checksum: eaec81c3e0ae57aae2422e38ad3539d0e7279b3a63f9681eeea319bb683dea67502c4e097136b8ce9721542b4e236e092b6b49e34e326cdd7733c274f0a3f378 languageName: node linkType: hard @@ -5912,13 +5590,13 @@ __metadata: linkType: hard "fs-extra@npm:^10.0.0": - version: 10.0.0 - resolution: "fs-extra@npm:10.0.0" + version: 10.1.0 + resolution: "fs-extra@npm:10.1.0" dependencies: graceful-fs: ^4.2.0 jsonfile: ^6.0.1 universalify: ^2.0.0 - checksum: 5285a3d8f34b917cf2b66af8c231a40c1623626e9d701a20051d3337be16c6d7cac94441c8b3732d47a92a2a027886ca93c69b6a4ae6aee3c89650d2a8880c0a + checksum: dc94ab37096f813cc3ca12f0f1b5ad6744dfed9ed21e953d72530d103cea193c2f81584a39e9dee1bea36de5ee66805678c0dddc048e8af1427ac19c00fffc50 languageName: node linkType: hard @@ -5973,6 +5651,16 @@ __metadata: languageName: node linkType: hard +"fsevents@npm:~2.3.2": + version: 2.3.2 + resolution: "fsevents@npm:2.3.2" + dependencies: + node-gyp: latest + checksum: 97ade64e75091afee5265e6956cb72ba34db7819b4c3e94c431d4be2b19b8bb7a2d4116da417950c3425f17c8fe693d25e20212cac583ac1521ad066b77ae31f + conditions: os=darwin + languageName: node + linkType: hard + "fsevents@patch:fsevents@^1.2.7#~builtin<compat/fsevents>": version: 1.2.13 resolution: "fsevents@patch:fsevents@npm%3A1.2.13#~builtin<compat/fsevents>::version=1.2.13&hash=18f3a7" @@ -5992,16 +5680,6 @@ __metadata: languageName: node linkType: hard -fsevents@~2.3.2: - version: 2.3.2 - resolution: "fsevents@npm:2.3.2" - dependencies: - node-gyp: latest - checksum: 97ade64e75091afee5265e6956cb72ba34db7819b4c3e94c431d4be2b19b8bb7a2d4116da417950c3425f17c8fe693d25e20212cac583ac1521ad066b77ae31f - conditions: os=darwin - languageName: node - linkType: hard - "function-bind@npm:^1.1.1": version: 1.1.1 resolution: "function-bind@npm:1.1.1" @@ -6016,36 +5694,19 @@ fsevents@~2.3.2: languageName: node linkType: hard -"gauge@npm:^4.0.0": - version: 4.0.0 - resolution: "gauge@npm:4.0.0" +"gauge@npm:^4.0.3": + version: 4.0.4 + resolution: "gauge@npm:4.0.4" dependencies: - ansi-regex: ^5.0.1 aproba: ^1.0.3 || ^2.0.0 - color-support: ^1.1.2 - console-control-strings: ^1.0.0 + color-support: ^1.1.3 + console-control-strings: ^1.1.0 has-unicode: ^2.0.1 - signal-exit: ^3.0.0 + signal-exit: ^3.0.7 string-width: ^4.2.3 strip-ansi: ^6.0.1 - wide-align: ^1.1.2 - checksum: 637b34c84f518defa89319dbef68211a24e9302182ad2a619e3be1be5b7dcf2a962c8359e889294af667440f4722e7e6e61671859e00bd8ec280a136ded89b25 - languageName: node - linkType: hard - -"gauge@npm:~2.7.3": - version: 2.7.4 - resolution: "gauge@npm:2.7.4" - dependencies: - aproba: ^1.0.3 - console-control-strings: ^1.0.0 - has-unicode: ^2.0.0 - object-assign: ^4.1.0 - signal-exit: ^3.0.0 - string-width: ^1.0.1 - strip-ansi: ^3.0.1 - wide-align: ^1.1.0 - checksum: a89b53cee65579b46832e050b5f3a79a832cc422c190de79c6b8e2e15296ab92faddde6ddf2d376875cbba2b043efa99b9e1ed8124e7365f61b04e3cee9d40ee + wide-align: ^1.1.5 + checksum: 788b6bfe52f1dd8e263cda800c26ac0ca2ff6de0b6eee2fe0d9e3abf15e149b651bd27bf5226be10e6e3edb5c4e5d5985a5a1a98137e7a892f75eff76467ad2d languageName: node linkType: hard @@ -6188,23 +5849,23 @@ fsevents@~2.3.2: languageName: node linkType: hard -"glob@npm:*, glob@npm:^7.1.1, glob@npm:^7.1.6, glob@npm:^7.2.0": - version: 7.2.0 - resolution: "glob@npm:7.2.0" +"glob@npm:*, glob@npm:^8.0.1": + version: 8.0.1 + resolution: "glob@npm:8.0.1" dependencies: fs.realpath: ^1.0.0 inflight: ^1.0.4 inherits: 2 - minimatch: ^3.0.4 + minimatch: ^5.0.1 once: ^1.3.0 path-is-absolute: ^1.0.0 - checksum: 78a8ea942331f08ed2e055cb5b9e40fe6f46f579d7fd3d694f3412fe5db23223d29b7fee1575440202e9a7ff9a72ab106a39fee39934c7bedafe5e5f8ae20134 + checksum: 7ac782f3ef1c08005884447479e68ceb0ad56997eb2003e1e9aefae71bad3cb48eb7c49190d3d6736f2ffcd8af4985d53a46831b3d5e0052cc5756822a38b61a languageName: node linkType: hard "glob@npm:^7.1.3, glob@npm:^7.1.4": - version: 7.1.7 - resolution: "glob@npm:7.1.7" + version: 7.2.0 + resolution: "glob@npm:7.2.0" dependencies: fs.realpath: ^1.0.0 inflight: ^1.0.4 @@ -6212,7 +5873,7 @@ fsevents@~2.3.2: minimatch: ^3.0.4 once: ^1.3.0 path-is-absolute: ^1.0.0 - checksum: b61f48973bbdcf5159997b0874a2165db572b368b931135832599875919c237fc05c12984e38fe828e69aa8a921eb0e8a4997266211c517c9cfaae8a93988bb8 + checksum: 78a8ea942331f08ed2e055cb5b9e40fe6f46f579d7fd3d694f3412fe5db23223d29b7fee1575440202e9a7ff9a72ab106a39fee39934c7bedafe5e5f8ae20134 languageName: node linkType: hard @@ -6224,11 +5885,11 @@ fsevents@~2.3.2: linkType: hard "globals@npm:^13.6.0, globals@npm:^13.9.0": - version: 13.12.1 - resolution: "globals@npm:13.12.1" + version: 13.13.0 + resolution: "globals@npm:13.13.0" dependencies: type-fest: ^0.20.2 - checksum: cf7877629c8f2a293b0a7d09d1dcce7f2d426ec2528600c481c5b3f3d070b0a120eb2499439ac0404990fb8a5742c0165b1bf1f52603364001ddc89bea3dda24 + checksum: c55ea8fd3afecb72567bac41605577e19e68476993dfb0ca4c49b86075af5f0ae3f0f5502525f69010f7c5ea5db6a1c540a80a4f80ebdfb2f686d87b0f05d7e9 languageName: node linkType: hard @@ -6281,17 +5942,10 @@ fsevents@~2.3.2: languageName: node linkType: hard -"graceful-fs@npm:*, graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.9": - version: 4.2.9 - resolution: "graceful-fs@npm:4.2.9" - checksum: 68ea4e07ff2c041ada184f9278b830375f8e0b75154e3f080af6b70f66172fabb4108d19b3863a96b53fc068a310b9b6493d86d1291acc5f3861eb4b79d26ad6 - languageName: node - linkType: hard - -"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6": - version: 4.2.8 - resolution: "graceful-fs@npm:4.2.8" - checksum: 5d224c8969ad0581d551dfabdb06882706b31af2561bd5e2034b4097e67cc27d05232849b8643866585fd0a41c7af152950f8776f4dd5579e9853733f31461c6 +"graceful-fs@npm:*, graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.10, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6": + version: 4.2.10 + resolution: "graceful-fs@npm:4.2.10" + checksum: 3f109d70ae123951905d85032ebeae3c2a5a7a997430df00ea30df0e3a6c60cf6689b109654d6fdacd28810a053348c4d14642da1d075049e6be1ba5216218da languageName: node linkType: hard @@ -6337,10 +5991,10 @@ fsevents@~2.3.2: languageName: node linkType: hard -"has-bigints@npm:^1.0.1": - version: 1.0.1 - resolution: "has-bigints@npm:1.0.1" - checksum: 44ab55868174470065d2e0f8f6def1c990d12b82162a8803c679699fa8a39f966e336f2a33c185092fe8aea7e8bf2e85f1c26add5f29d98f2318bd270096b183 +"has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": + version: 1.0.2 + resolution: "has-bigints@npm:1.0.2" + checksum: 390e31e7be7e5c6fe68b81babb73dfc35d413604d7ee5f56da101417027a4b4ce6a27e46eff97ad040c835b5d228676eae99a9b5c3bc0e23c8e81a49241ff45b languageName: node linkType: hard @@ -6365,10 +6019,19 @@ fsevents@~2.3.2: languageName: node linkType: hard -"has-symbols@npm:^1.0.1, has-symbols@npm:^1.0.2": - version: 1.0.2 - resolution: "has-symbols@npm:1.0.2" - checksum: 2309c426071731be792b5be43b3da6fb4ed7cbe8a9a6bcfca1862587709f01b33d575ce8f5c264c1eaad09fca2f9a8208c0a2be156232629daa2dd0c0740976b +"has-property-descriptors@npm:^1.0.0": + version: 1.0.0 + resolution: "has-property-descriptors@npm:1.0.0" + dependencies: + get-intrinsic: ^1.1.1 + checksum: a6d3f0a266d0294d972e354782e872e2fe1b6495b321e6ef678c9b7a06a40408a6891817350c62e752adced73a94ac903c54734fee05bf65b1905ee1368194bb + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.1, has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": + version: 1.0.3 + resolution: "has-symbols@npm:1.0.3" + checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410 languageName: node linkType: hard @@ -6381,7 +6044,7 @@ fsevents@~2.3.2: languageName: node linkType: hard -"has-unicode@npm:^2.0.0, has-unicode@npm:^2.0.1": +"has-unicode@npm:^2.0.1": version: 2.0.1 resolution: "has-unicode@npm:2.0.1" checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400 @@ -6498,12 +6161,12 @@ fsevents@~2.3.2: languageName: node linkType: hard -"hosted-git-info@npm:*, hosted-git-info@npm:^4.0.0, hosted-git-info@npm:^4.0.1": - version: 4.1.0 - resolution: "hosted-git-info@npm:4.1.0" +"hosted-git-info@npm:*, hosted-git-info@npm:^5.0.0": + version: 5.0.0 + resolution: "hosted-git-info@npm:5.0.0" dependencies: - lru-cache: ^6.0.0 - checksum: c3f87b3c2f7eb8c2748c8f49c0c2517c9a95f35d26f4bf54b2a8cba05d2e668f3753548b6ea366b18ec8dadb4e12066e19fa382a01496b0ffa0497eb23cbe461 + lru-cache: ^7.5.1 + checksum: 515e69463d123635f70d70656c5ec648951ffc1987f92a87cb4a038e1794bfed833cf87569b358b137ebbc75d992c073ed0408d420c9e5b717c2b4f0a291490c languageName: node linkType: hard @@ -6514,12 +6177,12 @@ fsevents@~2.3.2: languageName: node linkType: hard -"hosted-git-info@npm:^5.0.0": - version: 5.0.0 - resolution: "hosted-git-info@npm:5.0.0" +"hosted-git-info@npm:^4.0.0, hosted-git-info@npm:^4.0.1": + version: 4.1.0 + resolution: "hosted-git-info@npm:4.1.0" dependencies: - lru-cache: ^7.5.1 - checksum: 515e69463d123635f70d70656c5ec648951ffc1987f92a87cb4a038e1794bfed833cf87569b358b137ebbc75d992c073ed0408d420c9e5b717c2b4f0a291490c + lru-cache: ^6.0.0 + checksum: c3f87b3c2f7eb8c2748c8f49c0c2517c9a95f35d26f4bf54b2a8cba05d2e668f3753548b6ea366b18ec8dadb4e12066e19fa382a01496b0ffa0497eb23cbe461 languageName: node linkType: hard @@ -6556,17 +6219,6 @@ fsevents@~2.3.2: languageName: node linkType: hard -"http-proxy-agent@npm:^4.0.1": - version: 4.0.1 - resolution: "http-proxy-agent@npm:4.0.1" - dependencies: - "@tootallnate/once": 1 - agent-base: 6 - debug: 4 - checksum: c6a5da5a1929416b6bbdf77b1aca13888013fe7eb9d59fc292e25d18e041bb154a8dfada58e223fc7b76b9b2d155a87e92e608235201f77d34aa258707963a82 - languageName: node - linkType: hard - "http-proxy-agent@npm:^5.0.0": version: 5.0.0 resolution: "http-proxy-agent@npm:5.0.0" @@ -6614,12 +6266,12 @@ fsevents@~2.3.2: linkType: hard "https-proxy-agent@npm:^5.0.0": - version: 5.0.0 - resolution: "https-proxy-agent@npm:5.0.0" + version: 5.0.1 + resolution: "https-proxy-agent@npm:5.0.1" dependencies: agent-base: 6 debug: 4 - checksum: 165bfb090bd26d47693597661298006841ab733d0c7383a8cb2f17373387a94c903a3ac687090aa739de05e379ab6f868bae84ab4eac288ad85c328cd1ec9e53 + checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 languageName: node linkType: hard @@ -6671,12 +6323,12 @@ fsevents@~2.3.2: languageName: node linkType: hard -"ignore-walk@npm:^4.0.1": - version: 4.0.1 - resolution: "ignore-walk@npm:4.0.1" +"ignore-walk@npm:^5.0.1": + version: 5.0.1 + resolution: "ignore-walk@npm:5.0.1" dependencies: - minimatch: ^3.0.4 - checksum: 903cd5cb68d57b2e70fddb83d885aea55f137a44636254a29b08037797376d8d3e09d1c58935778f3a271bf6a2b41ecc54fc22260ac07190e09e1ec7253b49f3 + minimatch: ^5.0.1 + checksum: 1a4ef35174653a1aa6faab3d9f8781269166536aee36a04946f6e2b319b2475c1903a75ed42f04219274128242f49d0a10e20c4354ee60d9548e97031451150b languageName: node linkType: hard @@ -6687,20 +6339,13 @@ fsevents@~2.3.2: languageName: node linkType: hard -"ignore@npm:^5.0.5, ignore@npm:^5.2.0": +"ignore@npm:^5.0.5, ignore@npm:^5.1.8, ignore@npm:^5.2.0": version: 5.2.0 resolution: "ignore@npm:5.2.0" checksum: 6b1f926792d614f64c6c83da3a1f9c83f6196c2839aa41e1e32dd7b8d174cef2e329d75caabb62cb61ce9dc432f75e67d07d122a037312db7caa73166a1bdb77 languageName: node linkType: hard -"ignore@npm:^5.1.8": - version: 5.1.9 - resolution: "ignore@npm:5.1.9" - checksum: 6f6b2235f4e63648116c5814f76b2d3d63fae9c21b8a466862e865732f59e787c9938a9042f9457091db6f0d811508ea3c8c6a60f35bafc4ceea08bbe8f96fd5 - languageName: node - linkType: hard - "immutable@npm:^3.8.2": version: 3.8.2 resolution: "immutable@npm:3.8.2" @@ -6784,10 +6429,10 @@ fsevents@~2.3.2: languageName: node linkType: hard -"ini@npm:*, ini@npm:^2.0.0": - version: 2.0.0 - resolution: "ini@npm:2.0.0" - checksum: e7aadc5fb2e4aefc666d74ee2160c073995a4061556b1b5b4241ecb19ad609243b9cceafe91bae49c219519394bbd31512516cb22a3b1ca6e66d869e0447e84e +"ini@npm:*, ini@npm:^3.0.0": + version: 3.0.0 + resolution: "ini@npm:3.0.0" + checksum: e92b6b0835ac369e58c677e7faa8db6019ac667d7404887978fb86b181d658e50f1742ecbba7d81eb5ff917b3ae4d63a48e1ef3a9f8a0527bd7605fe1a9995d4 languageName: node linkType: hard @@ -6798,33 +6443,18 @@ fsevents@~2.3.2: languageName: node linkType: hard -"init-package-json@npm:*": - version: 2.0.5 - resolution: "init-package-json@npm:2.0.5" - dependencies: - npm-package-arg: ^8.1.5 - promzard: ^0.3.0 - read: ~1.0.1 - read-package-json: ^4.1.1 - semver: ^7.3.5 - validate-npm-package-license: ^3.0.4 - validate-npm-package-name: ^3.0.0 - checksum: cbd3e2e79156d6e8722699f571e509e0733dde31ac4cb58c0aadb63f7cef1a131037c6d549bd6af5757032a51252b1bdb86a70f68ed6c10f866f203e5fb4f9ba - languageName: node - linkType: hard - -"init-package-json@npm:^3.0.1": - version: 3.0.1 - resolution: "init-package-json@npm:3.0.1" +"init-package-json@npm:*, init-package-json@npm:^3.0.2": + version: 3.0.2 + resolution: "init-package-json@npm:3.0.2" dependencies: - npm-package-arg: ^9.0.0 + npm-package-arg: ^9.0.1 promzard: ^0.3.0 read: ^1.0.7 read-package-json: ^5.0.0 semver: ^7.3.5 validate-npm-package-license: ^3.0.4 - validate-npm-package-name: ^3.0.0 - checksum: b554ddb4833d511294ece4b5eb980d106316951207cb899df1e6583f38e67a182557b0bfe79ecc22033bc387eda1cd5b4771ef56534d9c21cdedbd998069145c + validate-npm-package-name: ^4.0.0 + checksum: e027f60e4a1564809eee790d5a842341c784888fd7c7ace5f9a34ea76224c0adb6f3ab3bf205cf1c9c877a6e1a76c68b00847a984139f60813125d7b42a23a13 languageName: node linkType: hard @@ -6981,20 +6611,11 @@ fsevents@~2.3.2: linkType: hard "is-core-module@npm:^2.5.0, is-core-module@npm:^2.8.1": - version: 2.8.1 - resolution: "is-core-module@npm:2.8.1" - dependencies: - has: ^1.0.3 - checksum: 418b7bc10768a73c41c7ef497e293719604007f88934a6ffc5f7c78702791b8528102fb4c9e56d006d69361549b3d9519440214a74aefc7e0b79e5e4411d377f - languageName: node - linkType: hard - -"is-core-module@npm:^2.8.0": - version: 2.8.0 - resolution: "is-core-module@npm:2.8.0" + version: 2.9.0 + resolution: "is-core-module@npm:2.9.0" dependencies: has: ^1.0.3 - checksum: f8b52714891e1a6c6577fcb8d5e057bab064a7a30954aab6beb5092e311473eb8da57afd334de4981dc32409ffca998412efc3a2edceb9e397cef6098d21dd91 + checksum: b27034318b4b462f1c8f1dfb1b32baecd651d891a4e2d1922135daeff4141dfced2b82b07aef83ef54275c4a3526aa38da859223664d0868ca24182badb784ce languageName: node linkType: hard @@ -7070,22 +6691,6 @@ fsevents@~2.3.2: languageName: node linkType: hard -"is-fullwidth-code-point@npm:^1.0.0": - version: 1.0.0 - resolution: "is-fullwidth-code-point@npm:1.0.0" - dependencies: - number-is-nan: ^1.0.0 - checksum: 4d46a7465a66a8aebcc5340d3b63a56602133874af576a9ca42c6f0f4bd787a743605771c5f246db77da96605fefeffb65fc1dbe862dcc7328f4b4d03edf5a57 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^2.0.0": - version: 2.0.0 - resolution: "is-fullwidth-code-point@npm:2.0.0" - checksum: eef9c6e15f68085fec19ff6a978a6f1b8f48018fd1265035552078ee945573594933b09bbd6f562553e2a241561439f1ef5339276eba68d272001343084cfab8 - languageName: node - linkType: hard - "is-fullwidth-code-point@npm:^3.0.0": version: 3.0.0 resolution: "is-fullwidth-code-point@npm:3.0.0" @@ -7109,16 +6714,7 @@ fsevents@~2.3.2: languageName: node linkType: hard -"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1": - version: 4.0.1 - resolution: "is-glob@npm:4.0.1" - dependencies: - is-extglob: ^2.1.1 - checksum: 84627cad11b4e745f5db5a163f32c47b711585a5ff6e14f8f8d026db87f4cdd3e2c95f6fa1f94ad22e469f36d819ae2814f03f9c668b164422ac3354a94672d3 - languageName: node - linkType: hard - -"is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": version: 4.0.3 resolution: "is-glob@npm:4.0.3" dependencies: @@ -7134,7 +6730,7 @@ fsevents@~2.3.2: languageName: node linkType: hard -"is-negative-zero@npm:^2.0.1": +"is-negative-zero@npm:^2.0.2": version: 2.0.2 resolution: "is-negative-zero@npm:2.0.2" checksum: f3232194c47a549da60c3d509c9a09be442507616b69454716692e37ae9f37c4dea264fb208ad0c9f3efd15a796a46b79df07c7e53c6227c32170608b809149a @@ -7142,11 +6738,11 @@ fsevents@~2.3.2: linkType: hard "is-number-object@npm:^1.0.4": - version: 1.0.6 - resolution: "is-number-object@npm:1.0.6" + version: 1.0.7 + resolution: "is-number-object@npm:1.0.7" dependencies: has-tostringtag: ^1.0.0 - checksum: c697704e8fc2027fc41cb81d29805de4e8b6dc9c3efee93741dbf126a8ecc8443fef85adbc581415ae7e55d325e51d0a942324ae35c829131748cce39cba55f3 + checksum: d1e8d01bb0a7134c74649c4e62da0c6118a0bfc6771ea3c560914d52a627873e6920dd0fd0ebc0e12ad2ff4687eac4c308f7e80320b973b2c8a2c8f97a7524f7 languageName: node linkType: hard @@ -7220,10 +6816,12 @@ fsevents@~2.3.2: languageName: node linkType: hard -"is-shared-array-buffer@npm:^1.0.1": - version: 1.0.1 - resolution: "is-shared-array-buffer@npm:1.0.1" - checksum: 2ffb92533e64e2876e6cfe6906871d28400b6f1a53130fe652ec8007bc0e5044d05e7af8e31bdc992fbba520bd92938cfbeedd0f286be92f250c7c76191c4d90 +"is-shared-array-buffer@npm:^1.0.2": + version: 1.0.2 + resolution: "is-shared-array-buffer@npm:1.0.2" + dependencies: + call-bind: ^1.0.2 + checksum: 9508929cf14fdc1afc9d61d723c6e8d34f5e117f0bffda4d97e7a5d88c3a8681f633a74f8e3ad1fe92d5113f9b921dc5ca44356492079612f9a247efbce7032a languageName: node linkType: hard @@ -7277,14 +6875,14 @@ fsevents@~2.3.2: languageName: node linkType: hard -"is-typedarray@npm:^1.0.0, is-typedarray@npm:~1.0.0": +"is-typedarray@npm:~1.0.0": version: 1.0.0 resolution: "is-typedarray@npm:1.0.0" checksum: 3508c6cd0a9ee2e0df2fa2e9baabcdc89e911c7bd5cf64604586697212feec525aa21050e48affb5ffc3df20f0f5d2e2cf79b08caa64e1ccc9578e251763aef7 languageName: node linkType: hard -"is-weakref@npm:^1.0.1": +"is-weakref@npm:^1.0.2": version: 1.0.2 resolution: "is-weakref@npm:1.0.2" dependencies: @@ -7381,9 +6979,9 @@ fsevents@~2.3.2: linkType: hard "jose@npm:^4.6.0": - version: 4.6.0 - resolution: "jose@npm:4.6.0" - checksum: 7f48cb030c9e8586e825ad5cc71e792f7b71b420afd3c45913e0719fd4abe6a756179c732604d42fbbb53c64b63f78818669599eeef11c988c0c34dd1178fe43 + version: 4.8.1 + resolution: "jose@npm:4.8.1" + checksum: c3e239ccbb07863c28250aedea3e734e4a3b26abc1cbf6acf333381db5ef31e5d1eeced791299076f13b24f41b4b463a7a1e4eaa0079ae0febf9bfd60acb555a languageName: node linkType: hard @@ -7435,7 +7033,7 @@ fsevents@~2.3.2: languageName: node linkType: hard -"json-buffer@npm:3.0.1": +"json-buffer@npm:3.0.1, json-buffer@npm:~3.0.1": version: 3.0.1 resolution: "json-buffer@npm:3.0.1" checksum: 9026b03edc2847eefa2e37646c579300a1f3a4586cfb62bf857832b60c852042d0d6ae55d1afb8926163fa54c2b01d83ae24705f34990348bdac6273a29d4581 @@ -7502,14 +7100,12 @@ fsevents@~2.3.2: languageName: node linkType: hard -"json5@npm:^2.1.2": - version: 2.2.0 - resolution: "json5@npm:2.2.0" - dependencies: - minimist: ^1.2.5 +"json5@npm:^2.2.1": + version: 2.2.1 + resolution: "json5@npm:2.2.1" bin: json5: lib/cli.js - checksum: e88fc5274bb58fc99547baa777886b069d2dd96d9cfc4490b305fd16d711dabd5979e35a4f90873cefbeb552e216b041a304fe56702bedba76e19bc7845f208d + checksum: 74b8a23b102a6f2bf2d224797ae553a75488b5adbaee9c9b6e5ab8b510a2fc6e38f876d4c77dea672d4014a44b2399e15f2051ac2b37b87f74c0c7602003543b languageName: node linkType: hard @@ -7583,26 +7179,27 @@ fsevents@~2.3.2: languageName: node linkType: hard -"just-diff-apply@npm:^4.0.1": - version: 4.0.1 - resolution: "just-diff-apply@npm:4.0.1" - checksum: fdb58c0c8da766943fb316158d823fe485058d6b31ec6c51f99076df76363fa1ca35d79fb23f53184bf5b7443ae470fe5f087b4a504e913a8f96474963907e2e +"just-diff-apply@npm:^5.2.0": + version: 5.2.0 + resolution: "just-diff-apply@npm:5.2.0" + checksum: 5e63562665f7b3b279d286f5cd3d73af0e0ffadbdc02cb2c43a50370ad1a614b557842938d157de904be69a4bc6b2187cee3257add1440fdf1e4814de691b0af languageName: node linkType: hard "just-diff@npm:^5.0.1": - version: 5.0.1 - resolution: "just-diff@npm:5.0.1" - checksum: efbdb652987ca109839dba385904ea152cc73ef4c165eebb4be0af261734cf91387e529fcd52aea5ba9567b4ef76c584ee6254ccf0030dc5d0ccdab3b890a085 + version: 5.0.2 + resolution: "just-diff@npm:5.0.2" + checksum: 1c7408432f53ff67ea4ce41adb5579c08a39f990956ddbf2e94f4161f3802a41179d7412538573972433ce9f50e371afdca019964e51cf500577bf1aa732b842 languageName: node linkType: hard "keyv@npm:^4.0.0": - version: 4.0.5 - resolution: "keyv@npm:4.0.5" + version: 4.2.2 + resolution: "keyv@npm:4.2.2" dependencies: + compress-brotli: ^1.3.6 json-buffer: 3.0.1 - checksum: 968ec062e66a660bd1c403b2932f602948ea76b17f8419bb04166491c1f186da1c3b39db4ccd1fdb6a19a4dcb374334455dd3ac31e13a70000c81e2daa866117 + checksum: 1d03674145339cb6d7509fd7791a2ea93c0a9b7ec10e475d621f4443b8bf877c21dc391ae1002dd1bade4f44e2093f850f1da81d08c03812b4592cd5ff028db7 languageName: node linkType: hard @@ -7665,84 +7262,37 @@ fsevents@~2.3.2: languageName: node linkType: hard -"libnpmaccess@npm:*": - version: 5.0.0 - resolution: "libnpmaccess@npm:5.0.0" - dependencies: - aproba: ^2.0.0 - minipass: ^3.1.1 - npm-package-arg: ^8.1.2 - npm-registry-fetch: ^11.0.0 - checksum: d6eb8bc053ff5252c38808afd9bcd08241db7a19b0817f4c0671bf29b21c82e482a2ff7851e5e7c35c72db714bbb8a1c5051594473422bfb67843b1b94695d79 - languageName: node - linkType: hard - -"libnpmaccess@npm:^6.0.2": - version: 6.0.2 - resolution: "libnpmaccess@npm:6.0.2" +"libnpmaccess@npm:*, libnpmaccess@npm:^6.0.2": + version: 6.0.3 + resolution: "libnpmaccess@npm:6.0.3" dependencies: aproba: ^2.0.0 minipass: ^3.1.1 npm-package-arg: ^9.0.1 npm-registry-fetch: ^13.0.0 - checksum: ffc910cda1ca39c509a3e89455d3cc70f3059cea8d7624b46acfa7f42f3ae20c446246dd5176b50c536e73fcf81f29b49b6dc2182b323a875745435dc65c10e4 - languageName: node - linkType: hard - -"libnpmdiff@npm:*": - version: 3.0.0 - resolution: "libnpmdiff@npm:3.0.0" - dependencies: - "@npmcli/disparity-colors": ^1.0.1 - "@npmcli/installed-package-contents": ^1.0.7 - binary-extensions: ^2.2.0 - diff: ^5.0.0 - minimatch: ^3.0.4 - npm-package-arg: ^8.1.4 - pacote: ^12.0.0 - tar: ^6.1.0 - checksum: 43123aee687e9c8a0db0ba40cd7fe10fbd351cf1952b71c377f833d019cf6dcc777a08af52a2654cfba49c6f2d079ce40ffb72342128d229b580faf290334177 + checksum: 4a437390d52bd5e6145164210cfab4cdbc824c4f4a62e11cf186cad9c159a7c8f0c1b6e37346db1cc675bcdf1508e92ed64d47ac1a9bcf838a670bb4741a50c9 languageName: node linkType: hard -"libnpmdiff@npm:^4.0.2": - version: 4.0.2 - resolution: "libnpmdiff@npm:4.0.2" +"libnpmdiff@npm:*, libnpmdiff@npm:^4.0.2": + version: 4.0.3 + resolution: "libnpmdiff@npm:4.0.3" dependencies: - "@npmcli/disparity-colors": ^1.0.1 + "@npmcli/disparity-colors": ^2.0.0 "@npmcli/installed-package-contents": ^1.0.7 binary-extensions: ^2.2.0 diff: ^5.0.0 - minimatch: ^3.0.4 + minimatch: ^5.0.1 npm-package-arg: ^9.0.1 pacote: ^13.0.5 tar: ^6.1.0 - checksum: 85843bff4ace753494096c85fc4e8e52ad9d1370cb6e274f2eb814d70a36fce33c99493dd2a2a8f60f2b65aef244fe040d10a85d7d9d7f9853c90921e95a647a + checksum: 415a8d40f2d746b1d66f155f818b5581c510d975201250f6d1e4d94888905a660b513a87ca01a59994b5afa78a1def4ebbfce35542b992927cdbfc286fe5b6ae languageName: node linkType: hard -"libnpmexec@npm:*": - version: 3.0.2 - resolution: "libnpmexec@npm:3.0.2" - dependencies: - "@npmcli/arborist": ^4.0.0 - "@npmcli/ci-detect": ^1.3.0 - "@npmcli/run-script": ^2.0.0 - chalk: ^4.1.0 - mkdirp-infer-owner: ^2.0.0 - npm-package-arg: ^8.1.2 - pacote: ^12.0.0 - proc-log: ^1.0.0 - read: ^1.0.7 - read-package-json-fast: ^2.0.2 - walk-up-path: ^1.0.0 - checksum: 997257242ec5f39fd791f4ad8f2099c3cf992b0afec0f464803c91a4756df70a6618115a4299b005b053ff36b1d03f0d4a5e5b1fd6d1cb4af09c6b73c8773952 - languageName: node - linkType: hard - -"libnpmexec@npm:^4.0.2": - version: 4.0.2 - resolution: "libnpmexec@npm:4.0.2" +"libnpmexec@npm:*, libnpmexec@npm:^4.0.2": + version: 4.0.5 + resolution: "libnpmexec@npm:4.0.5" dependencies: "@npmcli/arborist": ^5.0.0 "@npmcli/ci-detect": ^2.0.0 @@ -7750,184 +7300,98 @@ fsevents@~2.3.2: chalk: ^4.1.0 mkdirp-infer-owner: ^2.0.0 npm-package-arg: ^9.0.1 - npmlog: ^6.0.1 + npmlog: ^6.0.2 pacote: ^13.0.5 proc-log: ^2.0.0 read: ^1.0.7 read-package-json-fast: ^2.0.2 walk-up-path: ^1.0.0 - checksum: dfa657c94a2f29d79e1805ff3d6a1821f8433132a7a9815c082e6baca4532c97dbcb1c128231f0a9ef2c87b5e3963c2be64bcd898b70cff8a2eea7aca7f585f2 - languageName: node - linkType: hard - -"libnpmfund@npm:*": - version: 2.0.2 - resolution: "libnpmfund@npm:2.0.2" - dependencies: - "@npmcli/arborist": ^4.0.0 - checksum: 833461f2b1c888489fbe888d015bfbd91f5086c2111f9e7e4f52ad33d9b98cba8e994baa837f4ae2c1f5ddc2226b7760ba665676958e0ca4973549b49d6f2fec + checksum: 46c248211a7a3534e1e9a3eaac5fab9d8ecc59828508f04eec8862a02d281d72e47bd8102b18e06526b1bed3905759640b410cda9a56321a0a8e04a69824766f languageName: node linkType: hard -"libnpmfund@npm:^3.0.1": - version: 3.0.1 - resolution: "libnpmfund@npm:3.0.1" +"libnpmfund@npm:*, libnpmfund@npm:^3.0.1": + version: 3.0.2 + resolution: "libnpmfund@npm:3.0.2" dependencies: "@npmcli/arborist": ^5.0.0 - checksum: e29b1eba7899edfc7a751336dc4b3041cabea0a2905825c3e15921326fd2eeb1a2e774b01e4555e88bd292b70b6b8ffcea0ecb1a2a60acdcdf7594a419c88a29 + checksum: 9c25bed2c5207007a509f0dff97d6d9712c0648b58bb96617b652e6803d14252203751a83298c257446e8e7b58556c9b519b5b0d5ac9a6d29453576aeb9ee20e languageName: node linkType: hard -"libnpmhook@npm:*": - version: 7.0.0 - resolution: "libnpmhook@npm:7.0.0" - dependencies: - aproba: ^2.0.0 - npm-registry-fetch: ^11.0.0 - checksum: 9831fc2dc3d2fac4c7e1400623d691bed169f5e2fa3376077aff4af05d08b400604dcd9584bb07d2a965bdcb1aacb3772e19e4de7e035088d980edd87eca64dc - languageName: node - linkType: hard - -"libnpmhook@npm:^8.0.2": - version: 8.0.2 - resolution: "libnpmhook@npm:8.0.2" +"libnpmhook@npm:*, libnpmhook@npm:^8.0.2": + version: 8.0.3 + resolution: "libnpmhook@npm:8.0.3" dependencies: aproba: ^2.0.0 npm-registry-fetch: ^13.0.0 - checksum: 18299d0f6f4b2077bc976aa8f7b2766c0b76ea9d780f9e5a6c79c9b76cd707f9899ddce3e010a73709a832a15391c01a9382c2a8d2acd93ac28ab1dc8ab69634 - languageName: node - linkType: hard - -"libnpmorg@npm:*": - version: 3.0.0 - resolution: "libnpmorg@npm:3.0.0" - dependencies: - aproba: ^2.0.0 - npm-registry-fetch: ^11.0.0 - checksum: a180a73b8548530833779c9ea8f83aca3e7f8dfe722fb8e47e8b35f4cc1c35d8aed5ce2005d3be6dac89cd8cf43de022a8580e13bc220b14646ca047dc112b22 + checksum: 99d031d102d62a78672a94965208c2716a0b1d9ca413f7f45dc55b571f6b77f8ac293810fd8dd3445a6196c92a2219095f85ce430bb82c5ce200e7e0e1a83064 languageName: node linkType: hard -"libnpmorg@npm:^4.0.2": - version: 4.0.2 - resolution: "libnpmorg@npm:4.0.2" +"libnpmorg@npm:*, libnpmorg@npm:^4.0.2": + version: 4.0.3 + resolution: "libnpmorg@npm:4.0.3" dependencies: aproba: ^2.0.0 npm-registry-fetch: ^13.0.0 - checksum: afc122c9c10341b9e934dd3e587157aabaab462debaf6b56928c9a6adf1250b22804499a54a81fed2d978d499bab918528fe24a782f2547b2fba146c8e4141db - languageName: node - linkType: hard - -"libnpmpack@npm:*": - version: 3.0.1 - resolution: "libnpmpack@npm:3.0.1" - dependencies: - "@npmcli/run-script": ^2.0.0 - npm-package-arg: ^8.1.0 - pacote: ^12.0.0 - checksum: c6d206a128be9c95509cbe9098924ca26ac4fad48dc9672f01f834d37422244a71092611deb4195a03baae48291c66809fecb60950c21b2f821d10035c71a909 + checksum: 6b54c8f8216b0d98dda2fdedd8a38fbe36f5f98da94c3613efc00789bfce334b2996037f0a0839af37d5d2dc52378ca8fdae5dee932202d8d2235d05b4563861 languageName: node linkType: hard -"libnpmpack@npm:^4.0.2": - version: 4.0.2 - resolution: "libnpmpack@npm:4.0.2" +"libnpmpack@npm:*, libnpmpack@npm:^4.0.2": + version: 4.0.3 + resolution: "libnpmpack@npm:4.0.3" dependencies: "@npmcli/run-script": ^3.0.0 npm-package-arg: ^9.0.1 pacote: ^13.0.5 - checksum: 401286a540189535bc7b6c37334260c54460d34651c51efa8329122135a69979733e250f8e8e8543c1533536f013d66d3234f6ab7e8c067b46b1398b29e8b263 - languageName: node - linkType: hard - -"libnpmpublish@npm:*": - version: 5.0.0 - resolution: "libnpmpublish@npm:5.0.0" - dependencies: - normalize-package-data: ^3.0.2 - npm-package-arg: ^8.1.2 - npm-registry-fetch: ^11.0.0 - semver: ^7.1.3 - ssri: ^8.0.1 - checksum: 172eaefab2d2ebc4e0516d24f12d04914dbad2dbaeadeabd7e168c8b80f0638b787c4d1921d0ce5fe83dc6966a6f36e72c10f054cef57eb0d67fe13827426db6 + checksum: 41fdc65e2cf78a85f32bf4ef18de7941827a668c9865d59d02dbb4508d5c0e27bc0c1c59f450f9c7e1297c42ea902713f4b4697837fcf5ed002f04056a224bff languageName: node linkType: hard -"libnpmpublish@npm:^6.0.2": - version: 6.0.2 - resolution: "libnpmpublish@npm:6.0.2" +"libnpmpublish@npm:*, libnpmpublish@npm:^6.0.2": + version: 6.0.4 + resolution: "libnpmpublish@npm:6.0.4" dependencies: normalize-package-data: ^4.0.0 npm-package-arg: ^9.0.1 npm-registry-fetch: ^13.0.0 - semver: ^7.1.3 - ssri: ^8.0.1 - checksum: 6b8c8dee06f3ba184d6afbc2e8f4a345e89f23b3417e78372b562a245588d058aa600ea52ac3eaaeb6f390169cc27caa53c4cc8aca69727b40f07c441144632f - languageName: node - linkType: hard - -"libnpmsearch@npm:*": - version: 4.0.0 - resolution: "libnpmsearch@npm:4.0.0" - dependencies: - npm-registry-fetch: ^11.0.0 - checksum: bcb9e07090e69a90e76a59c1e6c60d7de949c41a83af5a4a452e79eb051de2dd174d226d7d2f675caf505344e6a514785ef015d939703ea6f620ded7ad86f3c1 + semver: ^7.3.7 + ssri: ^9.0.0 + checksum: d653e0d9be0b01011c020f8252f480ca68105b56fde575a6c4fda650f6b5ff33a51fda43897ba817d2955579cc096910561e60e26628c59f5ac2d031157551d1 languageName: node linkType: hard -"libnpmsearch@npm:^5.0.2": - version: 5.0.2 - resolution: "libnpmsearch@npm:5.0.2" +"libnpmsearch@npm:*, libnpmsearch@npm:^5.0.2": + version: 5.0.3 + resolution: "libnpmsearch@npm:5.0.3" dependencies: npm-registry-fetch: ^13.0.0 - checksum: 984012a5c1504fdefbc9609ea86825efd91dbe525a5bd6ff2a54a06b3282358add01662b9e3771bee2a7f76a9fd1aef14bee7de3604b81677f6f32b8ea473228 + checksum: c346d1656bfa46c52e25d71d44d2127961c1dd87d1cc99eabffcd4d6593fbd59071047bb0d28323f914387e3ccf9a8ed8e249f8ca563a2e70d3c5be954707442 languageName: node linkType: hard -"libnpmteam@npm:*": - version: 3.0.0 - resolution: "libnpmteam@npm:3.0.0" - dependencies: - aproba: ^2.0.0 - npm-registry-fetch: ^11.0.0 - checksum: e425e2dddaabed7f052ae7226311ab63d109ad03cd767b3cfd1abc2aec468b507fdef27df4eb42444cd34fb591c911cbbf745de3ae0fe1533bc131af327eed18 - languageName: node - linkType: hard - -"libnpmteam@npm:^4.0.2": - version: 4.0.2 - resolution: "libnpmteam@npm:4.0.2" +"libnpmteam@npm:*, libnpmteam@npm:^4.0.2": + version: 4.0.3 + resolution: "libnpmteam@npm:4.0.3" dependencies: aproba: ^2.0.0 npm-registry-fetch: ^13.0.0 - checksum: 13698ffce7b5e2a74cd2b71246bea9d8f0daa4b463eaa7d8c774462ac51f62e95df8698fd91d0f762566a9c652a67cbfe79bf9428408048e8494edbbda490d3c + checksum: 0c2a1fd55ade169d0d623cacfbd01fc420fb37cd157947eeda8a2be5affbff71069912c04a896c4a69569e23c16b0aa101a6cbaf4b07264514519cb7061569fb languageName: node linkType: hard -"libnpmversion@npm:*": - version: 2.0.2 - resolution: "libnpmversion@npm:2.0.2" - dependencies: - "@npmcli/git": ^2.0.7 - "@npmcli/run-script": ^2.0.0 - json-parse-even-better-errors: ^2.3.1 - semver: ^7.3.5 - stringify-package: ^1.0.1 - checksum: 515cfe798692abcc2ebcccc3d6e622f5358a22d77b8170f9a7dddfbacfbb1ec8e890544e04605eb2de2815439c5fd35b18775040e2d64dabb085431ed64efc49 - languageName: node - linkType: hard - -"libnpmversion@npm:^3.0.1": - version: 3.0.1 - resolution: "libnpmversion@npm:3.0.1" +"libnpmversion@npm:*, libnpmversion@npm:^3.0.1": + version: 3.0.4 + resolution: "libnpmversion@npm:3.0.4" dependencies: "@npmcli/git": ^3.0.0 "@npmcli/run-script": ^3.0.0 json-parse-even-better-errors: ^2.3.1 proc-log: ^2.0.0 - semver: ^7.3.5 - stringify-package: ^1.0.1 - checksum: ab3e09f7037e40552e88611234fdd6f2b3829f3729344578474f9444a4bd9aa39ecb29472302aa45813e50ae25435ab18357294d93c1f116bcd09778e4c1f984 + semver: ^7.3.7 + checksum: ac0820826ffb1efec4e34813b9f567975b9a580b788ddcfd13e45b42468612001b61bc411b789b0fc611d4d9e61d0a4083b38660342a4fd4a85e3cc7f37054ac languageName: node linkType: hard @@ -7946,8 +7410,8 @@ fsevents@~2.3.2: linkType: hard "lint-staged@npm:^12.3.5": - version: 12.3.7 - resolution: "lint-staged@npm:12.3.7" + version: 12.4.1 + resolution: "lint-staged@npm:12.4.1" dependencies: cli-truncate: ^3.1.0 colorette: ^2.0.16 @@ -7965,7 +7429,7 @@ fsevents@~2.3.2: yaml: ^1.10.2 bin: lint-staged: bin/lint-staged.js - checksum: b595097556880eb2ab7ce2cf105047f6f22525ccfd608fbdc63ab243259aa36a26949576fadff673748fb885e7cb37ad3f4471d964ad54c1205d57a58999ba24 + checksum: b57183b537064cda6caef6679918bf271903145f7c28d09567e918b8b13094048b579f8df808ea590dbd7ea2ec332327c5e372cf3d77e85b7b0254f6541ce4c3 languageName: node linkType: hard @@ -8194,10 +7658,10 @@ fsevents@~2.3.2: languageName: node linkType: hard -"lru-cache@npm:^7.3.1, lru-cache@npm:^7.5.1, lru-cache@npm:^7.7.1": - version: 7.7.1 - resolution: "lru-cache@npm:7.7.1" - checksum: f362c5a2cfa8ad6fe557ec43dc1b7a9695cce84a5652a43ff813609f782f5da576631e7dfad41878bf19a7a69438f38375178635ee80de269aa314280ca2f59e +"lru-cache@npm:^7.4.4, lru-cache@npm:^7.5.1, lru-cache@npm:^7.7.1": + version: 7.9.0 + resolution: "lru-cache@npm:7.9.0" + checksum: c91a293a103d11ea4f07de4122ba4f73d8203d0de51852fb612b1764296aebf623a3e11dddef1b3aefdc8d71af97d52b222dad5459dcb967713bbab9a19fed7d languageName: node linkType: hard @@ -8210,6 +7674,15 @@ fsevents@~2.3.2: languageName: node linkType: hard +"magic-string@npm:^0.26.1": + version: 0.26.1 + resolution: "magic-string@npm:0.26.1" + dependencies: + sourcemap-codec: ^1.4.8 + checksum: 23f21f5734346ddfbabd7b9834e3ecda3521e3e1db81166c1513b45b729489bbed1eafa8cd052c7db7fdc7c68ebc5c03bc00dd5a23697edda15dbecaf8c98397 + languageName: node + linkType: hard + "make-dir@npm:^2.0.0": version: 2.1.0 resolution: "make-dir@npm:2.1.0" @@ -8220,33 +7693,9 @@ fsevents@~2.3.2: languageName: node linkType: hard -"make-fetch-happen@npm:*, make-fetch-happen@npm:^9.0.1, make-fetch-happen@npm:^9.1.0": - version: 9.1.0 - resolution: "make-fetch-happen@npm:9.1.0" - dependencies: - agentkeepalive: ^4.1.3 - cacache: ^15.2.0 - http-cache-semantics: ^4.1.0 - http-proxy-agent: ^4.0.1 - https-proxy-agent: ^5.0.0 - is-lambda: ^1.0.1 - lru-cache: ^6.0.0 - minipass: ^3.1.3 - minipass-collect: ^1.0.2 - minipass-fetch: ^1.3.2 - minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.4 - negotiator: ^0.6.2 - promise-retry: ^2.0.1 - socks-proxy-agent: ^6.0.0 - ssri: ^8.0.0 - checksum: 0eb371c85fdd0b1584fcfdf3dc3c62395761b3c14658be02620c310305a9a7ecf1617a5e6fb30c1d081c5c8aaf177fa133ee225024313afabb7aa6a10f1e3d04 - languageName: node - linkType: hard - -"make-fetch-happen@npm:^10.0.3, make-fetch-happen@npm:^10.0.6": - version: 10.1.0 - resolution: "make-fetch-happen@npm:10.1.0" +"make-fetch-happen@npm:*, make-fetch-happen@npm:^10.0.3, make-fetch-happen@npm:^10.0.6, make-fetch-happen@npm:^10.1.2": + version: 10.1.2 + resolution: "make-fetch-happen@npm:10.1.2" dependencies: agentkeepalive: ^4.2.1 cacache: ^16.0.2 @@ -8263,31 +7712,8 @@ fsevents@~2.3.2: negotiator: ^0.6.3 promise-retry: ^2.0.1 socks-proxy-agent: ^6.1.1 - ssri: ^8.0.1 - checksum: fae1c2f255f6467bf6731344c2c04dd0e1f1899d8ae4698d98e2c86131ba899a418746ebc564493b85d1651d43c93b49f7825a2773edda4285a1c4c5e5ba9168 - languageName: node - linkType: hard - -"make-fetch-happen@npm:^8.0.14": - version: 8.0.14 - resolution: "make-fetch-happen@npm:8.0.14" - dependencies: - agentkeepalive: ^4.1.3 - cacache: ^15.0.5 - http-cache-semantics: ^4.1.0 - http-proxy-agent: ^4.0.1 - https-proxy-agent: ^5.0.0 - is-lambda: ^1.0.1 - lru-cache: ^6.0.0 - minipass: ^3.1.3 - minipass-collect: ^1.0.2 - minipass-fetch: ^1.3.2 - minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.4 - promise-retry: ^2.0.1 - socks-proxy-agent: ^5.0.0 - ssri: ^8.0.0 - checksum: 326fefde1aec1f1314e548be74baaaa322208718d1b51c9688a326f73dea70f57767b4f5423230e39408cfe7c6dcf7adcf86ca4798c919c3ea78f54532910434 + ssri: ^9.0.0 + checksum: 42825d119a7e4f5b1a8e7048a86d328cd36bb1ff875d155ce7079d9a0afdd310c198fb310096af358cfa9ecdf643cecf960380686792457dccb36e17efe89eb0 languageName: node linkType: hard @@ -8338,11 +7764,11 @@ fsevents@~2.3.2: linkType: hard "marked@npm:^4.0.10": - version: 4.0.12 - resolution: "marked@npm:4.0.12" + version: 4.0.15 + resolution: "marked@npm:4.0.15" bin: marked: bin/marked.js - checksum: 7575117f85a8986652f3ac8b8a7b95056c4c5fce01a1fc76dc4c7960412cb4c9bd9da8133487159b6b3ff84f52b543dfe9a36f826a5f358892b5ec4b6824f192 + checksum: 8992c37669b872846a226f90dc5a8fa1e5d56bba6e32fa36270fd3d327dd9e11fedc5b47b68de611dcdce1573d30fbadf61bf23f86c1a679e5385424d7b9d9f3 languageName: node linkType: hard @@ -8452,13 +7878,13 @@ fsevents@~2.3.2: languageName: node linkType: hard -"micromatch@npm:^4.0.0, micromatch@npm:^4.0.2, micromatch@npm:^4.0.4": - version: 4.0.4 - resolution: "micromatch@npm:4.0.4" +"micromatch@npm:^4.0.0, micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5": + version: 4.0.5 + resolution: "micromatch@npm:4.0.5" dependencies: - braces: ^3.0.1 - picomatch: ^2.2.3 - checksum: ef3d1c88e79e0a68b0e94a03137676f3324ac18a908c245a9e5936f838079fcc108ac7170a5fadc265a9c2596963462e402841406bda1a4bb7b68805601d631c + braces: ^3.0.2 + picomatch: ^2.3.1 + checksum: 02a17b671c06e8fefeeb6ef996119c1e597c942e632a21ef589154f23898c9c6a9858526246abb14f8bca6e77734aa9dcf65476fca47cedfb80d9577d52843fc languageName: node linkType: hard @@ -8474,19 +7900,19 @@ fsevents@~2.3.2: languageName: node linkType: hard -"mime-db@npm:1.51.0": - version: 1.51.0 - resolution: "mime-db@npm:1.51.0" - checksum: 613b1ac9d6e725cc24444600b124a7f1ce6c60b1baa654f39a3e260d0995a6dffc5693190217e271af7e2a5612dae19f2a73f3e316707d797a7391165f7ef423 +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f languageName: node linkType: hard "mime-types@npm:^2.1.12, mime-types@npm:~2.1.19": - version: 2.1.34 - resolution: "mime-types@npm:2.1.34" + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" dependencies: - mime-db: 1.51.0 - checksum: 67013de9e9d6799bde6d669d18785b7e18bcd212e710d3e04a4727f92f67a8ad4e74aee24be28b685adb794944814bde649119b58ee3282ffdbee58f9278d9f3 + mime-db: 1.52.0 + checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836 languageName: node linkType: hard @@ -8548,12 +7974,12 @@ fsevents@~2.3.2: languageName: node linkType: hard -"minimatch@npm:^3.0.4": - version: 3.0.4 - resolution: "minimatch@npm:3.0.4" +"minimatch@npm:^3.0.4, minimatch@npm:^3.1.2": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" dependencies: brace-expansion: ^1.1.7 - checksum: 66ac295f8a7b59788000ea3749938b0970344c841750abd96694f80269b926ebcafad3deeb3f1da2522978b119e6ae3a5869b63b13a7859a456b3408bd18a078 + checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a languageName: node linkType: hard @@ -8577,14 +8003,7 @@ fsevents@~2.3.2: languageName: node linkType: hard -"minimist@npm:^1.2.0, minimist@npm:^1.2.5": - version: 1.2.5 - resolution: "minimist@npm:1.2.5" - checksum: 86706ce5b36c16bfc35c5fe3dbb01d5acdc9a22f2b6cc810b6680656a1d2c0e44a0159c9a3ba51fb072bb5c203e49e10b51dcd0eec39c481f4c42086719bae52 - languageName: node - linkType: hard - -"minimist@npm:^1.2.6": +"minimist@npm:^1.2.0, minimist@npm:^1.2.5, minimist@npm:^1.2.6": version: 1.2.6 resolution: "minimist@npm:1.2.6" checksum: d15428cd1e11eb14e1233bcfb88ae07ed7a147de251441d61158619dfb32c4d7e9061d09cab4825fdee18ecd6fce323228c8c47b5ba7cd20af378ca4048fb3fb @@ -8600,21 +8019,6 @@ fsevents@~2.3.2: languageName: node linkType: hard -"minipass-fetch@npm:^1.3.0, minipass-fetch@npm:^1.3.2": - version: 1.4.1 - resolution: "minipass-fetch@npm:1.4.1" - dependencies: - encoding: ^0.1.12 - minipass: ^3.1.0 - minipass-sized: ^1.0.3 - minizlib: ^2.0.0 - dependenciesMeta: - encoding: - optional: true - checksum: ec93697bdb62129c4e6c0104138e681e30efef8c15d9429dd172f776f83898471bc76521b539ff913248cc2aa6d2b37b652c993504a51cc53282563640f29216 - languageName: node - linkType: hard - "minipass-fetch@npm:^2.0.3": version: 2.1.0 resolution: "minipass-fetch@npm:2.1.0" @@ -8649,7 +8053,7 @@ fsevents@~2.3.2: languageName: node linkType: hard -"minipass-pipeline@npm:*, minipass-pipeline@npm:^1.2.2, minipass-pipeline@npm:^1.2.4": +"minipass-pipeline@npm:*, minipass-pipeline@npm:^1.2.4": version: 1.2.4 resolution: "minipass-pipeline@npm:1.2.4" dependencies: @@ -8667,7 +8071,7 @@ fsevents@~2.3.2: languageName: node linkType: hard -"minipass@npm:*, minipass@npm:^3.1.6": +"minipass@npm:*, minipass@npm:^3.0.0, minipass@npm:^3.1.1, minipass@npm:^3.1.6": version: 3.1.6 resolution: "minipass@npm:3.1.6" dependencies: @@ -8676,16 +8080,7 @@ fsevents@~2.3.2: languageName: node linkType: hard -"minipass@npm:^3.0.0, minipass@npm:^3.1.0, minipass@npm:^3.1.1, minipass@npm:^3.1.3": - version: 3.1.3 - resolution: "minipass@npm:3.1.3" - dependencies: - yallist: ^4.0.0 - checksum: 74b623c1f996caafa66772301b66a1b634b20270f0d1a731ef86195d5a1a5f9984a773a1e88a6cecfd264d6c471c4c0fc8574cd96488f01c8f74c0b600021e55 - languageName: node - linkType: hard - -"minizlib@npm:^2.0.0, minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": +"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": version: 2.1.2 resolution: "minizlib@npm:2.1.2" dependencies: @@ -8744,13 +8139,13 @@ fsevents@~2.3.2: linkType: hard "mkdirp@npm:^0.5.1, mkdirp@npm:^0.5.3": - version: 0.5.5 - resolution: "mkdirp@npm:0.5.5" + version: 0.5.6 + resolution: "mkdirp@npm:0.5.6" dependencies: - minimist: ^1.2.5 + minimist: ^1.2.6 bin: mkdirp: bin/cmd.js - checksum: 3bce20ea525f9477befe458ab85284b0b66c8dc3812f94155af07c827175948cdd8114852ac6c6d82009b13c1048c37f6d98743eb019651ee25c39acc8aabe7d + checksum: 0c91b721bb12c3f9af4b77ebf73604baf350e64d80df91754dc509491ae93bf238581e59c7188360cec7cb62fc4100959245a42cfe01834efedc5e9d068376c2 languageName: node linkType: hard @@ -8762,9 +8157,9 @@ fsevents@~2.3.2: linkType: hard "moment@npm:^2.29.1": - version: 2.29.1 - resolution: "moment@npm:2.29.1" - checksum: 1e14d5f422a2687996be11dd2d50c8de3bd577c4a4ca79ba5d02c397242a933e5b941655de6c8cb90ac18f01cc4127e55b4a12ae3c527a6c0a274e455979345e + version: 2.29.3 + resolution: "moment@npm:2.29.3" + checksum: 2e780e36d9a1823c08a1b6313cbb08bd01ecbb2a9062095820a34f42c878991ccba53abaa6abb103fd5c01e763724f295162a8c50b7e95b4f1c992ef0772d3f0 languageName: node linkType: hard @@ -8811,12 +8206,12 @@ fsevents@~2.3.2: linkType: hard "n3@npm:^1.6.3": - version: 1.15.0 - resolution: "n3@npm:1.15.0" + version: 1.16.1 + resolution: "n3@npm:1.16.1" dependencies: queue-microtask: ^1.1.2 readable-stream: ^3.6.0 - checksum: 0e2bb4081c20e9c12dda4d696013925e31f4dbfc9fb38dbfd5b2ab9c7a9650da95c2aa617e67d22e6a8d2d1298179450b8e01c7f7ab67e0243c1c97ee0fb6389 + checksum: 97519b77a57e5f019bc2bd52ab8e9304d0f35d9d2cf847870e1dcf9bd2453566c6373ec697377df6b05defad996b95f3a00df30914a707839dd1d1365387cbb8 languageName: node linkType: hard @@ -8829,12 +8224,12 @@ fsevents@~2.3.2: languageName: node linkType: hard -"nanoid@npm:^3.3.1": - version: 3.3.1 - resolution: "nanoid@npm:3.3.1" +"nanoid@npm:^3.3.3": + version: 3.3.4 + resolution: "nanoid@npm:3.3.4" bin: nanoid: bin/nanoid.cjs - checksum: 4ef0969e1bbe866fc223eb32276cbccb0961900bfe79104fa5abe34361979dead8d0e061410a5c03bc3d47455685adf32c09d6f27790f4a6898fb51f7df7ec86 + checksum: 2fddd6dee994b7676f008d3ffa4ab16035a754f4bb586c61df5a22cf8c8c94017aadd360368f47d653829e0569a92b129979152ff97af23a558331e47e37cd9c languageName: node linkType: hard @@ -8864,13 +8259,6 @@ fsevents@~2.3.2: languageName: node linkType: hard -"negotiator@npm:^0.6.2": - version: 0.6.2 - resolution: "negotiator@npm:0.6.2" - checksum: dfddaff6c06792f1c4c3809e29a427b8daef8cd437c83b08dd51d7ee11bbd1c29d9512d66b801144d6c98e910ffd8723f2432e0cbf8b18d41d2a09599c975ab3 - languageName: node - linkType: hard - "negotiator@npm:^0.6.3": version: 0.6.3 resolution: "negotiator@npm:0.6.3" @@ -8908,48 +8296,21 @@ fsevents@~2.3.2: languageName: node linkType: hard -"node-fetch@npm:2.6.7": - version: 2.6.7 - resolution: "node-fetch@npm:2.6.7" - dependencies: - whatwg-url: ^5.0.0 - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - checksum: 8d816ffd1ee22cab8301c7756ef04f3437f18dace86a1dae22cf81db8ef29c0bf6655f3215cb0cdb22b420b6fe141e64b26905e7f33f9377a7fa59135ea3e10b - languageName: node - linkType: hard - -"node-fetch@npm:^2.6.1": - version: 2.6.2 - resolution: "node-fetch@npm:2.6.2" - checksum: de367eae1dfbc0e12283c1cf92256ea7fba7eac8655e2e51ebb217727162396fc6cf24689ef9fc6accf075e3991e2ffaa061f7cfaa958215329649b2297ff06d - languageName: node - linkType: hard - -"node-gyp@npm:*, node-gyp@npm:^8.2.0": - version: 8.4.1 - resolution: "node-gyp@npm:8.4.1" - dependencies: - env-paths: ^2.2.0 - glob: ^7.1.4 - graceful-fs: ^4.2.6 - make-fetch-happen: ^9.1.0 - nopt: ^5.0.0 - npmlog: ^6.0.0 - rimraf: ^3.0.2 - semver: ^7.3.5 - tar: ^6.1.2 - which: ^2.0.2 - bin: - node-gyp: bin/node-gyp.js - checksum: 341710b5da39d3660e6a886b37e210d33f8282047405c2e62c277bcc744c7552c5b8b972ebc3a7d5c2813794e60cc48c3ebd142c46d6e0321db4db6c92dd0355 +"node-fetch@npm:2.6.7, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.7": + version: 2.6.7 + resolution: "node-fetch@npm:2.6.7" + dependencies: + whatwg-url: ^5.0.0 + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: 8d816ffd1ee22cab8301c7756ef04f3437f18dace86a1dae22cf81db8ef29c0bf6655f3215cb0cdb22b420b6fe141e64b26905e7f33f9377a7fa59135ea3e10b languageName: node linkType: hard -"node-gyp@npm:^9.0.0": +"node-gyp@npm:*, node-gyp@npm:^9.0.0, node-gyp@npm:latest": version: 9.0.0 resolution: "node-gyp@npm:9.0.0" dependencies: @@ -8969,26 +8330,6 @@ fsevents@~2.3.2: languageName: node linkType: hard -"node-gyp@npm:latest": - version: 8.2.0 - resolution: "node-gyp@npm:8.2.0" - dependencies: - env-paths: ^2.2.0 - glob: ^7.1.4 - graceful-fs: ^4.2.6 - make-fetch-happen: ^8.0.14 - nopt: ^5.0.0 - npmlog: ^4.1.2 - rimraf: ^3.0.2 - semver: ^7.3.5 - tar: ^6.1.2 - which: ^2.0.2 - bin: - node-gyp: bin/node-gyp.js - checksum: 5e0e755eab8ca88647d20fc8aba4095560c3dd549686e86761b57b8489d93a1af68b0dccf881e5314bfce4d7ca290f8248e192915ccd3e18bf46571d72da6a9d - languageName: node - linkType: hard - "node-libs-browser@npm:^2.2.1": version: 2.2.1 resolution: "node-libs-browser@npm:2.2.1" @@ -9020,10 +8361,10 @@ fsevents@~2.3.2: languageName: node linkType: hard -"node-releases@npm:^2.0.1": - version: 2.0.1 - resolution: "node-releases@npm:2.0.1" - checksum: b20dd8d4bced11f75060f0387e05e76b9dc4a0451f7bb3516eade6f50499ea7768ba95d8a60d520c193402df1e58cb3fe301510cc1c1ad68949c3d57b5149866 +"node-releases@npm:^2.0.3": + version: 2.0.4 + resolution: "node-releases@npm:2.0.4" + checksum: b32d6c2032c7b169ae3938b416fc50f123f5bd577d54a79b2ae201febf27b22846b01c803dd35ac8689afe840f8ba4e5f7154723db629b80f359836b6707b92f languageName: node linkType: hard @@ -9050,7 +8391,7 @@ fsevents@~2.3.2: languageName: node linkType: hard -"normalize-package-data@npm:^3.0.0, normalize-package-data@npm:^3.0.2": +"normalize-package-data@npm:^3.0.0": version: 3.0.3 resolution: "normalize-package-data@npm:3.0.3" dependencies: @@ -9104,12 +8445,12 @@ fsevents@~2.3.2: languageName: node linkType: hard -"npm-audit-report@npm:*, npm-audit-report@npm:^2.1.5": - version: 2.1.5 - resolution: "npm-audit-report@npm:2.1.5" +"npm-audit-report@npm:*, npm-audit-report@npm:^3.0.0": + version: 3.0.0 + resolution: "npm-audit-report@npm:3.0.0" dependencies: chalk: ^4.0.0 - checksum: 9199c4331a29b478b7adbafe1bf463943f65cfd840f62ffe9e6263f0ae64d77725ea102126b3892ef3379a6770a6fe11e1f68ab4cb196c0045db2e1aeafc593d + checksum: 3927972c14e1d9fd21a6ab2d3c2d651e20346ff9a784ea2fcdc2b1e3b3e23994fc0e8961c3c9f4aea857e3a995a556a77f4f0250dbaf6238c481c609ed912a92 languageName: node linkType: hard @@ -9122,12 +8463,12 @@ fsevents@~2.3.2: languageName: node linkType: hard -"npm-install-checks@npm:*, npm-install-checks@npm:^4.0.0": - version: 4.0.0 - resolution: "npm-install-checks@npm:4.0.0" +"npm-install-checks@npm:*, npm-install-checks@npm:^5.0.0": + version: 5.0.0 + resolution: "npm-install-checks@npm:5.0.0" dependencies: semver: ^7.1.1 - checksum: 8308ff48e61e0863d7f148f62543e1f6c832525a7d8002ea742d5e478efa8b29bf65a87f9fb82786e15232e4b3d0362b126c45afdceed4c051c0d3c227dd0ace + checksum: 0e7d1aae52b1fe9d3a0fd4a008850c7047931722dd49ee908afd13fd0297ac5ddb10964d9c59afcdaaa2ca04b51d75af2788f668c729ae71fec0e4cdac590ffc languageName: node linkType: hard @@ -9138,130 +8479,56 @@ fsevents@~2.3.2: languageName: node linkType: hard -"npm-package-arg@npm:*, npm-package-arg@npm:^8.0.0, npm-package-arg@npm:^8.0.1, npm-package-arg@npm:^8.1.0, npm-package-arg@npm:^8.1.2, npm-package-arg@npm:^8.1.4, npm-package-arg@npm:^8.1.5": - version: 8.1.5 - resolution: "npm-package-arg@npm:8.1.5" - dependencies: - hosted-git-info: ^4.0.1 - semver: ^7.3.4 - validate-npm-package-name: ^3.0.0 - checksum: ae76afbcebb4ea8d0b849b8b18ed1b0491030fb04a0af5d75f1b8390cc50bec186ced9fbe60f47d939eab630c7c0db0919d879ac56a87d3782267dfe8eec60d3 - languageName: node - linkType: hard - -"npm-package-arg@npm:^9.0.0, npm-package-arg@npm:^9.0.1": - version: 9.0.1 - resolution: "npm-package-arg@npm:9.0.1" +"npm-package-arg@npm:*, npm-package-arg@npm:^9.0.0, npm-package-arg@npm:^9.0.1, npm-package-arg@npm:^9.0.2": + version: 9.0.2 + resolution: "npm-package-arg@npm:9.0.2" dependencies: hosted-git-info: ^5.0.0 semver: ^7.3.5 - validate-npm-package-name: ^3.0.0 - checksum: 93c660a448dca688af27eec1b0a3c11e4ab58b817e3b157e90c2e9b22a93c74a4fab64b104d5c57119a2c44914252d43deab0ba5b10ef4c7f8055277e938dbbb - languageName: node - linkType: hard - -"npm-packlist@npm:^3.0.0": - version: 3.0.0 - resolution: "npm-packlist@npm:3.0.0" - dependencies: - glob: ^7.1.6 - ignore-walk: ^4.0.1 - npm-bundled: ^1.1.1 - npm-normalize-package-bin: ^1.0.1 - bin: - npm-packlist: bin/index.js - checksum: 8550ecdec5feb2708aa8289e71c3e9ed72dd792642dd3d2c871955504c0e460bc1c2106483a164eb405b3cdfcfddf311315d4a647fca1a511f710654c015a91e + validate-npm-package-name: ^4.0.0 + checksum: 07828f330f611214a0aa1e87f402b30b3dc90388671470ad8dc1551f28b0cb886f1f75fa7c37e894a9598640a555c05643642994ecacb9a6c68f655e571968f7 languageName: node linkType: hard -"npm-packlist@npm:^4.0.0": - version: 4.0.0 - resolution: "npm-packlist@npm:4.0.0" +"npm-packlist@npm:^5.0.0": + version: 5.0.2 + resolution: "npm-packlist@npm:5.0.2" dependencies: - glob: ^7.2.0 - ignore-walk: ^4.0.1 + glob: ^8.0.1 + ignore-walk: ^5.0.1 npm-bundled: ^1.1.2 npm-normalize-package-bin: ^1.0.1 bin: npm-packlist: bin/index.js - checksum: 246e92415e7b9b963983d1aa372425b0c4ee77fde89ab5d9310033b3dd7768baf2b983c352c825a14743ae442b7ae457763417ef9d215b274992406a507c58ff - languageName: node - linkType: hard - -"npm-pick-manifest@npm:*, npm-pick-manifest@npm:^6.0.0, npm-pick-manifest@npm:^6.1.0, npm-pick-manifest@npm:^6.1.1": - version: 6.1.1 - resolution: "npm-pick-manifest@npm:6.1.1" - dependencies: - npm-install-checks: ^4.0.0 - npm-normalize-package-bin: ^1.0.1 - npm-package-arg: ^8.1.2 - semver: ^7.3.4 - checksum: 7a7b9475ae95cf903d37471229efbd12a829a9a7a1020ba36e75768aaa35da4c3a087fde3f06070baf81ec6b2ea2b660f022a1172644e6e7188199d7c1d2954b + checksum: ff2c295dea161c800c5c2d4254d6b864126333786edec7e56387a9184e966864e8e46a77aa8121db13f210232b6439c7425098ead377fe2fc287ac316c888f4d languageName: node linkType: hard -"npm-pick-manifest@npm:^7.0.0": - version: 7.0.0 - resolution: "npm-pick-manifest@npm:7.0.0" +"npm-pick-manifest@npm:*, npm-pick-manifest@npm:^7.0.0, npm-pick-manifest@npm:^7.0.1": + version: 7.0.1 + resolution: "npm-pick-manifest@npm:7.0.1" dependencies: - npm-install-checks: ^4.0.0 + npm-install-checks: ^5.0.0 npm-normalize-package-bin: ^1.0.1 npm-package-arg: ^9.0.0 semver: ^7.3.5 - checksum: 3ef8231429dd0785ca069b9a54066f49b879a9a487abcd04d4c67cbf858772ce441fd15aa530fb8dd53786c19f01c77d876b02e244a3f38e718353e96ac825db - languageName: node - linkType: hard - -"npm-profile@npm:*": - version: 5.0.4 - resolution: "npm-profile@npm:5.0.4" - dependencies: - npm-registry-fetch: ^11.0.0 - checksum: 38872ef916a40bf339e1be5a9dd286cc078214979b36787727b25ecf2ca60217e860e636a6ab85add82b4bc1667fef600fd7e28f3191add4c52054720d215909 + checksum: 9a4a8e64d2214783b2b74a361845000f5d91bb40c7858e2a30af2ac7876d9296efc37f8cacf60335e96a45effee2035b033d9bdefb4889757cc60d85959accbb languageName: node linkType: hard -"npm-profile@npm:^6.0.2": - version: 6.0.2 - resolution: "npm-profile@npm:6.0.2" +"npm-profile@npm:*, npm-profile@npm:^6.0.3": + version: 6.0.3 + resolution: "npm-profile@npm:6.0.3" dependencies: - npm-registry-fetch: ^13.0.0 + npm-registry-fetch: ^13.0.1 proc-log: ^2.0.0 - checksum: 15ed13a350c81a9b469cd7d7874c693edf7d427e65b76da8d4c40260275747d4f6d80c11b65a91159ff61ddecea517571da5ac8be197464f2fedab3a22177805 - languageName: node - linkType: hard - -"npm-registry-fetch@npm:*": - version: 12.0.0 - resolution: "npm-registry-fetch@npm:12.0.0" - dependencies: - make-fetch-happen: ^9.0.1 - minipass: ^3.1.3 - minipass-fetch: ^1.3.0 - minipass-json-stream: ^1.0.1 - minizlib: ^2.0.0 - npm-package-arg: ^8.0.0 - checksum: 71da707148567659d8e0fe43d9fb735efad6a4b0ca19747dee1d5b6995d3c0c96f430700c5d040f8249e2b6aa6dc6c91ec0ffe0d0d8770412c0ab372ed2f68df - languageName: node - linkType: hard - -"npm-registry-fetch@npm:^11.0.0": - version: 11.0.0 - resolution: "npm-registry-fetch@npm:11.0.0" - dependencies: - make-fetch-happen: ^9.0.1 - minipass: ^3.1.3 - minipass-fetch: ^1.3.0 - minipass-json-stream: ^1.0.1 - minizlib: ^2.0.0 - npm-package-arg: ^8.0.0 - checksum: dda149cd86f8ee73db1b0a0302fbf59983ef03ad180051caa9aad1de9f1e099aaa77adcda3ca2c3bd9d98958e9e6593bd56ee21d3f660746b0a65fafbf5ae161 + checksum: d2023c5a15bb70b87fec0144ddfa454af642d34debd49ad561041d7bb8a4a225f162352013096352f4d2f35b59c6b009c0a6f66ba838db8bac02e376fa754e47 languageName: node linkType: hard -"npm-registry-fetch@npm:^13.0.0, npm-registry-fetch@npm:^13.0.1": - version: 13.1.0 - resolution: "npm-registry-fetch@npm:13.1.0" +"npm-registry-fetch@npm:*, npm-registry-fetch@npm:^13.0.0, npm-registry-fetch@npm:^13.0.1, npm-registry-fetch@npm:^13.1.1": + version: 13.1.1 + resolution: "npm-registry-fetch@npm:13.1.1" dependencies: make-fetch-happen: ^10.0.6 minipass: ^3.1.6 @@ -9270,7 +8537,7 @@ fsevents@~2.3.2: minizlib: ^2.1.2 npm-package-arg: ^9.0.1 proc-log: ^2.0.0 - checksum: 599f498f58f500c3ca57ce3566ca3298d1ad8e58ef913577f884578790a27100ce7a2bc9c9f127bc06efd41de89ca0cc71004e96884f9fccbaa62cf37e7d0085 + checksum: e085faf5cdc1cfe9b8f825065a0823531b2a28799d84614b3971e344dde087f9089c0f0220360771a81f110c5444978c6f7309084ff7d7d396252b068148bb44 languageName: node linkType: hard @@ -9381,32 +8648,31 @@ fsevents@~2.3.2: linkType: hard "npm@npm:^8.3.0": - version: 8.5.5 - resolution: "npm@npm:8.5.5" + version: 8.8.0 + resolution: "npm@npm:8.8.0" dependencies: "@isaacs/string-locale-compare": ^1.1.0 - "@npmcli/arborist": ^5.0.3 + "@npmcli/arborist": ^5.0.4 "@npmcli/ci-detect": ^2.0.0 - "@npmcli/config": ^4.0.1 - "@npmcli/map-workspaces": ^2.0.2 - "@npmcli/package-json": ^1.0.1 + "@npmcli/config": ^4.1.0 + "@npmcli/fs": ^2.1.0 + "@npmcli/map-workspaces": ^2.0.3 + "@npmcli/package-json": ^2.0.0 "@npmcli/run-script": ^3.0.1 abbrev: ~1.1.1 - ansicolors: ~0.3.2 - ansistyles: ~0.1.3 archy: ~1.0.0 - cacache: ^16.0.2 + cacache: ^16.0.6 chalk: ^4.1.2 chownr: ^2.0.0 cli-columns: ^4.0.0 - cli-table3: ^0.6.1 + cli-table3: ^0.6.2 columnify: ^1.6.0 fastest-levenshtein: ^1.0.12 - glob: ^7.2.0 - graceful-fs: ^4.2.9 + glob: ^8.0.1 + graceful-fs: ^4.2.10 hosted-git-info: ^5.0.0 - ini: ^2.0.0 - init-package-json: ^3.0.1 + ini: ^3.0.0 + init-package-json: ^3.0.2 is-cidr: ^4.0.2 json-parse-even-better-errors: ^2.3.1 libnpmaccess: ^6.0.2 @@ -9420,7 +8686,7 @@ fsevents@~2.3.2: libnpmsearch: ^5.0.2 libnpmteam: ^4.0.2 libnpmversion: ^3.0.1 - make-fetch-happen: ^10.0.6 + make-fetch-happen: ^10.1.2 minipass: ^3.1.6 minipass-pipeline: ^1.2.4 mkdirp: ^1.0.4 @@ -9428,80 +8694,58 @@ fsevents@~2.3.2: ms: ^2.1.2 node-gyp: ^9.0.0 nopt: ^5.0.0 - npm-audit-report: ^2.1.5 - npm-install-checks: ^4.0.0 - npm-package-arg: ^9.0.1 - npm-pick-manifest: ^7.0.0 - npm-profile: ^6.0.2 - npm-registry-fetch: ^13.0.1 + npm-audit-report: ^3.0.0 + npm-install-checks: ^5.0.0 + npm-package-arg: ^9.0.2 + npm-pick-manifest: ^7.0.1 + npm-profile: ^6.0.3 + npm-registry-fetch: ^13.1.1 npm-user-validate: ^1.0.1 - npmlog: ^6.0.1 + npmlog: ^6.0.2 opener: ^1.5.2 - pacote: ^13.0.5 - parse-conflict-json: ^2.0.1 - proc-log: ^2.0.0 + pacote: ^13.1.1 + parse-conflict-json: ^2.0.2 + proc-log: ^2.0.1 qrcode-terminal: ^0.12.0 read: ~1.0.7 - read-package-json: ^5.0.0 + read-package-json: ^5.0.1 read-package-json-fast: ^2.0.3 readdir-scoped-modules: ^1.1.0 rimraf: ^3.0.2 - semver: ^7.3.5 - ssri: ^8.0.1 + semver: ^7.3.7 + ssri: ^9.0.0 tar: ^6.1.11 text-table: ~0.2.0 tiny-relative-date: ^1.3.0 - treeverse: ^1.0.4 - validate-npm-package-name: ~3.0.0 + treeverse: ^2.0.0 + validate-npm-package-name: ^4.0.0 which: ^2.0.2 write-file-atomic: ^4.0.1 bin: npm: bin/npm-cli.js npx: bin/npx-cli.js - checksum: f48fbac8c76a0afa709aaeb3ffeb2d6886b88577f6f7f54e91bc0d6169f6ec90f402bbd6ab7e643347970d95d43860f35b0dc0343664222def47cc6042ccf74a - languageName: node - linkType: hard - -"npmlog@npm:*, npmlog@npm:^6.0.0": - version: 6.0.0 - resolution: "npmlog@npm:6.0.0" - dependencies: - are-we-there-yet: ^2.0.0 - console-control-strings: ^1.1.0 - gauge: ^4.0.0 - set-blocking: ^2.0.0 - checksum: 33d8a7fe3d63bf83b16655b6588ae7ba10b5f37b067a661e7cab6508660d7c3204ae716ee2c5ce4eb9626fd1489cf2fa7645d789bc3b704f8c3ccb04a532a50b - languageName: node - linkType: hard - -"npmlog@npm:^4.1.2": - version: 4.1.2 - resolution: "npmlog@npm:4.1.2" - dependencies: - are-we-there-yet: ~1.1.2 - console-control-strings: ~1.1.0 - gauge: ~2.7.3 - set-blocking: ~2.0.0 - checksum: edbda9f95ec20957a892de1839afc6fb735054c3accf6fbefe767bac9a639fd5cea2baeac6bd2bcd50a85cb54924d57d9886c81c7fbc2332c2ddd19227504192 + checksum: ece9941f5e3fe1cdeeb80030bd17512ee3f6ea3fd4c9efd7cc682e0170356cd39350de814cb0a6ba4dd3ed993b1e51c3edbcf16a440b3719994e510c3eba654b languageName: node linkType: hard -"npmlog@npm:^6.0.1": - version: 6.0.1 - resolution: "npmlog@npm:6.0.1" +"npmlog@npm:*, npmlog@npm:^6.0.0, npmlog@npm:^6.0.2": + version: 6.0.2 + resolution: "npmlog@npm:6.0.2" dependencies: are-we-there-yet: ^3.0.0 console-control-strings: ^1.1.0 - gauge: ^4.0.0 + gauge: ^4.0.3 set-blocking: ^2.0.0 - checksum: f1a4078a73ebc89896a832bbf869f491c32ecb12e0434b9a7499878ce8f29f22e72befe3c53cd8cdc9dbf4b4057297e783ab0b6746a8b067734de6205af4d538 + checksum: ae238cd264a1c3f22091cdd9e2b106f684297d3c184f1146984ecbe18aaa86343953f26b9520dedd1b1372bc0316905b736c1932d778dbeb1fcf5a1001390e2a languageName: node linkType: hard -"number-is-nan@npm:^1.0.0": - version: 1.0.1 - resolution: "number-is-nan@npm:1.0.1" - checksum: 13656bc9aa771b96cef209ffca31c31a03b507ca6862ba7c3f638a283560620d723d52e626d57892c7fff475f4c36ac07f0600f14544692ff595abff214b9ffb +"nth-check@npm:^2.0.1": + version: 2.0.1 + resolution: "nth-check@npm:2.0.1" + dependencies: + boolbase: ^1.0.0 + checksum: 5386d035c48438ff304fe687704d93886397349d1bed136de97aeae464caba10e8ffac55a04b215b86b3bc8897f33e0a5aa1045a9d8b2f251ae61b2a3ad3e450 languageName: node linkType: hard @@ -9512,7 +8756,7 @@ fsevents@~2.3.2: languageName: node linkType: hard -"object-assign@npm:^4.0.1, object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": +"object-assign@npm:^4.0.1, object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f @@ -9537,14 +8781,14 @@ fsevents@~2.3.2: languageName: node linkType: hard -"object-inspect@npm:^1.11.0, object-inspect@npm:^1.12.0, object-inspect@npm:^1.9.0": +"object-inspect@npm:^1.12.0, object-inspect@npm:^1.9.0": version: 1.12.0 resolution: "object-inspect@npm:1.12.0" checksum: 2b36d4001a9c921c6b342e2965734519c9c58c355822243c3207fbf0aac271f8d44d30d2d570d450b2cc6f0f00b72bcdba515c37827d2560e5f22b1899a31cf4 languageName: node linkType: hard -"object-keys@npm:^1.0.12, object-keys@npm:^1.1.1": +"object-keys@npm:^1.1.1": version: 1.1.1 resolution: "object-keys@npm:1.1.1" checksum: b363c5e7644b1e1b04aa507e88dcb8e3a2f52b6ffd0ea801e4c7a62d5aa559affe21c55a07fd4b1fd55fc03a33c610d73426664b20032405d7b92a1414c34d6a @@ -9785,12 +9029,12 @@ fsevents@~2.3.2: linkType: hard "p-retry@npm:^4.0.0": - version: 4.6.1 - resolution: "p-retry@npm:4.6.1" + version: 4.6.2 + resolution: "p-retry@npm:4.6.2" dependencies: - "@types/retry": ^0.12.0 + "@types/retry": 0.12.0 retry: ^0.13.1 - checksum: e6d540413bb3d0b96e0db44f74a7af1dce41f5005e6e84d617960110b148348c86a3987be07797749e3ddd55817dd3a8ffd6eae3428758bc2994d987e48c3a70 + checksum: 45c270bfddaffb4a895cea16cb760dcc72bdecb6cb45fef1971fa6ea2e91ddeafddefe01e444ac73e33b1b3d5d29fb0dd18a7effb294262437221ddc03ce0f2e languageName: node linkType: hard @@ -9808,42 +9052,13 @@ fsevents@~2.3.2: languageName: node linkType: hard -"pacote@npm:*, pacote@npm:^12.0.0, pacote@npm:^12.0.2": - version: 12.0.2 - resolution: "pacote@npm:12.0.2" - dependencies: - "@npmcli/git": ^2.1.0 - "@npmcli/installed-package-contents": ^1.0.6 - "@npmcli/promise-spawn": ^1.2.0 - "@npmcli/run-script": ^2.0.0 - cacache: ^15.0.5 - chownr: ^2.0.0 - fs-minipass: ^2.1.0 - infer-owner: ^1.0.4 - minipass: ^3.1.3 - mkdirp: ^1.0.3 - npm-package-arg: ^8.0.1 - npm-packlist: ^3.0.0 - npm-pick-manifest: ^6.0.0 - npm-registry-fetch: ^11.0.0 - promise-retry: ^2.0.1 - read-package-json-fast: ^2.0.1 - rimraf: ^3.0.2 - ssri: ^8.0.1 - tar: ^6.1.0 - bin: - pacote: lib/bin.js - checksum: db2a338525d1074df2af55bccd4661949cb32343578d5ed052d516e3cb83b8c5b477437beba6bcbc59c9731eff73198a95f4ebfdfa533c726367519a70afe11e - languageName: node - linkType: hard - -"pacote@npm:^13.0.3, pacote@npm:^13.0.5": - version: 13.0.5 - resolution: "pacote@npm:13.0.5" +"pacote@npm:*, pacote@npm:^13.0.3, pacote@npm:^13.0.5, pacote@npm:^13.1.1": + version: 13.2.0 + resolution: "pacote@npm:13.2.0" dependencies: "@npmcli/git": ^3.0.0 "@npmcli/installed-package-contents": ^1.0.7 - "@npmcli/promise-spawn": ^1.2.0 + "@npmcli/promise-spawn": ^3.0.0 "@npmcli/run-script": ^3.0.1 cacache: ^16.0.0 chownr: ^2.0.0 @@ -9852,7 +9067,7 @@ fsevents@~2.3.2: minipass: ^3.1.6 mkdirp: ^1.0.4 npm-package-arg: ^9.0.0 - npm-packlist: ^4.0.0 + npm-packlist: ^5.0.0 npm-pick-manifest: ^7.0.0 npm-registry-fetch: ^13.0.1 proc-log: ^2.0.0 @@ -9860,11 +9075,11 @@ fsevents@~2.3.2: read-package-json: ^5.0.0 read-package-json-fast: ^2.0.3 rimraf: ^3.0.2 - ssri: ^8.0.1 + ssri: ^9.0.0 tar: ^6.1.11 bin: pacote: lib/bin.js - checksum: 9d187945debf6f32a9b4c1928f878fc95f601f33492e7beee2cdd87b85e735318fd67e255f111c50d3e69a81e759ec189316d546a48913706453c0b9a7b835ae + checksum: 5bd7c48a8ffddc52f1cace12a86eaf8755c42c9065945038986a16c626341e0f51cf22763b9546d957d3179726dc55703cd1f596ed81c59ff66fedaf6d4d071d languageName: node linkType: hard @@ -9908,14 +9123,14 @@ fsevents@~2.3.2: languageName: node linkType: hard -"parse-conflict-json@npm:*, parse-conflict-json@npm:^2.0.1": - version: 2.0.1 - resolution: "parse-conflict-json@npm:2.0.1" +"parse-conflict-json@npm:*, parse-conflict-json@npm:^2.0.1, parse-conflict-json@npm:^2.0.2": + version: 2.0.2 + resolution: "parse-conflict-json@npm:2.0.2" dependencies: json-parse-even-better-errors: ^2.3.1 just-diff: ^5.0.1 - just-diff-apply: ^4.0.1 - checksum: 398728731f3b7330d2885075f1dad0abd6fb943fca6aaa5f0edf46ccf06fe72b3ae09327f19447e98052fdfbf8bcfeee3aa14d7eb843846ec158b871a7fc1bba + just-diff-apply: ^5.2.0 + checksum: 076f65c958696586daefb153f59d575dfb59648be43116a21b74d5ff69ec63dd56f585a27cc2da56d8e64ca5abf0373d6619b8330c035131f8d1e990c8406378 languageName: node linkType: hard @@ -10093,20 +9308,13 @@ fsevents@~2.3.2: languageName: node linkType: hard -"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.2": +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.2, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf languageName: node linkType: hard -"picomatch@npm:^2.2.3": - version: 2.3.0 - resolution: "picomatch@npm:2.3.0" - checksum: 16818720ea7c5872b6af110760dee856c8e4cd79aed1c7a006d076b1cc09eff3ae41ca5019966694c33fbd2e1cc6ea617ab10e4adac6df06556168f13be3fca2 - languageName: node - linkType: hard - "pidtree@npm:^0.5.0": version: 0.5.0 resolution: "pidtree@npm:0.5.0" @@ -10131,10 +9339,10 @@ fsevents@~2.3.2: linkType: hard "pinia@npm:^2.0.12": - version: 2.0.12 - resolution: "pinia@npm:2.0.12" + version: 2.0.13 + resolution: "pinia@npm:2.0.13" dependencies: - "@vue/devtools-api": ^6.1.0 + "@vue/devtools-api": ^6.1.4 vue-demi: "*" peerDependencies: "@vue/composition-api": ^1.4.0 @@ -10145,7 +9353,7 @@ fsevents@~2.3.2: optional: true typescript: optional: true - checksum: 593233a40a242814c39aea7f94f66d91a0fe56873026b6a22700389e026c10beb155ad9b3e71a9b62f3ca782cd9ac62e48ad07506e569385cde27da119b3b610 + checksum: e9f2be12996c4778409ff6757b6472948b493924aaba07dd5f35a3222166c4093a746a894f076a702436f3449363f2f535ce4f5347f332167518247105b2af3e languageName: node linkType: hard @@ -10216,13 +9424,13 @@ fsevents@~2.3.2: languageName: node linkType: hard -"postcss-selector-parser@npm:^6.0.2": - version: 6.0.6 - resolution: "postcss-selector-parser@npm:6.0.6" +"postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.9": + version: 6.0.10 + resolution: "postcss-selector-parser@npm:6.0.10" dependencies: cssesc: ^3.0.0 util-deprecate: ^1.0.2 - checksum: 3602758798048bffbd6a97d6f009b32a993d6fd2cc70775bb59593e803d7fa8738822ecffb2fafc745edf7fad297dad53c30d2cfe78446a7d3f4a4a258cb15b2 + checksum: 46afaa60e3d1998bd7adf6caa374baf857cc58d3ff944e29459c9a9e4680a7fe41597bd5b755fc81d7c388357e9bf67c0251d047c640a09f148e13606b8a8608 languageName: node linkType: hard @@ -10236,14 +9444,14 @@ fsevents@~2.3.2: languageName: node linkType: hard -"postcss@npm:^8.4.6": - version: 8.4.12 - resolution: "postcss@npm:8.4.12" +"postcss@npm:^8.4.13": + version: 8.4.13 + resolution: "postcss@npm:8.4.13" dependencies: - nanoid: ^3.3.1 + nanoid: ^3.3.3 picocolors: ^1.0.0 source-map-js: ^1.0.2 - checksum: 248e3d0f9bbb8efaafcfda7f91627a29bdc9a19f456896886330beb28c5abea0e14c7901b35191928602e2eccbed496b1e94097d27a0b2a980854cd00c7a835f + checksum: 514fb3552805a5d039a2d6b4df3e73f657001716ca93c0d57e6067b0473abdea70276d80afc96005c9aaff82ed5d98062bd97724d3f47ca400fba0b5e9e436ed languageName: node linkType: hard @@ -10263,35 +9471,19 @@ fsevents@~2.3.2: languageName: node linkType: hard -"prettier@npm:^1.18.2 || ^2.0.0": - version: 2.5.0 - resolution: "prettier@npm:2.5.0" - bin: - prettier: bin-prettier.js - checksum: aad1b35b73e7c14596d389d90977a83dad0db689ba5802a0ef319c357b7867f55b885db197972aa6a56c30f53088c9f8e0d7f7930ae074c275a4e9cbe091d21d - languageName: node - linkType: hard - -"prettier@npm:^2.4.1, prettier@npm:^2.5.1": - version: 2.6.0 - resolution: "prettier@npm:2.6.0" +"prettier@npm:^1.18.2 || ^2.0.0, prettier@npm:^2.4.1, prettier@npm:^2.5.1": + version: 2.6.2 + resolution: "prettier@npm:2.6.2" bin: prettier: bin-prettier.js - checksum: 3e527ad62279676778a8404d18174d7ca2365ada4caba6eebbcdd9907d1187afd3bc6ade5b4e5f5d4549bb9fb71e45ca8930d71500017635524f8fc05bc52e93 + checksum: 48d08dde8e9fb1f5bccdd205baa7f192e9fc8bc98f86e1b97d919de804e28c806b0e6cc685e4a88211aa7987fa9668f30baae19580d87ced3ed0f2ec6572106f languageName: node linkType: hard -"proc-log@npm:^1.0.0": - version: 1.0.0 - resolution: "proc-log@npm:1.0.0" - checksum: 249605d5b28bfa0499d70da24ab056ad1e082a301f0a46d0ace6e8049cf16aaa0e71d9ea5cab29b620ffb327c18af97f0e012d1db090673447e7c1d33239dd96 - languageName: node - linkType: hard - -"proc-log@npm:^2.0.0": - version: 2.0.0 - resolution: "proc-log@npm:2.0.0" - checksum: 74ab7f7d47fee1fa81e068e9a7f4cdca7e20b6b14fe51fad1f595bf9d4ce5451c858922a25f447835021ec89192788b56700cd7740ede50966099c41ebe0c70c +"proc-log@npm:^2.0.0, proc-log@npm:^2.0.1": + version: 2.0.1 + resolution: "proc-log@npm:2.0.1" + checksum: f6f23564ff759097db37443e6e2765af84979a703d2c52c1b9df506ee9f87caa101ba49d8fdc115c1a313ec78e37e8134704e9069e6a870f3499d98bb24c436f languageName: node linkType: hard @@ -10667,13 +9859,13 @@ fsevents@~2.3.2: linkType: hard "rdf-terms@npm:^1.7.0": - version: 1.7.1 - resolution: "rdf-terms@npm:1.7.1" + version: 1.8.2 + resolution: "rdf-terms@npm:1.8.2" dependencies: "@rdfjs/types": "*" rdf-data-factory: ^1.1.0 rdf-string: ^1.6.0 - checksum: adad2adfda2c68afc5d33f90b10d5cda5666581824bca3c6879544665c1acf1afa022d20ba039657757475080895025f8464250046af195737cef241e3662f29 + checksum: a5c678b9b6ebbe2ec0cc05d871b483140c075c459b0f8a3c36a9ce6e85b5150d43e9966c592542f7f453c92a68c53a34978a80ac8284ed689ec5c6915d2a0fc9 languageName: node linkType: hard @@ -10740,14 +9932,14 @@ fsevents@~2.3.2: languageName: node linkType: hard -"read-cmd-shim@npm:^2.0.0": - version: 2.0.0 - resolution: "read-cmd-shim@npm:2.0.0" - checksum: 024f0a092d3630ad344af63eb0539bce90978883dd06a93e7bfbb26913168ab034473eae4a85685ea76a982eb31b0e8e16dee9c1138dabb3a925e7c4757952bc +"read-cmd-shim@npm:^3.0.0": + version: 3.0.0 + resolution: "read-cmd-shim@npm:3.0.0" + checksum: b518c6026f3320e30b692044f6ff5c4dc80f9c71261296da8994101b569b26b12b8e5df397bba2d4691dd3a3a2f770a1eca7be18a69ec202fac6dcfadc5016fd languageName: node linkType: hard -"read-package-json-fast@npm:*, read-package-json-fast@npm:^2.0.1, read-package-json-fast@npm:^2.0.2, read-package-json-fast@npm:^2.0.3": +"read-package-json-fast@npm:*, read-package-json-fast@npm:^2.0.2, read-package-json-fast@npm:^2.0.3": version: 2.0.3 resolution: "read-package-json-fast@npm:2.0.3" dependencies: @@ -10757,27 +9949,15 @@ fsevents@~2.3.2: languageName: node linkType: hard -"read-package-json@npm:*, read-package-json@npm:^4.1.1": - version: 4.1.1 - resolution: "read-package-json@npm:4.1.1" - dependencies: - glob: ^7.1.1 - json-parse-even-better-errors: ^2.3.0 - normalize-package-data: ^3.0.0 - npm-normalize-package-bin: ^1.0.0 - checksum: d95f6e9747bcce9bdbfae8442a86c41cde3a73691a8a8cdc46e0711e7768718e1f0955a38cbde01a6e571f490bbdc9d6a83713a89eca85646a816e659a78f6f4 - languageName: node - linkType: hard - -"read-package-json@npm:^5.0.0": - version: 5.0.0 - resolution: "read-package-json@npm:5.0.0" +"read-package-json@npm:*, read-package-json@npm:^5.0.0, read-package-json@npm:^5.0.1": + version: 5.0.1 + resolution: "read-package-json@npm:5.0.1" dependencies: - glob: ^7.2.0 + glob: ^8.0.1 json-parse-even-better-errors: ^2.3.1 normalize-package-data: ^4.0.0 npm-normalize-package-bin: ^1.0.1 - checksum: 9104dda32cb647e2f1a5244dd1f78f60c8eaa35bc4b3b1ed56373bc30fa8b7a80676a082c61c1a86cfac7c9643ac8c6bd535790a91f1a2c02bf535903902641b + checksum: e8c2ad72df1f17e71268feabdb9bb0153ed2c7d38a05b759c5c49cf368a754bdd3c0e8a279fbc8d707802ff91d2cf144a995e6ebd5534de2848d52ab2c14034d languageName: node linkType: hard @@ -10804,7 +9984,7 @@ fsevents@~2.3.2: languageName: node linkType: hard -"read@npm:*, read@npm:1, read@npm:^1.0.7, read@npm:~1.0.1, read@npm:~1.0.7": +"read@npm:*, read@npm:1, read@npm:^1.0.7, read@npm:~1.0.7": version: 1.0.7 resolution: "read@npm:1.0.7" dependencies: @@ -10820,7 +10000,7 @@ fsevents@~2.3.2: languageName: node linkType: hard -"readable-stream@npm:1 || 2, readable-stream@npm:^2.0.0, readable-stream@npm:^2.0.1, readable-stream@npm:^2.0.2, readable-stream@npm:^2.0.6, readable-stream@npm:^2.1.5, readable-stream@npm:^2.2.2, readable-stream@npm:^2.3.3, readable-stream@npm:^2.3.6, readable-stream@npm:~2.3.6": +"readable-stream@npm:1 || 2, readable-stream@npm:^2.0.0, readable-stream@npm:^2.0.1, readable-stream@npm:^2.0.2, readable-stream@npm:^2.1.5, readable-stream@npm:^2.2.2, readable-stream@npm:^2.3.3, readable-stream@npm:^2.3.6, readable-stream@npm:~2.3.6": version: 2.3.7 resolution: "readable-stream@npm:2.3.7" dependencies: @@ -11014,20 +10194,7 @@ fsevents@~2.3.2: languageName: node linkType: hard -"resolve@npm:^1.10.0": - version: 1.21.0 - resolution: "resolve@npm:1.21.0" - dependencies: - is-core-module: ^2.8.0 - path-parse: ^1.0.7 - supports-preserve-symlinks-flag: ^1.0.0 - bin: - resolve: bin/resolve - checksum: d7d9092a5c04a048bea16c7e5a2eb605ac3e8363a0cc5644de1fde17d5028e8d5f4343aab1d99bd327b98e91a66ea83e242718150c64dfedcb96e5e7aad6c4f5 - languageName: node - linkType: hard - -"resolve@npm:^1.20.0, resolve@npm:^1.22.0": +"resolve@npm:^1.10.0, resolve@npm:^1.20.0, resolve@npm:^1.22.0": version: 1.22.0 resolution: "resolve@npm:1.22.0" dependencies: @@ -11040,20 +10207,7 @@ fsevents@~2.3.2: languageName: node linkType: hard -"resolve@patch:resolve@^1.10.0#~builtin<compat/resolve>": - version: 1.21.0 - resolution: "resolve@patch:resolve@npm%3A1.21.0#~builtin<compat/resolve>::version=1.21.0&hash=07638b" - dependencies: - is-core-module: ^2.8.0 - path-parse: ^1.0.7 - supports-preserve-symlinks-flag: ^1.0.0 - bin: - resolve: bin/resolve - checksum: a0a4d1f7409e73190f31f901f8a619960bb3bd4ae38ba3a54c7ea7e1c87758d28a73256bb8d6a35996a903d1bf14f53883f0dcac6c571c063cb8162d813ad26e - languageName: node - linkType: hard - -"resolve@patch:resolve@^1.20.0#~builtin<compat/resolve>, resolve@patch:resolve@^1.22.0#~builtin<compat/resolve>": +"resolve@patch:resolve@^1.10.0#~builtin<compat/resolve>, resolve@patch:resolve@^1.20.0#~builtin<compat/resolve>, resolve@patch:resolve@^1.22.0#~builtin<compat/resolve>": version: 1.22.0 resolution: "resolve@patch:resolve@npm%3A1.22.0#~builtin<compat/resolve>::version=1.22.0&hash=07638b" dependencies: @@ -11192,8 +10346,8 @@ fsevents@~2.3.2: linkType: hard "rollup@npm:^2.58.0, rollup@npm:^2.59.0": - version: 2.70.1 - resolution: "rollup@npm:2.70.1" + version: 2.71.1 + resolution: "rollup@npm:2.71.1" dependencies: fsevents: ~2.3.2 dependenciesMeta: @@ -11201,7 +10355,7 @@ fsevents@~2.3.2: optional: true bin: rollup: dist/bin/rollup - checksum: 06c62933e6e81a1c8c684d7d576e507081aabdb63cc0c91bca86b7348b66df03b77827068e4990b8b6c738bd3ef66dcc8c7ed7e0ea40b736068e7618f693133e + checksum: fe2b2fda7bf53c86e970f3b026b784c00e2237089b802755b3e43725db88f5d1869c1f81f8c5257e9b68b0fd1840dcbd3897d2f19768cce97a37c70e1a563dce languageName: node linkType: hard @@ -11279,15 +10433,15 @@ fsevents@~2.3.2: linkType: hard "sass@npm:^1.49.9": - version: 1.49.9 - resolution: "sass@npm:1.49.9" + version: 1.51.0 + resolution: "sass@npm:1.51.0" dependencies: chokidar: ">=3.0.0 <4.0.0" immutable: ^4.0.0 source-map-js: ">=0.6.2 <2.0.0" bin: sass: sass.js - checksum: e5653e3499274c5127dcb5c9e7c5f6930378fc61764d999a5d8965782e027181ed09714f94836dec74ef55e3a858107fe6c571954c0cab0ad0be5ab8e586829c + checksum: d674fd87be863961d5e5233a148e381a72b06ca1749ffd95a08be2c3f4aa8fc77e3e21840347a84d7d4542cbf97cd6f9bfae19ecb1f5eefa6c207a3d8f923dbc languageName: node linkType: hard @@ -11363,14 +10517,14 @@ fsevents@~2.3.2: languageName: node linkType: hard -"semver@npm:*, semver@npm:^7.1.1, semver@npm:^7.1.2, semver@npm:^7.1.3, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5": - version: 7.3.5 - resolution: "semver@npm:7.3.5" +"semver@npm:*, semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.1.2, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7": + version: 7.3.7 + resolution: "semver@npm:7.3.7" dependencies: lru-cache: ^6.0.0 bin: semver: bin/semver.js - checksum: 5eafe6102bea2a7439897c1856362e31cc348ccf96efd455c8b5bc2c61e6f7e7b8250dc26b8828c1d76a56f818a7ee907a36ae9fb37a599d3d24609207001d60 + checksum: 2fa3e877568cd6ce769c75c211beaed1f9fce80b28338cadd9d0b6c40f2e2862bafd62c19a6cff42f3d54292b7c623277bcab8816a2b5521cf15210d43e75232 languageName: node linkType: hard @@ -11401,7 +10555,7 @@ fsevents@~2.3.2: languageName: node linkType: hard -"set-blocking@npm:^2.0.0, set-blocking@npm:~2.0.0": +"set-blocking@npm:^2.0.0": version: 2.0.0 resolution: "set-blocking@npm:2.0.0" checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02 @@ -11489,21 +10643,7 @@ fsevents@~2.3.2: languageName: node linkType: hard -"signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.3": - version: 3.0.3 - resolution: "signal-exit@npm:3.0.3" - checksum: f0169d3f1263d06df32ca072b0bf33b34c6f8f0341a7a1621558a2444dfbe8f5fec76b35537fcc6f0bc4944bdb5336fe0bdcf41a5422c4e45a1dba3f45475e6c - languageName: node - linkType: hard - -"signal-exit@npm:^3.0.2": - version: 3.0.6 - resolution: "signal-exit@npm:3.0.6" - checksum: b819ac81ba757af559dad0804233ae31bf6f054591cd8a671e9cbcf09f21c72ec3076fe87d1e04861f5b33b47d63f0694b568de99c99cd733ee2060515beb6d5 - languageName: node - linkType: hard - -"signal-exit@npm:^3.0.7": +"signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 @@ -11567,7 +10707,7 @@ fsevents@~2.3.2: languageName: node linkType: hard -"smart-buffer@npm:^4.1.0": +"smart-buffer@npm:^4.2.0": version: 4.2.0 resolution: "smart-buffer@npm:4.2.0" checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b @@ -11610,35 +10750,24 @@ fsevents@~2.3.2: languageName: node linkType: hard -"socks-proxy-agent@npm:^5.0.0": - version: 5.0.1 - resolution: "socks-proxy-agent@npm:5.0.1" - dependencies: - agent-base: ^6.0.2 - debug: 4 - socks: ^2.3.3 - checksum: 1b60c4977b2fef783f0fc4dc619cd2758aafdb43f3cf679f1e3627cb6c6e752811cee5513ebb4157ad26786033d2f85029440f197d321e8293b38cc5aab01e06 - languageName: node - linkType: hard - -"socks-proxy-agent@npm:^6.0.0, socks-proxy-agent@npm:^6.1.1": - version: 6.1.1 - resolution: "socks-proxy-agent@npm:6.1.1" +"socks-proxy-agent@npm:^6.1.1": + version: 6.2.0 + resolution: "socks-proxy-agent@npm:6.2.0" dependencies: agent-base: ^6.0.2 - debug: ^4.3.1 - socks: ^2.6.1 - checksum: 9a8a4f791bba0060315cf7291ca6f9db37d6fc280fd0860d73d8887d3efe4c22e823aa25a8d5375f6079279f8dc91b50c075345179bf832bfe3c7c26d3582e3c + debug: ^4.3.3 + socks: ^2.6.2 + checksum: 6723fd64fb50334e2b340fd0a80fd8488ffc5bc43d85b7cf1d25612044f814dd7d6ea417fd47602159941236f7f4bd15669fa5d7e1f852598a31288e1a43967b languageName: node linkType: hard -"socks@npm:^2.3.3, socks@npm:^2.6.1": - version: 2.6.1 - resolution: "socks@npm:2.6.1" +"socks@npm:^2.6.2": + version: 2.6.2 + resolution: "socks@npm:2.6.2" dependencies: ip: ^1.1.5 - smart-buffer: ^4.1.0 - checksum: 2ca9d616e424f645838ebaabb04f85d94ea999e0f8393dc07f86c435af22ed88cb83958feeabd1bb7bc537c635ed47454255635502c6808a6df61af1f41af750 + smart-buffer: ^4.2.0 + checksum: dd9194293059d737759d5c69273850ad4149f448426249325c4bea0e340d1cf3d266c3b022694b0dcf5d31f759de23657244c481fc1e8322add80b7985c36b5e languageName: node linkType: hard @@ -11686,7 +10815,7 @@ fsevents@~2.3.2: languageName: node linkType: hard -"source-map@npm:^0.5.0, source-map@npm:^0.5.6": +"source-map@npm:^0.5.6": version: 0.5.7 resolution: "source-map@npm:0.5.7" checksum: 5dc2043b93d2f194142c7f38f74a24670cd7a0063acdaf4bf01d2964b402257ae843c2a8fa822ad5b71013b5fcafa55af7421383da919752f22ff488bc553f4d @@ -11848,12 +10977,12 @@ fsevents@~2.3.2: languageName: node linkType: hard -"ssri@npm:*, ssri@npm:^8.0.0, ssri@npm:^8.0.1": - version: 8.0.1 - resolution: "ssri@npm:8.0.1" +"ssri@npm:*, ssri@npm:^9.0.0": + version: 9.0.0 + resolution: "ssri@npm:9.0.0" dependencies: minipass: ^3.1.1 - checksum: bc447f5af814fa9713aa201ec2522208ae0f4d8f3bda7a1f445a797c7b929a02720436ff7c478fb5edc4045adb02b1b88d2341b436a80798734e2494f1067b36 + checksum: bf33174232d07cc64e77ab1c51b55d28352273380c503d35642a19627e88a2c5f160039bb0a28608a353485075dda084dbf0390c7070f9f284559eb71d01b84b languageName: node linkType: hard @@ -11966,27 +11095,6 @@ fsevents@~2.3.2: languageName: node linkType: hard -"string-width@npm:^1.0.1": - version: 1.0.2 - resolution: "string-width@npm:1.0.2" - dependencies: - code-point-at: ^1.0.0 - is-fullwidth-code-point: ^1.0.0 - strip-ansi: ^3.0.0 - checksum: 5c79439e95bc3bd7233a332c5f5926ab2ee90b23816ed4faa380ce3b2576d7800b0a5bb15ae88ed28737acc7ea06a518c2eef39142dd727adad0e45c776cd37e - languageName: node - linkType: hard - -"string-width@npm:^1.0.2 || 2": - version: 2.1.1 - resolution: "string-width@npm:2.1.1" - dependencies: - is-fullwidth-code-point: ^2.0.0 - strip-ansi: ^4.0.0 - checksum: d6173abe088c615c8dffaf3861dc5d5906ed3dc2d6fd67ff2bd2e2b5dce7fd683c5240699cf0b1b8aa679a3b3bd6b28b5053c824cb89b813d7f6541d8f89064a - languageName: node - linkType: hard - "string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" @@ -12010,22 +11118,24 @@ fsevents@~2.3.2: linkType: hard "string.prototype.trimend@npm:^1.0.4": - version: 1.0.4 - resolution: "string.prototype.trimend@npm:1.0.4" + version: 1.0.5 + resolution: "string.prototype.trimend@npm:1.0.5" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.3 - checksum: 17e5aa45c3983f582693161f972c1c1fa4bbbdf22e70e582b00c91b6575f01680dc34e83005b98e31abe4d5d29e0b21fcc24690239c106c7b2315aade6a898ac + define-properties: ^1.1.4 + es-abstract: ^1.19.5 + checksum: d44f543833112f57224e79182debadc9f4f3bf9d48a0414d6f0cbd2a86f2b3e8c0ca1f95c3f8e5b32ae83e91554d79d932fc746b411895f03f93d89ed3dfb6bc languageName: node linkType: hard "string.prototype.trimstart@npm:^1.0.4": - version: 1.0.4 - resolution: "string.prototype.trimstart@npm:1.0.4" + version: 1.0.5 + resolution: "string.prototype.trimstart@npm:1.0.5" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.3 - checksum: 3fb06818d3cccac5fa3f5f9873d984794ca0e9f6616fae6fcc745885d9efed4e17fe15f832515d9af5e16c279857fdbffdfc489ca4ed577811b017721b30302f + define-properties: ^1.1.4 + es-abstract: ^1.19.5 + checksum: a4857c5399ad709d159a77371eeaa8f9cc284469a0b5e1bfe405de16f1fd4166a8ea6f4180e55032f348d1b679b1599fd4301fbc7a8b72bdb3e795e43f7b1048 languageName: node linkType: hard @@ -12047,31 +11157,6 @@ fsevents@~2.3.2: languageName: node linkType: hard -"stringify-package@npm:^1.0.1": - version: 1.0.1 - resolution: "stringify-package@npm:1.0.1" - checksum: 462036085a0cf7ae073d9b88a2bbf7efb3792e3df3e1fd436851f64196eb0234c8f8ffac436357e355687d6030b7af42e98af9515929e41a6a5c8653aa62a5aa - languageName: node - linkType: hard - -"strip-ansi@npm:^3.0.0, strip-ansi@npm:^3.0.1": - version: 3.0.1 - resolution: "strip-ansi@npm:3.0.1" - dependencies: - ansi-regex: ^2.0.0 - checksum: 9b974de611ce5075c70629c00fa98c46144043db92ae17748fb780f706f7a789e9989fd10597b7c2053ae8d1513fd707816a91f1879b2f71e6ac0b6a863db465 - languageName: node - linkType: hard - -"strip-ansi@npm:^4.0.0": - version: 4.0.0 - resolution: "strip-ansi@npm:4.0.0" - dependencies: - ansi-regex: ^3.0.0 - checksum: d9186e6c0cf78f25274f6750ee5e4a5725fb91b70fdd79aa5fe648eab092a0ec5b9621b22d69d4534a56319f75d8944efbd84e3afa8d4ad1b9a9491f12c84eca - languageName: node - linkType: hard - "strip-ansi@npm:^5.2.0": version: 5.2.0 resolution: "strip-ansi@npm:5.2.0" @@ -12169,9 +11254,9 @@ fsevents@~2.3.2: linkType: hard "supports-color@npm:^9.2.1": - version: 9.2.1 - resolution: "supports-color@npm:9.2.1" - checksum: 8a2bfeb64c1512d21a1a998c1f64acdaa85cf1f6a101627286548f19785524b329d7b28d567a28fc2d708fc7aba32f4c82a9b224f76b30a337a39d3e53418ff7 + version: 9.2.2 + resolution: "supports-color@npm:9.2.2" + checksum: 976d84877402fc38c1d43b1fde20b0a8dc0283273f21cfebe4ff7507d27543cdfbeec7db108a96b82d694465f06d64e8577562b05d0520b41710088e0a33cc50 languageName: node linkType: hard @@ -12206,7 +11291,7 @@ fsevents@~2.3.2: languageName: node linkType: hard -"tar@npm:*, tar@npm:^6.0.2, tar@npm:^6.1.0, tar@npm:^6.1.11, tar@npm:^6.1.2": +"tar@npm:*, tar@npm:^6.1.0, tar@npm:^6.1.11, tar@npm:^6.1.2": version: 6.1.11 resolution: "tar@npm:6.1.11" dependencies: @@ -12415,10 +11500,10 @@ fsevents@~2.3.2: languageName: node linkType: hard -"treeverse@npm:*, treeverse@npm:^1.0.4": - version: 1.0.4 - resolution: "treeverse@npm:1.0.4" - checksum: 712640acd811060ff552a3c761f700d18d22a4da544d31b4e290817ac4bbbfcfe33b58f85e7a5787e6ff7351d3a9100670721a289ca14eb87b36ad8a0c20ebd8 +"treeverse@npm:*, treeverse@npm:^2.0.0": + version: 2.0.0 + resolution: "treeverse@npm:2.0.0" + checksum: 3c6b2b890975a4d42c86b9a0f1eb932b4450db3fa874be5c301c4f5e306fd76330c6a490cf334b0937b3a44b049787ba5d98c88bc7b140f34fdb3ab1f83e5269 languageName: node linkType: hard @@ -12429,7 +11514,7 @@ fsevents@~2.3.2: languageName: node linkType: hard -"tsconfig-paths@npm:^3.12.0": +"tsconfig-paths@npm:^3.14.1": version: 3.14.1 resolution: "tsconfig-paths@npm:3.14.1" dependencies: @@ -12449,9 +11534,9 @@ fsevents@~2.3.2: linkType: hard "tslib@npm:^2.1.0": - version: 2.3.1 - resolution: "tslib@npm:2.3.1" - checksum: de17a98d4614481f7fcb5cd53ffc1aaf8654313be0291e1bfaee4b4bb31a20494b7d218ff2e15017883e8ea9626599b3b0e0229c18383ba9dce89da2adf15cb9 + version: 2.4.0 + resolution: "tslib@npm:2.4.0" + checksum: 8c4aa6a3c5a754bf76aefc38026134180c053b7bd2f81338cb5e5ebf96fefa0f417bff221592bf801077f5bf990562f6264fecbc42cd3309b33872cb6fc3b113 languageName: node linkType: hard @@ -12547,15 +11632,6 @@ fsevents@~2.3.2: languageName: node linkType: hard -"typedarray-to-buffer@npm:^3.1.5": - version: 3.1.5 - resolution: "typedarray-to-buffer@npm:3.1.5" - dependencies: - is-typedarray: ^1.0.0 - checksum: 99c11aaa8f45189fcfba6b8a4825fd684a321caa9bd7a76a27cf0c7732c174d198b99f449c52c3818107430b5f41c0ccbbfb75cb2ee3ca4a9451710986d61a60 - languageName: node - linkType: hard - "typedarray@npm:^0.0.6": version: 0.0.6 resolution: "typedarray@npm:0.0.6" @@ -12564,31 +11640,31 @@ fsevents@~2.3.2: linkType: hard "typescript@npm:^4.5.4": - version: 4.6.2 - resolution: "typescript@npm:4.6.2" + version: 4.6.4 + resolution: "typescript@npm:4.6.4" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 8a44ed7e6f6c4cb1ebe8cf236ecda2fb119d84dcf0fbd77e707b2dfea1bbcfc4e366493a143513ce7f57203c75da9d4e20af6fe46de89749366351046be7577c + checksum: e7bfcc39cd4571a63a54e5ea21f16b8445268b9900bf55aee0e02ad981be576acc140eba24f1af5e3c1457767c96cea6d12861768fb386cf3ffb34013718631a languageName: node linkType: hard "typescript@patch:typescript@^4.5.4#~builtin<compat/typescript>": - version: 4.6.2 - resolution: "typescript@patch:typescript@npm%3A4.6.2#~builtin<compat/typescript>::version=4.6.2&hash=ddd1e8" + version: 4.6.4 + resolution: "typescript@patch:typescript@npm%3A4.6.4#~builtin<compat/typescript>::version=4.6.4&hash=bda367" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: efb83260a22ee49d4c8bdc59b3cefe54fdf51d6f563f5c3a35aa3d5e46fb12f3f1d33a36d6f9f64171e567ead1847e99cb612d0a9a74e7d44e16cad9d0bbc937 + checksum: 1cb434fbc637d347be90e3a0c6cd05e33c38f941713c8786d3031faf1842c2c148ba91d2fac01e7276b0ae3249b8633f1660e32686cc7a8c6a8fd5361dc52c66 languageName: node linkType: hard "uglify-js@npm:^3.1.4": - version: 3.14.5 - resolution: "uglify-js@npm:3.14.5" + version: 3.15.4 + resolution: "uglify-js@npm:3.15.4" bin: uglifyjs: bin/uglifyjs - checksum: 0330eb11a36f4181b6d9a00336355989bfad9dd2203049fc63a59454b0d12337612272ad011bc571b9a382bf74d829ca20409ebfe089e38edb26cfc06bfa2cc9 + checksum: 5f673c5dd7f3b3dd15d1d26aebfe29bccbb1b896c4b5423ec70a2e8b9506c70b6fb6a53dec83df5ad65a717ec9a850adf08e0aedf9b1711eac5eb080216615fa languageName: node linkType: hard @@ -12663,14 +11739,14 @@ fsevents@~2.3.2: linkType: soft "unbox-primitive@npm:^1.0.1": - version: 1.0.1 - resolution: "unbox-primitive@npm:1.0.1" + version: 1.0.2 + resolution: "unbox-primitive@npm:1.0.2" dependencies: - function-bind: ^1.1.1 - has-bigints: ^1.0.1 - has-symbols: ^1.0.2 + call-bind: ^1.0.2 + has-bigints: ^1.0.2 + has-symbols: ^1.0.3 which-boxed-primitive: ^1.0.2 - checksum: 89d950e18fb45672bc6b3c961f1e72c07beb9640c7ceed847b571ba6f7d2af570ae1a2584cfee268b9d9ea1e3293f7e33e0bc29eaeb9f8e8a0bab057ff9e6bba + checksum: b7a1cf5862b5e4b5deb091672ffa579aa274f648410009c81cca63fed3b62b610c4f3b773f912ce545bb4e31edc3138975b5bc777fc6e4817dca51affb6380e9 languageName: node linkType: hard @@ -12891,12 +11967,12 @@ fsevents@~2.3.2: languageName: node linkType: hard -"validate-npm-package-name@npm:*, validate-npm-package-name@npm:^3.0.0, validate-npm-package-name@npm:~3.0.0": - version: 3.0.0 - resolution: "validate-npm-package-name@npm:3.0.0" +"validate-npm-package-name@npm:*, validate-npm-package-name@npm:^4.0.0": + version: 4.0.0 + resolution: "validate-npm-package-name@npm:4.0.0" dependencies: - builtins: ^1.0.3 - checksum: ce4c68207abfb22c05eedb09ff97adbcedc80304a235a0844f5344f1fd5086aa80e4dbec5684d6094e26e35065277b765c1caef68bcea66b9056761eddb22967 + builtins: ^5.0.0 + checksum: a32fd537bad17fcb59cfd58ae95a414d443866020d448ec3b22e8d40550cb585026582a57efbe1f132b882eea4da8ac38ee35f7be0dd72988a3cb55d305a20c1 languageName: node linkType: hard @@ -12912,8 +11988,8 @@ fsevents@~2.3.2: linkType: hard "vite-aliases@npm:^0.9.1": - version: 0.9.1 - resolution: "vite-aliases@npm:0.9.1" + version: 0.9.2 + resolution: "vite-aliases@npm:0.9.2" dependencies: chokidar: ^3.5.2 comment-json: ^4.1.1 @@ -12921,7 +11997,7 @@ fsevents@~2.3.2: jsonc-parser: ^3.0.0 lowdb: ^3.0.0 vite: ^2.7.10 - checksum: 5b7335d66cffeada1309479081c9c60539b9aa4f845e7d29ad1c9d7b66a44cb3a8d78bfe3ba744dd3abd5b856a3a2c373ee3aad578c4f43828fe8ad1e52c1f97 + checksum: a0a373ef5c2ed050ef47ad1e912cad0471b7ee34758427958a69c0b49f527cab8489f756c1e39597ad4de270669f4ec8e912cf1005d5410391133e9b20a52ed2 languageName: node linkType: hard @@ -12957,26 +12033,26 @@ fsevents@~2.3.2: linkType: hard "vite-plugin-windicss@npm:^1.8.3": - version: 1.8.3 - resolution: "vite-plugin-windicss@npm:1.8.3" + version: 1.8.4 + resolution: "vite-plugin-windicss@npm:1.8.4" dependencies: - "@windicss/plugin-utils": 1.8.3 - debug: ^4.3.3 + "@windicss/plugin-utils": 1.8.4 + debug: ^4.3.4 kolorist: ^1.5.1 windicss: ^3.5.1 peerDependencies: vite: ^2.0.1 - checksum: 73a565527956069b67a3a3213e5f9270673ff02bf79412da0d62fec526d854183d19a50fb23619478cf7b8cab3f42c87eed9e18e8156d91ec60a2c07d93a6523 + checksum: 657b63b123c5e2696e409e140b1b56a7f02131908ec247dd7e1cf7439aabe707f2f2d1dff857001f8b9206c9771939fb79e5886175d243097d031887f3bd9fa8 languageName: node linkType: hard "vite@npm:^2.7.10, vite@npm:^2.8.6": - version: 2.8.6 - resolution: "vite@npm:2.8.6" + version: 2.9.7 + resolution: "vite@npm:2.9.7" dependencies: - esbuild: ^0.14.14 + esbuild: ^0.14.27 fsevents: ~2.3.2 - postcss: ^8.4.6 + postcss: ^8.4.13 resolve: ^1.22.0 rollup: ^2.59.0 peerDependencies: @@ -12995,7 +12071,7 @@ fsevents@~2.3.2: optional: true bin: vite: bin/vite.js - checksum: 4b02d133892c98362c10214b7ad518d74b59745889197a2ba0b63260ed083fcef75a447e8fb58dbd2af8747386274b36017983d93031254df6ead38701950dcc + checksum: d3d2a86855709e037d244c3066e785d7b700e41bf59ceb776818ea06ee2ed579055c10596ca883dd56de46b3654ec82da53369062013a012a1a60819dbb7c0ee languageName: node linkType: hard @@ -13007,8 +12083,8 @@ fsevents@~2.3.2: linkType: hard "vue-demi@npm:*, vue-demi@npm:^0.12.1": - version: 0.12.4 - resolution: "vue-demi@npm:0.12.4" + version: 0.12.5 + resolution: "vue-demi@npm:0.12.5" peerDependencies: "@vue/composition-api": ^1.0.0-rc.1 vue: ^3.0.0-0 || ^2.6.0 @@ -13018,7 +12094,7 @@ fsevents@~2.3.2: bin: vue-demi-fix: bin/vue-demi-fix.js vue-demi-switch: bin/vue-demi-switch.js - checksum: cd715e008837c67aa7018e96f5556ffd4f26cbeed031116251c3983b777ff163550670af28b2b39bc650c5f7c4738976524e013cfc36aa17e26bc07fad70efc5 + checksum: 40a0470caea8312e0d4df2541f141c36c768dfc7f2f7d41f0f28ba29df11d3119e2f09b94c815f13b7c7f3f45dbc247b0e9e0c02a1800e2823e241c1d771e39b languageName: node linkType: hard @@ -13064,9 +12140,9 @@ fsevents@~2.3.2: linkType: hard "vue-i18n@npm:^8.22.2, vue-i18n@npm:^8.27.0": - version: 8.27.0 - resolution: "vue-i18n@npm:8.27.0" - checksum: 6d5af73e3ef219fa2948f508b2fcbee5d669459293f2fab2a08bebaad80f93b6190b0fcae7b5f7b1aa7eab61c896e6b2d4a7e52483282d64f9f5e1d9d0d3af10 + version: 8.27.1 + resolution: "vue-i18n@npm:8.27.1" + checksum: ee712fcdd503d73d63c9de82bb7315962205b3cd4339c414e9183c5a7b760ce465d2e0bf285aaa3617e8edd37b5004904881b7c406492bde41762865228ce920 languageName: node linkType: hard @@ -13315,16 +12391,7 @@ fsevents@~2.3.2: languageName: node linkType: hard -"wide-align@npm:^1.1.0": - version: 1.1.3 - resolution: "wide-align@npm:1.1.3" - dependencies: - string-width: ^1.0.2 || 2 - checksum: d09c8012652a9e6cab3e82338d1874a4d7db2ad1bd19ab43eb744acf0b9b5632ec406bdbbbb970a8f4771a7d5ef49824d038ba70aa884e7723f5b090ab87134d - languageName: node - linkType: hard - -"wide-align@npm:^1.1.2": +"wide-align@npm:^1.1.5": version: 1.1.5 resolution: "wide-align@npm:1.1.5" dependencies: @@ -13394,19 +12461,7 @@ fsevents@~2.3.2: languageName: node linkType: hard -"write-file-atomic@npm:*, write-file-atomic@npm:^3.0.3": - version: 3.0.3 - resolution: "write-file-atomic@npm:3.0.3" - dependencies: - imurmurhash: ^0.1.4 - is-typedarray: ^1.0.0 - signal-exit: ^3.0.2 - typedarray-to-buffer: ^3.1.5 - checksum: c55b24617cc61c3a4379f425fc62a386cc51916a9b9d993f39734d005a09d5a4bb748bc251f1304e7abd71d0a26d339996c275955f527a131b1dcded67878280 - languageName: node - linkType: hard - -"write-file-atomic@npm:^4.0.0, write-file-atomic@npm:^4.0.1": +"write-file-atomic@npm:*, write-file-atomic@npm:^4.0.0, write-file-atomic@npm:^4.0.1": version: 4.0.1 resolution: "write-file-atomic@npm:4.0.1" dependencies: