diff --git a/web-app/knip.config.ts b/web-app/knip.config.ts new file mode 100644 index 000000000..99f3c5c38 --- /dev/null +++ b/web-app/knip.config.ts @@ -0,0 +1,26 @@ +import type { KnipConfig } from "knip"; + +export default { + entry: ["src/**/{index,main}.{ts,tsx}", "e2e/**/*.ts", "test/**/*.ts"], + project: [ + "src/**/*.{ts,tsx}", + "!src/api/**/*", + "e2e/**/*.{ts,tsx}", + "test/**/*.ts", + ], + rules: { + binaries: "error", + classMembers: "error", + dependencies: "error", + devDependencies: "off", + duplicates: "error", + files: "error", + nsExports: "error", + nsTypes: "error", + unlisted: "error", + unresolved: "error", + types: "error", + exports: "error", + enumMembers: "off", + }, +} satisfies KnipConfig; diff --git a/web-app/package.json b/web-app/package.json index 5508fd46f..2e86c81dd 100644 --- a/web-app/package.json +++ b/web-app/package.json @@ -6,6 +6,8 @@ "private": true, "dependencies": { "@reduxjs/toolkit": "^1.9.7", + "clsx": "^2.1.1", + "http-status-codes": "^2.3.0", "kbar": "^0.1.0-beta.45", "local-storage-fallback": "^4.1.2", "lodash": "^4.17.21", @@ -36,7 +38,8 @@ "test": "react-scripts test", "eject": "react-scripts eject", "playwright": "PORT=5005 USE_BABEL_PLUGIN_ISTANBUL=1 react-app-rewired start", - "find-deadcode": "ts-prune -s consoleApi.ts | sh -c '(! grep -v \"used in module\")'" + "find-deadcode": "knip", + "format": "prettier . --write --log-level warn" }, "eslintConfig": { "extends": "react-app", @@ -60,6 +63,7 @@ "devDependencies": { "@babel/plugin-proposal-private-property-in-object": "^7.21.11", "@playwright/test": "^1.45.2", + "@types/jest": "^29.5.12", "@types/lodash": "^4.17.7", "@types/luxon": "^3.4.2", "@types/node": "20.14.11", @@ -75,6 +79,7 @@ "@types/webpack-env": "^1.18.5", "babel-plugin-istanbul": "^6.1.1", "customize-cra": "^1.0.0", + "knip": "^5.27.2", "minio": "^8.0.1", "nyc": "^15.1.0", "prettier": "3.3.3", @@ -82,7 +87,6 @@ "react-app-rewired": "^2.2.1", "react-scripts": "5.0.1", "testcafe": "3.6.2", - "ts-prune": "^0.10.3", "typescript": "^5.5.3" }, "resolutions": { diff --git a/web-app/src/common/types.ts b/web-app/src/common/types.ts index 7b4a32781..04ea3093e 100644 --- a/web-app/src/common/types.ts +++ b/web-app/src/common/types.ts @@ -41,7 +41,7 @@ export interface IBytesCalc { unit: string; } -export interface IEmbeddedCustomButton { +interface IEmbeddedCustomButton { backgroundColor: string; textColor: string; hoverColor: string; @@ -52,7 +52,7 @@ export interface IEmbeddedCustomButton { disabledText: string; } -export interface IEmbeddedCustomTable { +interface IEmbeddedCustomTable { border: string; disabledBorder: string; disabledBG: string; @@ -61,14 +61,14 @@ export interface IEmbeddedCustomTable { hoverColor: string; } -export interface IEmbeddedInputBox { +interface IEmbeddedInputBox { border: string; hoverBorder: string; textColor: string; backgroundColor: string; } -export interface IEmbeddedSwitch { +interface IEmbeddedSwitch { switchBackground: string; bulletBorderColor: string; bulletBGColor: string; diff --git a/web-app/src/common/utils.ts b/web-app/src/common/utils.ts index 0c4df0a8b..b02e65985 100644 --- a/web-app/src/common/utils.ts +++ b/web-app/src/common/utils.ts @@ -32,8 +32,8 @@ export const units = [ "ZiB", "YiB", ]; -export const k8sUnits = ["Ki", "Mi", "Gi", "Ti", "Pi", "Ei"]; -export const k8sCalcUnits = ["B", ...k8sUnits]; +const k8sUnits = ["Ki", "Mi", "Gi", "Ti", "Pi", "Ei"]; +const k8sCalcUnits = ["B", ...k8sUnits]; export const niceBytes = (x: string, showK8sUnits: boolean = false) => { let n = parseInt(x, 10) || 0; @@ -97,7 +97,7 @@ export const getBytes = ( }; //getBytesNumber, converts from a value and a unit from units array to bytes -export const getBytesNumber = ( +const getBytesNumber = ( value: string, unit: string, fromk8s: boolean = false, diff --git a/web-app/src/config.ts b/web-app/src/config.ts index 2807e67e4..f3ae22f2e 100644 --- a/web-app/src/config.ts +++ b/web-app/src/config.ts @@ -16,7 +16,7 @@ import { ApplicationLogoProps } from "mds"; -export const MinIOPlan = +const MinIOPlan = ( document.head.querySelector( "[name~=minio-license][content]", diff --git a/web-app/src/index.tsx b/web-app/src/index.tsx index 61109e3e1..fa7afd846 100644 --- a/web-app/src/index.tsx +++ b/web-app/src/index.tsx @@ -15,7 +15,6 @@ // along with this program. If not, see . import React from "react"; -import * as serviceWorker from "./serviceWorker"; import ReactDOM from "react-dom/client"; import { Provider } from "react-redux"; import { store } from "./store"; @@ -35,8 +34,3 @@ root.render( , ); - -// If you want your app to work offline and load faster, you can change -// unregister() to register() below. Note this comes with some pitfalls. -// Learn more about service workers: https://bit.ly/CRA-PWA -serviceWorker.unregister(); diff --git a/web-app/src/screens/Console/Buckets/BucketDetails/bucketDetailsSlice.ts b/web-app/src/screens/Console/Buckets/BucketDetails/bucketDetailsSlice.ts index db55c7508..4613b1c3c 100644 --- a/web-app/src/screens/Console/Buckets/BucketDetails/bucketDetailsSlice.ts +++ b/web-app/src/screens/Console/Buckets/BucketDetails/bucketDetailsSlice.ts @@ -18,7 +18,7 @@ import { createSlice, PayloadAction } from "@reduxjs/toolkit"; import { AppState } from "../../../../store"; import { Bucket } from "api/consoleApi"; -export interface BucketDetailsState { +interface BucketDetailsState { selectedTab: string; loadingBucket: boolean; bucketInfo: Bucket | null; @@ -30,7 +30,7 @@ const initialState: BucketDetailsState = { bucketInfo: null, }; -export const bucketDetailsSlice = createSlice({ +const bucketDetailsSlice = createSlice({ name: "bucketDetails", initialState, reducers: { @@ -46,7 +46,7 @@ export const bucketDetailsSlice = createSlice({ }, }); -export const { setBucketDetailsTab, setBucketInfo, setBucketDetailsLoad } = +export const { setBucketInfo, setBucketDetailsLoad } = bucketDetailsSlice.actions; export const selBucketDetailsLoading = (state: AppState) => diff --git a/web-app/src/screens/Console/Buckets/ListBuckets/AddBucket/addBucketsSlice.ts b/web-app/src/screens/Console/Buckets/ListBuckets/AddBucket/addBucketsSlice.ts index 1f1c238f4..0135f4ccb 100644 --- a/web-app/src/screens/Console/Buckets/ListBuckets/AddBucket/addBucketsSlice.ts +++ b/web-app/src/screens/Console/Buckets/ListBuckets/AddBucket/addBucketsSlice.ts @@ -18,7 +18,7 @@ import { createSlice, PayloadAction } from "@reduxjs/toolkit"; import { addBucketAsync } from "./addBucketThunks"; import { ObjectRetentionMode } from "api/consoleApi"; -export interface AddBucketState { +interface AddBucketState { loading: boolean; isDirty: boolean; invalidFields: string[]; @@ -58,7 +58,7 @@ const initialState: AddBucketState = { excludedPrefixes: "", }; -export const addBucketsSlice = createSlice({ +const addBucketsSlice = createSlice({ name: "addBuckets", initialState, reducers: { diff --git a/web-app/src/screens/Console/Buckets/ListBuckets/Objects/ListObjects/ListObjectsHelpers.tsx b/web-app/src/screens/Console/Buckets/ListBuckets/Objects/ListObjects/ListObjectsHelpers.tsx index 511643086..ab675fd2a 100644 --- a/web-app/src/screens/Console/Buckets/ListBuckets/Objects/ListObjects/ListObjectsHelpers.tsx +++ b/web-app/src/screens/Console/Buckets/ListBuckets/Objects/ListObjects/ListObjectsHelpers.tsx @@ -21,7 +21,7 @@ import { displayFileIconName } from "./utils"; // Functions -export const displayParsedDate = (object: BucketObjectItem) => { +const displayParsedDate = (object: BucketObjectItem) => { if (object.name.endsWith("/")) { return ""; } @@ -41,14 +41,14 @@ export const displayParsedDate = (object: BucketObjectItem) => { return objectTime.toFormat("ccc, LLL dd yyyy HH:mm (ZZZZ)"); }; -export const displayNiceBytes = (object: BucketObjectItem) => { +const displayNiceBytes = (object: BucketObjectItem) => { if (object.name.endsWith("/") || !object.size) { return "-"; } return niceBytes(String(object.size)); }; -export const displayDeleteFlag = (state: boolean) => { +const displayDeleteFlag = (state: boolean) => { return state ? "Yes" : "No"; }; diff --git a/web-app/src/screens/Console/Buckets/ListBuckets/Objects/ListObjects/types.tsx b/web-app/src/screens/Console/Buckets/ListBuckets/Objects/ListObjects/types.tsx index e44792463..89014da80 100644 --- a/web-app/src/screens/Console/Buckets/ListBuckets/Objects/ListObjects/types.tsx +++ b/web-app/src/screens/Console/Buckets/ListBuckets/Objects/ListObjects/types.tsx @@ -45,12 +45,12 @@ export interface WebsocketResponse { bucketName?: string; } -export interface WebsocketErrorResponse { +interface WebsocketErrorResponse { Code: number; APIError: ApiError; } -export interface ObjectResponse { +interface ObjectResponse { name: string; last_modified: string; size: number; diff --git a/web-app/src/screens/Console/Buckets/ListBuckets/Objects/ListObjects/utils.tsx b/web-app/src/screens/Console/Buckets/ListBuckets/Objects/ListObjects/utils.tsx index 4d22aa072..a0139f54b 100644 --- a/web-app/src/screens/Console/Buckets/ListBuckets/Objects/ListObjects/utils.tsx +++ b/web-app/src/screens/Console/Buckets/ListBuckets/Objects/ListObjects/utils.tsx @@ -42,7 +42,7 @@ interface IExtToIcon { extensions: string[]; } -export const extensionToIcon: IExtToIcon[] = [ +const extensionToIcon: IExtToIcon[] = [ { icon: , extensions: ["mp4", "mov", "avi", "mpeg", "mpg"], diff --git a/web-app/src/screens/Console/Buckets/ListBuckets/Objects/utils.ts b/web-app/src/screens/Console/Buckets/ListBuckets/Objects/utils.ts index 7030f07ec..64550b0de 100644 --- a/web-app/src/screens/Console/Buckets/ListBuckets/Objects/utils.ts +++ b/web-app/src/screens/Console/Buckets/ListBuckets/Objects/utils.ts @@ -16,7 +16,7 @@ import { BucketObjectItem } from "./ListObjects/types"; import { removeTrace } from "../../../ObjectBrowser/transferManager"; -import store from "../../../../../store"; +import { store } from "../../../../../store"; import { ContentType, PermissionResource } from "api/consoleApi"; import { api } from "../../../../../api"; import { setErrorSnackMessage } from "../../../../../systemSlice"; @@ -199,7 +199,7 @@ class BrowserDownload { } export type AllowedPreviews = "image" | "pdf" | "audio" | "video" | "none"; -export const contentTypePreview = (contentType: string): AllowedPreviews => { +const contentTypePreview = (contentType: string): AllowedPreviews => { if (contentType) { const mimeObjectType = (contentType || "").toLowerCase(); @@ -221,7 +221,7 @@ export const contentTypePreview = (contentType: string): AllowedPreviews => { }; // Review file extension by name & returns the type of preview browser that can be used -export const extensionPreview = (fileName: string): AllowedPreviews => { +const extensionPreview = (fileName: string): AllowedPreviews => { const imageExtensions = [ "jif", "jfif", diff --git a/web-app/src/screens/Console/Buckets/types.tsx b/web-app/src/screens/Console/Buckets/types.tsx index b8f1ab8b1..07a75447f 100644 --- a/web-app/src/screens/Console/Buckets/types.tsx +++ b/web-app/src/screens/Console/Buckets/types.tsx @@ -63,12 +63,12 @@ export interface LifeCycleItem { status?: string; } -export interface MultiBucketResult { +interface MultiBucketResult { bucketName: string; error?: string; } -export interface MultiBucketResult { +interface MultiBucketResult { results: MultiBucketResult[]; } diff --git a/web-app/src/screens/Console/Common/CredentialsPrompt/types.ts b/web-app/src/screens/Console/Common/CredentialsPrompt/types.ts index c85a050be..2ac10fb90 100644 --- a/web-app/src/screens/Console/Common/CredentialsPrompt/types.ts +++ b/web-app/src/screens/Console/Common/CredentialsPrompt/types.ts @@ -22,7 +22,7 @@ export interface NewServiceAccount { url?: string; } -export interface ConsoleSA { +interface ConsoleSA { accessKey: string; secretKey: string; url: string; diff --git a/web-app/src/screens/Console/Configurations/types.ts b/web-app/src/screens/Console/Configurations/types.ts index 5f3c7643e..a913e5ec4 100644 --- a/web-app/src/screens/Console/Configurations/types.ts +++ b/web-app/src/screens/Console/Configurations/types.ts @@ -17,7 +17,7 @@ import { SelectorTypes } from "../../../common/types"; import { EnvOverride } from "../../../api/consoleApi"; -export type KVFieldType = +type KVFieldType = | "string" | "password" | "number" diff --git a/web-app/src/screens/Console/Dashboard/BasicDashboard/StatusCountCard.tsx b/web-app/src/screens/Console/Dashboard/BasicDashboard/StatusCountCard.tsx index 33740677b..6ab6dd756 100644 --- a/web-app/src/screens/Console/Dashboard/BasicDashboard/StatusCountCard.tsx +++ b/web-app/src/screens/Console/Dashboard/BasicDashboard/StatusCountCard.tsx @@ -108,7 +108,7 @@ const StatusCountBase = styled.div(({ theme }) => ({ }, })); -export const StatusCountCard = ({ +const StatusCountCard = ({ onlineCount = 0, offlineCount = 0, icon = null, diff --git a/web-app/src/screens/Console/Dashboard/CommonCard.tsx b/web-app/src/screens/Console/Dashboard/CommonCard.tsx index b0425a579..9985083e1 100644 --- a/web-app/src/screens/Console/Dashboard/CommonCard.tsx +++ b/web-app/src/screens/Console/Dashboard/CommonCard.tsx @@ -21,7 +21,7 @@ import { Box } from "mds"; import { Link } from "react-router-dom"; import { widgetCommon } from "../Common/FormComponents/common/styleLibrary"; -export interface ISubInterface { +interface ISubInterface { message: string; fontWeight?: "normal" | "bold"; } diff --git a/web-app/src/screens/Console/Dashboard/Prometheus/Widgets/UptimeActivityRenderer.tsx b/web-app/src/screens/Console/Dashboard/Prometheus/Widgets/UptimeActivityRenderer.tsx index a0d3e5f5d..fd0fa7827 100644 --- a/web-app/src/screens/Console/Dashboard/Prometheus/Widgets/UptimeActivityRenderer.tsx +++ b/web-app/src/screens/Console/Dashboard/Prometheus/Widgets/UptimeActivityRenderer.tsx @@ -18,7 +18,7 @@ import React from "react"; import { Box } from "mds"; import TimeStatItem from "../../TimeStatItem"; -export type SimpleWidgetRenderProps = { +type SimpleWidgetRenderProps = { valueToRender?: any; loading?: boolean; title?: any; diff --git a/web-app/src/screens/Console/Dashboard/Prometheus/Widgets/types.ts b/web-app/src/screens/Console/Dashboard/Prometheus/Widgets/types.ts index cf4a09208..fc00801fe 100644 --- a/web-app/src/screens/Console/Dashboard/Prometheus/Widgets/types.ts +++ b/web-app/src/screens/Console/Dashboard/Prometheus/Widgets/types.ts @@ -36,7 +36,7 @@ export interface IPieChartConfiguration { strokeWidth?: number; } -export interface ISinglePieConfiguration { +interface ISinglePieConfiguration { colorList: string[]; startAngle?: number; endAngle?: number; diff --git a/web-app/src/screens/Console/Dashboard/dashboardSlice.ts b/web-app/src/screens/Console/Dashboard/dashboardSlice.ts index 383181b80..fab1c4c5d 100644 --- a/web-app/src/screens/Console/Dashboard/dashboardSlice.ts +++ b/web-app/src/screens/Console/Dashboard/dashboardSlice.ts @@ -20,7 +20,7 @@ import { IDashboardPanel } from "./Prometheus/types"; import { getUsageAsync } from "./dashboardThunks"; import { AdminInfoResponse } from "api/consoleApi"; -export interface DashboardState { +interface DashboardState { zoom: zoomState; usage: AdminInfoResponse | null; status: "idle" | "loading" | "failed"; @@ -36,7 +36,7 @@ const initialState: DashboardState = { usage: null, widgetLoadVersion: 0, }; -export const dashboardSlice = createSlice({ +const dashboardSlice = createSlice({ name: "dashboard", initialState, reducers: { diff --git a/web-app/src/screens/Console/EventDestinations/ConfTargetGeneric.tsx b/web-app/src/screens/Console/EventDestinations/ConfTargetGeneric.tsx index 5d23d943d..701ee968a 100644 --- a/web-app/src/screens/Console/EventDestinations/ConfTargetGeneric.tsx +++ b/web-app/src/screens/Console/EventDestinations/ConfTargetGeneric.tsx @@ -37,11 +37,7 @@ interface IConfGenericProps { // Function to get defined values, //we make this because the backed sometimes don't return all the keys when there is an initial configuration -export const valueDef = ( - key: string, - type: string, - defaults: IElementValue[], -) => { +const valueDef = (key: string, type: string, defaults: IElementValue[]) => { let defValue = type === "on|off" ? "off" : ""; if (defaults.length > 0) { diff --git a/web-app/src/screens/Console/EventDestinations/destinationsSlice.ts b/web-app/src/screens/Console/EventDestinations/destinationsSlice.ts index 2796d8fb6..c765390f0 100644 --- a/web-app/src/screens/Console/EventDestinations/destinationsSlice.ts +++ b/web-app/src/screens/Console/EventDestinations/destinationsSlice.ts @@ -16,7 +16,7 @@ import { createSlice, PayloadAction } from "@reduxjs/toolkit"; -export interface DestinationState { +interface DestinationState { loading: boolean; } @@ -24,7 +24,7 @@ const initialState: DestinationState = { loading: true, }; -export const destinationSlice = createSlice({ +const destinationSlice = createSlice({ name: "destination", initialState, reducers: { diff --git a/web-app/src/screens/Console/EventDestinations/utils.ts b/web-app/src/screens/Console/EventDestinations/utils.ts index 48d1a475b..45d64e537 100644 --- a/web-app/src/screens/Console/EventDestinations/utils.ts +++ b/web-app/src/screens/Console/EventDestinations/utils.ts @@ -20,14 +20,14 @@ import { TransformedEndpointItem } from "./types"; export const notifyPostgres = "notify_postgres"; export const notifyMysql = "notify_mysql"; -export const notifyKafka = "notify_kafka"; -export const notifyAmqp = "notify_amqp"; -export const notifyMqtt = "notify_mqtt"; -export const notifyRedis = "notify_redis"; -export const notifyNats = "notify_nats"; -export const notifyElasticsearch = "notify_elasticsearch"; -export const notifyWebhooks = "notify_webhook"; -export const notifyNsq = "notify_nsq"; +const notifyKafka = "notify_kafka"; +const notifyAmqp = "notify_amqp"; +const notifyMqtt = "notify_mqtt"; +const notifyRedis = "notify_redis"; +const notifyNats = "notify_nats"; +const notifyElasticsearch = "notify_elasticsearch"; +const notifyWebhooks = "notify_webhook"; +const notifyNsq = "notify_nsq"; export const notificationTransform = ( notificationElements: NotificationEndpointItem[], ) => { diff --git a/web-app/src/screens/Console/Groups/GroupsDetails.tsx b/web-app/src/screens/Console/Groups/GroupsDetails.tsx index db77ea190..fd9ba0c0a 100644 --- a/web-app/src/screens/Console/Groups/GroupsDetails.tsx +++ b/web-app/src/screens/Console/Groups/GroupsDetails.tsx @@ -64,7 +64,7 @@ import TooltipWrapper from "../Common/TooltipWrapper/TooltipWrapper"; import HelpMenu from "../HelpMenu"; import PageHeaderWrapper from "../Common/PageHeaderWrapper/PageHeaderWrapper"; -export const formatPolicy = (policy: string = ""): string[] => { +const formatPolicy = (policy: string = ""): string[] => { if (policy.length <= 0) return []; return policy.split(","); }; diff --git a/web-app/src/screens/Console/HealthInfo/healthInfoSlice.ts b/web-app/src/screens/Console/HealthInfo/healthInfoSlice.ts index 9cf03e459..ac9d504ec 100644 --- a/web-app/src/screens/Console/HealthInfo/healthInfoSlice.ts +++ b/web-app/src/screens/Console/HealthInfo/healthInfoSlice.ts @@ -16,7 +16,7 @@ import { createSlice, PayloadAction } from "@reduxjs/toolkit"; import { HealthInfoMessage } from "./types"; -export interface HealthInfoState { +interface HealthInfoState { message: HealthInfoMessage; } @@ -24,7 +24,7 @@ const initialState: HealthInfoState = { message: {} as HealthInfoMessage, }; -export const healthInfoSlice = createSlice({ +const healthInfoSlice = createSlice({ name: "trace", initialState, reducers: { diff --git a/web-app/src/screens/Console/HealthInfo/types.ts b/web-app/src/screens/Console/HealthInfo/types.ts index ef2522953..1637b31fd 100644 --- a/web-app/src/screens/Console/HealthInfo/types.ts +++ b/web-app/src/screens/Console/HealthInfo/types.ts @@ -32,28 +32,28 @@ export interface ReportMessage { subnetResponse: string; } -export interface perfInfo { +interface perfInfo { drives: serverDrivesInfo[]; net: serverNetHealthInfo[]; net_parallel: serverNetHealthInfo; error: string; } -export interface serverDrivesInfo { +interface serverDrivesInfo { addr: string; serial: drivePerfInfo[]; parallel: drivePerfInfo[]; error: string; } -export interface drivePerfInfo { +interface drivePerfInfo { endpoint: string; latency: diskLatency; throughput: diskThroughput; error: string; } -export interface diskLatency { +interface diskLatency { avg_secs: number; percentile50_secs: number; percentile90_secs: number; @@ -62,7 +62,7 @@ export interface diskLatency { max_secs: number; } -export interface diskThroughput { +interface diskThroughput { avg_bytes_per_sec: number; percentile50_bytes_per_sec: number; percentile90_bytes_per_sec: number; @@ -71,20 +71,20 @@ export interface diskThroughput { max_bytes_per_sec: number; } -export interface serverNetHealthInfo { +interface serverNetHealthInfo { addr: string; net: netPerfInfo[]; error: string; } -export interface netPerfInfo { +interface netPerfInfo { remote: string; latency: netLatency; throughput: netThroughput; error: string; } -export interface netLatency { +interface netLatency { avg_secs: number; percentile50_secs: number; percentile90_secs: number; @@ -93,7 +93,7 @@ export interface netLatency { max_secs: number; } -export interface netThroughput { +interface netThroughput { avg_bytes_per_sec: number; percentile50_bytes_per_sec: number; percentile90_bytes_per_sec: number; @@ -102,13 +102,13 @@ export interface netThroughput { max_bytes_per_sec: number; } -export interface minioHealthInfo { +interface minioHealthInfo { info: infoMessage; config: any; error: string; } -export interface infoMessage { +interface infoMessage { mode: string; domain: string[]; region: string; @@ -122,19 +122,19 @@ export interface infoMessage { servers: serverProperties[]; } -export interface buckets { +interface buckets { count: number; } -export interface objects { +interface objects { count: number; } -export interface usage { +interface usage { size: number; } -export interface services { +interface services { vault: vault; ldap: ldap; logger: Map[]; @@ -142,21 +142,21 @@ export interface services { notifications: Map[]>; } -export interface vault { +interface vault { status: string; encrypt: string; decrypt: string; } -export interface ldap { +interface ldap { status: string; } -export interface status { +interface status { status: string; } -export interface serverProperties { +interface serverProperties { state: string; endpoint: string; uptime: number; @@ -166,7 +166,7 @@ export interface serverProperties { drives: disk[]; } -export interface disk { +interface disk { endpoint: string; rootDisk: boolean; path: string; @@ -184,7 +184,7 @@ export interface disk { utilization: number; } -export interface sysHealthInfo { +interface sysHealthInfo { cpus: serverCpuInfo[]; drives: serverDiskHwInfo[]; osinfos: serverOsInfo[]; @@ -193,14 +193,14 @@ export interface sysHealthInfo { error: string; } -export interface serverCpuInfo { +interface serverCpuInfo { addr: string; cpu: cpuInfoStat[]; time: cpuTimeStat[]; error: string; } -export interface cpuInfoStat { +interface cpuInfoStat { cpu: number; vendorId: string; family: string; @@ -216,7 +216,7 @@ export interface cpuInfoStat { microcode: string; } -export interface cpuTimeStat { +interface cpuTimeStat { cpu: string; user: number; system: number; @@ -230,7 +230,7 @@ export interface cpuTimeStat { guestNice: number; } -export interface serverDiskHwInfo { +interface serverDiskHwInfo { addr: string; usages: diskUsageStat[]; partitions: partitionStat[]; @@ -238,7 +238,7 @@ export interface serverDiskHwInfo { error: string; } -export interface diskUsageStat { +interface diskUsageStat { path: string; fstype: string; total: number; @@ -251,7 +251,7 @@ export interface diskUsageStat { inodesUsedPercent: number; } -export interface partitionStat { +interface partitionStat { device: string; mountpoint: string; fstype: string; @@ -259,7 +259,7 @@ export interface partitionStat { smartInfo: smartInfo; } -export interface smartInfo { +interface smartInfo { device: string; scsi: scsiInfo; nvme: nvmeInfo; @@ -267,7 +267,7 @@ export interface smartInfo { error: string; } -export interface scsiInfo { +interface scsiInfo { scsiCapacityBytes: number; scsiModeSenseBuf: string; scsirespLen: number; @@ -276,7 +276,7 @@ export interface scsiInfo { sciRpm: number; } -export interface nvmeInfo { +interface nvmeInfo { serialNum: string; vendorId: string; firmwareVersion: string; @@ -297,7 +297,7 @@ export interface nvmeInfo { hostWriteCommands: number; } -export interface ataInfo { +interface ataInfo { scsiLuWWNDeviceID: string; serialNum: string; modelNum: string; @@ -311,7 +311,7 @@ export interface ataInfo { transport: string; } -export interface diskIOCountersStat { +interface diskIOCountersStat { readCount: number; mergedReadCount: number; DriteCount: number; @@ -328,7 +328,7 @@ export interface diskIOCountersStat { label: string; } -export interface serverOsInfo { +interface serverOsInfo { addr: string; info: infoStat; sensors: temperatureStat[]; @@ -336,7 +336,7 @@ export interface serverOsInfo { error: string; } -export interface infoStat { +interface infoStat { hostname: string; uptime: number; bootTime: number; @@ -352,26 +352,26 @@ export interface infoStat { hostid: string; } -export interface temperatureStat { +interface temperatureStat { sensorKey: string; sensorTemperature: number; } -export interface userStat { +interface userStat { user: string; terminal: string; host: string; started: number; } -export interface serverMemInfo { +interface serverMemInfo { addr: string; swap: swapMemoryStat; virtualmem: virtualMemoryStat; error: string; } -export interface swapMemoryStat { +interface swapMemoryStat { total: number; used: number; free: number; @@ -384,7 +384,7 @@ export interface swapMemoryStat { pgmajfault: number; } -export interface virtualMemoryStat { +interface virtualMemoryStat { total: number; available: number; used: number; @@ -422,13 +422,13 @@ export interface virtualMemoryStat { hugepagesize: number; } -export interface serverProcInfo { +interface serverProcInfo { addr: string; processes: sysProcess[]; error: string; } -export interface sysProcess { +interface sysProcess { pid: number; background: boolean; cpupercent: number; @@ -461,7 +461,7 @@ export interface sysProcess { username: string; } -export interface nethwConnectionStat { +interface nethwConnectionStat { fd: number; family: number; type: number; @@ -472,19 +472,19 @@ export interface nethwConnectionStat { pid: number; } -export interface netAddr { +interface netAddr { ip: string; port: number; } -export interface processIOCountersStat { +interface processIOCountersStat { readCount: number; writeCount: number; readBytes: number; writeBytes: number; } -export interface memoryInfoStat { +interface memoryInfoStat { rss: number; vms: number; hwm: number; @@ -494,7 +494,7 @@ export interface memoryInfoStat { swap: number; } -export interface nethwIOCounterStat { +interface nethwIOCounterStat { name: string; bytesSent: number; bytesRecv: number; @@ -508,19 +508,19 @@ export interface nethwIOCounterStat { fifoout: number; } -export interface processNmCtxSwitchesStat { +interface processNmCtxSwitchesStat { voluntary: number; involuntary: number; } -export interface processPageFaultsStat { +interface processPageFaultsStat { minorFaults: number; majorFaults: number; childMinorFaults: number; childMajorFaults: number; } -export interface processRLimitStat { +interface processRLimitStat { resource: number; soft: number; hard: number; diff --git a/web-app/src/screens/Console/License/licenseSlice.ts b/web-app/src/screens/Console/License/licenseSlice.ts index c2bc54dd1..314f13dca 100644 --- a/web-app/src/screens/Console/License/licenseSlice.ts +++ b/web-app/src/screens/Console/License/licenseSlice.ts @@ -16,7 +16,7 @@ import { createSlice } from "@reduxjs/toolkit"; -export interface IAddPool { +interface IAddPool { faqModalOpen: boolean; } @@ -24,7 +24,7 @@ const initialState: IAddPool = { faqModalOpen: false, }; -export const licenseSlice = createSlice({ +const licenseSlice = createSlice({ name: "license", initialState, reducers: { @@ -37,6 +37,4 @@ export const licenseSlice = createSlice({ }, }); -export const { openFAQModal, closeFAQModal } = licenseSlice.actions; - export default licenseSlice.reducer; diff --git a/web-app/src/screens/Console/License/utils.tsx b/web-app/src/screens/Console/License/utils.tsx index 811f61140..173d007a6 100644 --- a/web-app/src/screens/Console/License/utils.tsx +++ b/web-app/src/screens/Console/License/utils.tsx @@ -17,7 +17,7 @@ import React from "react"; import { ApplicationLogo } from "mds"; -export interface LicensePlanOption { +interface LicensePlanOption { planId: string; planName: string; planType: "commercial" | "open-source"; @@ -25,7 +25,7 @@ export interface LicensePlanOption { planDescription: React.ReactNode; } -export interface FeatureElementObject { +interface FeatureElementObject { [name: string]: FeatureItem; } @@ -34,7 +34,7 @@ export interface FeatureItem { isCheck?: boolean; } -export interface PlansFeatures { +interface PlansFeatures { featureLabel: string; featurePlans: FeatureElementObject; } @@ -225,7 +225,7 @@ export const LICENSE_PLANS_INFORMATION: LicensePlanOption[] = [ }, ]; -export const LICENSE_CONSENT_STORE_KEY = "agpl_minio_license_consent"; +const LICENSE_CONSENT_STORE_KEY = "agpl_minio_license_consent"; export const setLicenseConsent = () => { localStorage.setItem(LICENSE_CONSENT_STORE_KEY, "true"); }; diff --git a/web-app/src/screens/Console/Logs/logsSlice.ts b/web-app/src/screens/Console/Logs/logsSlice.ts index 83d4601ee..e2e2d6f30 100644 --- a/web-app/src/screens/Console/Logs/logsSlice.ts +++ b/web-app/src/screens/Console/Logs/logsSlice.ts @@ -18,7 +18,7 @@ import { createSlice, PayloadAction } from "@reduxjs/toolkit"; import { LogMessage } from "./types"; import { DateTime } from "luxon"; -export interface LogState { +interface LogState { logMessages: LogMessage[]; logsStarted: boolean; } @@ -28,7 +28,7 @@ const initialState: LogState = { logsStarted: false, }; -export const logsSlice = createSlice({ +const logsSlice = createSlice({ name: "logs", initialState, reducers: { diff --git a/web-app/src/screens/Console/Logs/types.ts b/web-app/src/screens/Console/Logs/types.ts index e1e3c4db0..86469fff2 100644 --- a/web-app/src/screens/Console/Logs/types.ts +++ b/web-app/src/screens/Console/Logs/types.ts @@ -14,17 +14,17 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -export interface logError { +interface logError { message: string; source: string[]; } -export interface logErrorApiArgs { +interface logErrorApiArgs { bucket: string; object: string; } -export interface logErrorApi { +interface logErrorApi { name: string; args: logErrorApiArgs; } diff --git a/web-app/src/screens/Console/ObjectBrowser/objectBrowserSlice.ts b/web-app/src/screens/Console/ObjectBrowser/objectBrowserSlice.ts index 6a7f838d0..2e59505eb 100644 --- a/web-app/src/screens/Console/ObjectBrowser/objectBrowserSlice.ts +++ b/web-app/src/screens/Console/ObjectBrowser/objectBrowserSlice.ts @@ -80,7 +80,7 @@ const initialState: ObjectBrowserState = { maxShareLinkExpTime: 0, }; -export const objectBrowserSlice = createSlice({ +const objectBrowserSlice = createSlice({ name: "objectBrowser", initialState, reducers: { @@ -398,7 +398,6 @@ export const { cleanList, toggleList, openList, - closeList, setSearchObjects, setRequestInProgress, cancelObjectInList, diff --git a/web-app/src/screens/Console/ObjectBrowser/types.ts b/web-app/src/screens/Console/ObjectBrowser/types.ts index db2f84fe5..de1db4c89 100644 --- a/web-app/src/screens/Console/ObjectBrowser/types.ts +++ b/web-app/src/screens/Console/ObjectBrowser/types.ts @@ -20,7 +20,7 @@ import { GetBucketRetentionConfig, } from "api/consoleApi"; -export interface RewindItem { +interface RewindItem { rewindEnabled: boolean; bucketToRewind: string; dateToRewind: string | null; @@ -60,7 +60,7 @@ export interface ObjectBrowserState { maxShareLinkExpTime: number; } -export interface ObjectManager { +interface ObjectManager { objectsToManage: IFileItem[]; managerOpen: boolean; newItems: boolean; diff --git a/web-app/src/screens/Console/Speedtest/types.ts b/web-app/src/screens/Console/Speedtest/types.ts index 9d3158ef8..58292857a 100644 --- a/web-app/src/screens/Console/Speedtest/types.ts +++ b/web-app/src/screens/Console/Speedtest/types.ts @@ -24,7 +24,7 @@ export interface SpeedTestResponse { GETStats?: STStats; } -export interface STStats { +interface STStats { throughputPerSec: number; objectsPerSec: number; servers: STServer[] | null; diff --git a/web-app/src/screens/Console/Support/registerSlice.ts b/web-app/src/screens/Console/Support/registerSlice.ts index 389901d69..015ed2a20 100644 --- a/web-app/src/screens/Console/Support/registerSlice.ts +++ b/web-app/src/screens/Console/Support/registerSlice.ts @@ -17,7 +17,7 @@ import { createSlice, PayloadAction } from "@reduxjs/toolkit"; import { SubnetInfo, SubnetOrganization } from "../License/types"; -export interface RegisterState { +interface RegisterState { license: string; subnetPassword: string; subnetEmail: string; @@ -51,7 +51,7 @@ const initialState: RegisterState = { curTab: "simple-tab-0", }; -export const registerSlice = createSlice({ +const registerSlice = createSlice({ name: "register", initialState, reducers: { @@ -106,7 +106,6 @@ export const registerSlice = createSlice({ // Action creators are generated for each case reducer function export const { - setLicense, setSubnetPassword, setSubnetEmail, setSubnetMFAToken, diff --git a/web-app/src/screens/Console/Support/registerThunks.ts b/web-app/src/screens/Console/Support/registerThunks.ts index ec95c5c84..f20b3e477 100644 --- a/web-app/src/screens/Console/Support/registerThunks.ts +++ b/web-app/src/screens/Console/Support/registerThunks.ts @@ -91,7 +91,7 @@ export const fetchLicenseInfo = createAsyncThunk( }, ); -export interface ClassRegisterArgs { +interface ClassRegisterArgs { token: string; account_id: string; } diff --git a/web-app/src/screens/Console/Trace/traceSlice.ts b/web-app/src/screens/Console/Trace/traceSlice.ts index b8bbda568..356e183eb 100644 --- a/web-app/src/screens/Console/Trace/traceSlice.ts +++ b/web-app/src/screens/Console/Trace/traceSlice.ts @@ -17,7 +17,7 @@ import { createSlice, PayloadAction } from "@reduxjs/toolkit"; import { TraceMessage } from "./types"; -export interface TraceState { +interface TraceState { messages: TraceMessage[]; traceStarted: boolean; } @@ -27,7 +27,7 @@ const initialState: TraceState = { traceStarted: false, }; -export const traceSlice = createSlice({ +const traceSlice = createSlice({ name: "trace", initialState, reducers: { diff --git a/web-app/src/screens/Console/Trace/types.ts b/web-app/src/screens/Console/Trace/types.ts index 2d3a4fb2e..9c9937564 100644 --- a/web-app/src/screens/Console/Trace/types.ts +++ b/web-app/src/screens/Console/Trace/types.ts @@ -14,7 +14,7 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -export interface CallStats { +interface CallStats { timeToFirstByte: string; rx: number; tx: number; diff --git a/web-app/src/screens/Console/Users/AddUsersSlice.tsx b/web-app/src/screens/Console/Users/AddUsersSlice.tsx index 9c6999e2c..c183ec3e3 100644 --- a/web-app/src/screens/Console/Users/AddUsersSlice.tsx +++ b/web-app/src/screens/Console/Users/AddUsersSlice.tsx @@ -17,7 +17,7 @@ import { createSlice, PayloadAction } from "@reduxjs/toolkit"; import { createUserAsync, resetFormAsync } from "./thunk/AddUsersThunk"; -export interface ICreateUser { +interface ICreateUser { userName: string; secretKey: string; selectedGroups: string[]; @@ -39,7 +39,7 @@ const initialState: ICreateUser = { secretKeylength: 0, }; -export const createUserSlice = createSlice({ +const createUserSlice = createSlice({ name: "createUser", initialState, reducers: { @@ -93,7 +93,6 @@ export const { setSelectedPolicies, setAddLoading, setSendEnabled, - setApinoerror, } = createUserSlice.actions; export default createUserSlice.reducer; diff --git a/web-app/src/screens/Console/Watch/types.ts b/web-app/src/screens/Console/Watch/types.ts index 7c392c87b..9d6c8462b 100644 --- a/web-app/src/screens/Console/Watch/types.ts +++ b/web-app/src/screens/Console/Watch/types.ts @@ -31,7 +31,7 @@ export interface Bucket { name: string; } -export interface Details { +interface Details { tags: object; } diff --git a/web-app/src/screens/Console/Watch/watchSlice.ts b/web-app/src/screens/Console/Watch/watchSlice.ts index d324dc358..4bc71a4e6 100644 --- a/web-app/src/screens/Console/Watch/watchSlice.ts +++ b/web-app/src/screens/Console/Watch/watchSlice.ts @@ -17,7 +17,7 @@ import { createSlice, PayloadAction } from "@reduxjs/toolkit"; import { EventInfo } from "./types"; -export interface WatchState { +interface WatchState { messages: EventInfo[]; } @@ -25,7 +25,7 @@ const initialState: WatchState = { messages: [], }; -export const watchSlice = createSlice({ +const watchSlice = createSlice({ name: "trace", initialState, reducers: { diff --git a/web-app/src/screens/Console/consoleSlice.ts b/web-app/src/screens/Console/consoleSlice.ts index 627402911..0f93874ae 100644 --- a/web-app/src/screens/Console/consoleSlice.ts +++ b/web-app/src/screens/Console/consoleSlice.ts @@ -20,7 +20,7 @@ import { AppState } from "../../store"; import { fetchSession } from "../../screens/LoginPage/sessionThunk"; import { SessionCallStates } from "./consoleSlice.types"; -export interface ConsoleState { +interface ConsoleState { session: SessionResponse; sessionLoadingState: SessionCallStates; } @@ -30,7 +30,7 @@ const initialState: ConsoleState = { sessionLoadingState: SessionCallStates.Initial, }; -export const consoleSlice = createSlice({ +const consoleSlice = createSlice({ name: "console", initialState, reducers: { diff --git a/web-app/src/screens/LoginPage/loginSlice.ts b/web-app/src/screens/LoginPage/loginSlice.ts index dd4de6f9c..b3451a6b1 100644 --- a/web-app/src/screens/LoginPage/loginSlice.ts +++ b/web-app/src/screens/LoginPage/loginSlice.ts @@ -18,7 +18,7 @@ import { createSlice, PayloadAction } from "@reduxjs/toolkit"; import { LoginDetails } from "api/consoleApi"; import { doLoginAsync, getFetchConfigurationAsync } from "./loginThunks"; -export interface LoginState { +interface LoginState { accessKey: string; secretKey: string; sts: string; @@ -49,7 +49,7 @@ const initialState: LoginState = { ssoEmbeddedIDPDisplay: false, }; -export const loginSlice = createSlice({ +const loginSlice = createSlice({ name: "login", initialState, reducers: { diff --git a/web-app/src/serviceWorker.ts b/web-app/src/serviceWorker.ts deleted file mode 100644 index 16eaf8af9..000000000 --- a/web-app/src/serviceWorker.ts +++ /dev/null @@ -1,143 +0,0 @@ -// This optional code is used to register a service worker. -// register() is not called by default. - -// This lets the app load faster on subsequent visits in production, and gives -// it offline capabilities. However, it also means that developers (and users) -// will only see deployed updates on subsequent visits to a page, after all the -// existing tabs open on the page have been closed, since previously cached -// resources are updated in the background. - -// To learn more about the benefits of this model and instructions on how to -// opt-in, read https://bit.ly/CRA-PWA - -const isLocalhost = Boolean( - window.location.hostname === "localhost" || - // [::1] is the IPv6 localhost address. - window.location.hostname === "[::1]" || - // 127.0.0.1/8 is considered localhost for IPv4. - window.location.hostname.match( - /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/, - ), -); - -type Config = { - onSuccess?: (registration: ServiceWorkerRegistration) => void; - onUpdate?: (registration: ServiceWorkerRegistration) => void; -}; - -export function register(config?: Config) { - if (process.env.NODE_ENV === "production" && "serviceWorker" in navigator) { - // The URL constructor is available in all browsers that support SW. - const publicUrl = new URL( - (process as { env: { [key: string]: string } }).env.PUBLIC_URL, - window.location.href, - ); - if (publicUrl.origin !== window.location.origin) { - // Our service worker won't work if PUBLIC_URL is on a different origin - // from what our page is served on. This might happen if a CDN is used to - // serve assets; see https://github.com/facebook/create-react-app/issues/2374 - return; - } - - window.addEventListener("load", () => { - const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`; - - if (isLocalhost) { - // This is running on localhost. Let's check if a service worker still exists or not. - checkValidServiceWorker(swUrl, config); - - // Add some additional logging to localhost, pointing developers to the - // service worker/PWA documentation. - navigator.serviceWorker.ready.then(() => { - console.log( - "This web app is being served cache-first by a service " + - "worker. To learn more, visit https://bit.ly/CRA-PWA", - ); - }); - } else { - // Is not localhost. Just register service worker - registerValidSW(swUrl, config); - } - }); - } -} - -function registerValidSW(swUrl: string, config?: Config) { - navigator.serviceWorker - .register(swUrl) - .then((registration) => { - registration.onupdatefound = () => { - const installingWorker = registration.installing; - if (installingWorker === null) { - return; - } - installingWorker.onstatechange = () => { - if (installingWorker.state === "installed") { - if (navigator.serviceWorker.controller) { - // At this point, the updated precached content has been fetched, - // but the previous service worker will still serve the older - // content until all client tabs are closed. - console.log( - "New content is available and will be used when all " + - "tabs for this page are closed. See https://bit.ly/CRA-PWA.", - ); - - // Execute callback - if (config && config.onUpdate) { - config.onUpdate(registration); - } - } else { - // At this point, everything has been precached. - // It's the perfect time to display a - // "Content is cached for offline use." message. - console.log("Content is cached for offline use."); - - // Execute callback - if (config && config.onSuccess) { - config.onSuccess(registration); - } - } - } - }; - }; - }) - .catch((error) => { - console.error("Error during service worker registration:", error); - }); -} - -function checkValidServiceWorker(swUrl: string, config?: Config) { - // Check if the service worker can be found. If it can't reload the page. - fetch(swUrl) - .then((response) => { - // Ensure service worker exists, and that we really are getting a JS file. - const contentType = response.headers.get("content-type"); - if ( - response.status === 404 || - (contentType !== null && contentType.indexOf("javascript") === -1) - ) { - // No service worker found. Probably a different app. Reload the page. - navigator.serviceWorker.ready.then((registration) => { - registration.unregister().then(() => { - window.location.reload(); - }); - }); - } else { - // Service worker found. Proceed as normal. - registerValidSW(swUrl, config); - } - }) - .catch(() => { - console.log( - "No internet connection found. App is running in offline mode.", - ); - }); -} - -export function unregister() { - if ("serviceWorker" in navigator) { - navigator.serviceWorker.ready.then((registration) => { - registration.unregister(); - }); - } -} diff --git a/web-app/src/store.ts b/web-app/src/store.ts index de966a0f7..a266d9875 100644 --- a/web-app/src/store.ts +++ b/web-app/src/store.ts @@ -69,8 +69,6 @@ if (process.env.NODE_ENV !== "production" && module.hot) { export type AppState = ReturnType; export type AppDispatch = typeof store.dispatch; -export type RootState = ReturnType; +type RootState = ReturnType; export const useAppDispatch = () => useDispatch(); export const useAppSelector: TypedUseSelectorHook = useSelector; - -export default store; diff --git a/web-app/src/systemSlice.ts b/web-app/src/systemSlice.ts index abefbd4f3..2bda456ee 100644 --- a/web-app/src/systemSlice.ts +++ b/web-app/src/systemSlice.ts @@ -25,7 +25,7 @@ const initSideBarOpen = localStorage.getItem("sidebarOpen") ? JSON.parse(localStorage.getItem("sidebarOpen")!)["open"] : true; -export interface SystemState { +interface SystemState { value: number; loggedIn: boolean; showMarketplace: boolean; @@ -81,7 +81,7 @@ const initialState: SystemState = { darkMode: isDarkModeOn(), }; -export const systemSlice = createSlice({ +const systemSlice = createSlice({ name: "system", initialState, reducers: { @@ -189,11 +189,9 @@ export const systemSlice = createSlice({ // Action creators are generated for each case reducer function export const { userLogged, - showMarketplace, menuOpen, setServerNeedsRestart, serverIsLoading, - setLoadingProgress, setSnackBarMessage, setErrorSnackMessage, setModalErrorSnackMessage, @@ -201,7 +199,6 @@ export const { setServerDiagStat, globalSetDistributedSetup, setSiteReplicationInfo, - setSystemLicenseInfo, setOverrideStyles, setAnonymousMode, resetSystem, diff --git a/web-app/yarn.lock b/web-app/yarn.lock index e5e5e4ec5..6502e5260 100644 --- a/web-app/yarn.lock +++ b/web-app/yarn.lock @@ -2163,6 +2163,15 @@ __metadata: languageName: node linkType: hard +"@jest/expect-utils@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/expect-utils@npm:29.7.0" + dependencies: + jest-get-type: "npm:^29.6.3" + checksum: 10c0/60b79d23a5358dc50d9510d726443316253ecda3a7fb8072e1526b3e0d3b14f066ee112db95699b7a43ad3f0b61b750c72e28a5a1cac361d7a2bb34747fa938a + languageName: node + linkType: hard + "@jest/fake-timers@npm:^27.5.1": version: 27.5.1 resolution: "@jest/fake-timers@npm:27.5.1" @@ -2341,6 +2350,20 @@ __metadata: languageName: node linkType: hard +"@jest/types@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/types@npm:29.6.3" + dependencies: + "@jest/schemas": "npm:^29.6.3" + "@types/istanbul-lib-coverage": "npm:^2.0.0" + "@types/istanbul-reports": "npm:^3.0.0" + "@types/node": "npm:*" + "@types/yargs": "npm:^17.0.8" + chalk: "npm:^4.0.0" + checksum: 10c0/ea4e493dd3fb47933b8ccab201ae573dcc451f951dc44ed2a86123cd8541b82aa9d2b1031caf9b1080d6673c517e2dcc25a44b2dc4f3fbc37bfc965d444888c0 + languageName: node + linkType: hard + "@jridgewell/gen-mapping@npm:^0.3.2, @jridgewell/gen-mapping@npm:^0.3.5": version: 0.3.5 resolution: "@jridgewell/gen-mapping@npm:0.3.5" @@ -2445,7 +2468,7 @@ __metadata: languageName: node linkType: hard -"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": +"@nodelib/fs.walk@npm:1.2.8, @nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": version: 1.2.8 resolution: "@nodelib/fs.walk@npm:1.2.8" dependencies: @@ -2734,6 +2757,19 @@ __metadata: languageName: node linkType: hard +"@snyk/github-codeowners@npm:1.1.0": + version: 1.1.0 + resolution: "@snyk/github-codeowners@npm:1.1.0" + dependencies: + commander: "npm:^4.1.1" + ignore: "npm:^5.1.8" + p-map: "npm:^4.0.0" + bin: + github-codeowners: dist/cli.js + checksum: 10c0/92d860a904a1e67f8563d4ac4d540cc613f71193f7968933b4a4b1526e80a97f536f52d27762c158e3e39d48c2f3db4906ec78846309351c741abb1a28653af9 + languageName: node + linkType: hard + "@storybook/csf@npm:0.1.11": version: 0.1.11 resolution: "@storybook/csf@npm:0.1.11" @@ -2996,18 +3032,6 @@ __metadata: languageName: node linkType: hard -"@ts-morph/common@npm:~0.12.3": - version: 0.12.3 - resolution: "@ts-morph/common@npm:0.12.3" - dependencies: - fast-glob: "npm:^3.2.7" - minimatch: "npm:^3.0.4" - mkdirp: "npm:^1.0.4" - path-browserify: "npm:^1.0.1" - checksum: 10c0/2a0b25128eca547cfdf4795d39e7d6e15c81008b74867ccdda9d0d9c1b0eaca534d6d729220572e726a811786efa3c38f3b6a482d3fc970d3bf0acea39a7248f - languageName: node - linkType: hard - "@types/aria-query@npm:^5.0.1": version: 5.0.4 resolution: "@types/aria-query@npm:5.0.4" @@ -3355,6 +3379,16 @@ __metadata: languageName: node linkType: hard +"@types/jest@npm:^29.5.12": + version: 29.5.12 + resolution: "@types/jest@npm:29.5.12" + dependencies: + expect: "npm:^29.0.0" + pretty-format: "npm:^29.0.0" + checksum: 10c0/25fc8e4c611fa6c4421e631432e9f0a6865a8cb07c9815ec9ac90d630271cad773b2ee5fe08066f7b95bebd18bb967f8ce05d018ee9ab0430f9dfd1d84665b6f + languageName: node + linkType: hard + "@types/json-schema@npm:*, @types/json-schema@npm:^7.0.4, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" @@ -5605,6 +5639,13 @@ __metadata: languageName: node linkType: hard +"clone@npm:^1.0.2": + version: 1.0.4 + resolution: "clone@npm:1.0.4" + checksum: 10c0/2176952b3649293473999a95d7bebfc9dc96410f6cbd3d2595cf12fd401f63a4bf41a7adbfd3ab2ff09ed60cb9870c58c6acdd18b87767366fabfc163700f13b + languageName: node + linkType: hard + "clsx@npm:^1.0.4": version: 1.2.1 resolution: "clsx@npm:1.2.1" @@ -5612,7 +5653,7 @@ __metadata: languageName: node linkType: hard -"clsx@npm:^2.0.0": +"clsx@npm:^2.0.0, clsx@npm:^2.1.1": version: 2.1.1 resolution: "clsx@npm:2.1.1" checksum: 10c0/c4c8eb865f8c82baab07e71bfa8897c73454881c4f99d6bc81585aecd7c441746c1399d08363dc096c550cceaf97bd4ce1e8854e1771e9998d9f94c4fe075839 @@ -5637,13 +5678,6 @@ __metadata: languageName: node linkType: hard -"code-block-writer@npm:^11.0.0": - version: 11.0.3 - resolution: "code-block-writer@npm:11.0.3" - checksum: 10c0/12fe4c02152a2b607e8913b39dcc31dcb5240f7c8933a3335d4e42a5418af409bf7ed454c80d6d8c12f9c59bb685dd88f9467874b46be62236dfbed446d03fd6 - languageName: node - linkType: hard - "coffeescript@npm:^2.3.1": version: 2.7.0 resolution: "coffeescript@npm:2.7.0" @@ -5746,7 +5780,7 @@ __metadata: languageName: node linkType: hard -"commander@npm:^4.0.0": +"commander@npm:^4.0.0, commander@npm:^4.1.1": version: 4.1.1 resolution: "commander@npm:4.1.1" checksum: 10c0/84a76c08fe6cc08c9c93f62ac573d2907d8e79138999312c92d4155bc2325d487d64d13f669b2000c9f8caf70493c1be2dac74fec3c51d5a04f8bc3ae1830bab @@ -5760,13 +5794,6 @@ __metadata: languageName: node linkType: hard -"commander@npm:^6.2.1": - version: 6.2.1 - resolution: "commander@npm:6.2.1" - checksum: 10c0/85748abd9d18c8bc88febed58b98f66b7c591d9b5017cad459565761d7b29ca13b7783ea2ee5ce84bf235897333706c4ce29adf1ce15c8252780e7000e2ce9ea - languageName: node - linkType: hard - "commander@npm:^7.2.0": version: 7.2.0 resolution: "commander@npm:7.2.0" @@ -5964,7 +5991,7 @@ __metadata: languageName: node linkType: hard -"cosmiconfig@npm:^7.0.0, cosmiconfig@npm:^7.0.1": +"cosmiconfig@npm:^7.0.0": version: 7.1.0 resolution: "cosmiconfig@npm:7.1.0" dependencies: @@ -6625,6 +6652,15 @@ __metadata: languageName: node linkType: hard +"defaults@npm:^1.0.3": + version: 1.0.4 + resolution: "defaults@npm:1.0.4" + dependencies: + clone: "npm:^1.0.2" + checksum: 10c0/9cfbe498f5c8ed733775db62dfd585780387d93c17477949e1670bfcfb9346e0281ce8c4bf9f4ac1fc0f9b851113bd6dc9e41182ea1644ccd97de639fa13c35a + languageName: node + linkType: hard + "define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4": version: 1.1.4 resolution: "define-data-property@npm:1.1.4" @@ -7035,6 +7071,19 @@ __metadata: languageName: node linkType: hard +"easy-table@npm:1.2.0": + version: 1.2.0 + resolution: "easy-table@npm:1.2.0" + dependencies: + ansi-regex: "npm:^5.0.1" + wcwidth: "npm:^1.0.1" + dependenciesMeta: + wcwidth: + optional: true + checksum: 10c0/2d37937cd608586ba02e1ec479f90ccec581d366b3b0d1bb26b99ee6005f8d724e32a07a873759893461ca45b99e2d08c30326529d967ce9eedc1e9b68d4aa63 + languageName: node + linkType: hard + "ee-first@npm:1.1.1": version: 1.1.1 resolution: "ee-first@npm:1.1.1" @@ -7151,6 +7200,16 @@ __metadata: languageName: node linkType: hard +"enhanced-resolve@npm:^5.17.1": + version: 5.17.1 + resolution: "enhanced-resolve@npm:5.17.1" + dependencies: + graceful-fs: "npm:^4.2.4" + tapable: "npm:^2.2.0" + checksum: 10c0/81a0515675eca17efdba2cf5bad87abc91a528fc1191aad50e275e74f045b41506167d420099022da7181c8d787170ea41e4a11a0b10b7a16f6237daecb15370 + languageName: node + linkType: hard + "entities@npm:^2.0.0": version: 2.2.0 resolution: "entities@npm:2.2.0" @@ -7893,6 +7952,19 @@ __metadata: languageName: node linkType: hard +"expect@npm:^29.0.0": + version: 29.7.0 + resolution: "expect@npm:29.7.0" + dependencies: + "@jest/expect-utils": "npm:^29.7.0" + jest-get-type: "npm:^29.6.3" + jest-matcher-utils: "npm:^29.7.0" + jest-message-util: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + checksum: 10c0/2eddeace66e68b8d8ee5f7be57f3014b19770caaf6815c7a08d131821da527fb8c8cb7b3dcd7c883d2d3d8d184206a4268984618032d1e4b16dc8d6596475d41 + languageName: node + linkType: hard + "exponential-backoff@npm:^3.1.1": version: 3.1.1 resolution: "exponential-backoff@npm:3.1.1" @@ -7967,7 +8039,7 @@ __metadata: languageName: node linkType: hard -"fast-glob@npm:^3.0.3, fast-glob@npm:^3.2.7, fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.0": +"fast-glob@npm:^3.0.3, fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.0, fast-glob@npm:^3.3.2": version: 3.3.2 resolution: "fast-glob@npm:3.3.2" dependencies: @@ -9278,7 +9350,7 @@ __metadata: languageName: node linkType: hard -"http-status-codes@npm:^2.2.0": +"http-status-codes@npm:^2.2.0, http-status-codes@npm:^2.3.0": version: 2.3.0 resolution: "http-status-codes@npm:2.3.0" checksum: 10c0/c2412188929e8eed6623eef468c62d0c3c082919c03e9b74fd79cfd060d11783dba44603e38a3cee52d26563fe32005913eaf6120aa8ba907da1238f3eaad5fe @@ -9404,6 +9476,13 @@ __metadata: languageName: node linkType: hard +"ignore@npm:^5.1.8": + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 + languageName: node + linkType: hard + "immer@npm:^9.0.21, immer@npm:^9.0.7": version: 9.0.21 resolution: "immer@npm:9.0.21" @@ -10300,6 +10379,18 @@ __metadata: languageName: node linkType: hard +"jest-diff@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-diff@npm:29.7.0" + dependencies: + chalk: "npm:^4.0.0" + diff-sequences: "npm:^29.6.3" + jest-get-type: "npm:^29.6.3" + pretty-format: "npm:^29.7.0" + checksum: 10c0/89a4a7f182590f56f526443dde69acefb1f2f0c9e59253c61d319569856c4931eae66b8a3790c443f529267a0ddba5ba80431c585deed81827032b2b2a1fc999 + languageName: node + linkType: hard + "jest-docblock@npm:^27.5.1": version: 27.5.1 resolution: "jest-docblock@npm:27.5.1" @@ -10358,6 +10449,13 @@ __metadata: languageName: node linkType: hard +"jest-get-type@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-get-type@npm:29.6.3" + checksum: 10c0/552e7a97a983d3c2d4e412a44eb7de0430ff773dd99f7500962c268d6dfbfa431d7d08f919c9d960530e5f7f78eb47f267ad9b318265e5092b3ff9ede0db7c2b + languageName: node + linkType: hard + "jest-haste-map@npm:^27.5.1": version: 27.5.1 resolution: "jest-haste-map@npm:27.5.1" @@ -10429,6 +10527,18 @@ __metadata: languageName: node linkType: hard +"jest-matcher-utils@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-matcher-utils@npm:29.7.0" + dependencies: + chalk: "npm:^4.0.0" + jest-diff: "npm:^29.7.0" + jest-get-type: "npm:^29.6.3" + pretty-format: "npm:^29.7.0" + checksum: 10c0/0d0e70b28fa5c7d4dce701dc1f46ae0922102aadc24ed45d594dd9b7ae0a8a6ef8b216718d1ab79e451291217e05d4d49a82666e1a3cc2b428b75cd9c933244e + languageName: node + linkType: hard + "jest-message-util@npm:^27.5.1": version: 27.5.1 resolution: "jest-message-util@npm:27.5.1" @@ -10463,6 +10573,23 @@ __metadata: languageName: node linkType: hard +"jest-message-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-message-util@npm:29.7.0" + dependencies: + "@babel/code-frame": "npm:^7.12.13" + "@jest/types": "npm:^29.6.3" + "@types/stack-utils": "npm:^2.0.0" + chalk: "npm:^4.0.0" + graceful-fs: "npm:^4.2.9" + micromatch: "npm:^4.0.4" + pretty-format: "npm:^29.7.0" + slash: "npm:^3.0.0" + stack-utils: "npm:^2.0.3" + checksum: 10c0/850ae35477f59f3e6f27efac5215f706296e2104af39232bb14e5403e067992afb5c015e87a9243ec4d9df38525ef1ca663af9f2f4766aa116f127247008bd22 + languageName: node + linkType: hard + "jest-mock@npm:^27.5.1": version: 27.5.1 resolution: "jest-mock@npm:27.5.1" @@ -10655,6 +10782,20 @@ __metadata: languageName: node linkType: hard +"jest-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-util@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + ci-info: "npm:^3.2.0" + graceful-fs: "npm:^4.2.9" + picomatch: "npm:^2.2.3" + checksum: 10c0/bc55a8f49fdbb8f51baf31d2a4f312fb66c9db1483b82f602c9c990e659cdd7ec529c8e916d5a89452ecbcfae4949b21b40a7a59d4ffc0cd813a973ab08c8150 + languageName: node + linkType: hard + "jest-validate@npm:^27.5.1": version: 27.5.1 resolution: "jest-validate@npm:27.5.1" @@ -10777,6 +10918,15 @@ __metadata: languageName: node linkType: hard +"jiti@npm:^1.21.6": + version: 1.21.6 + resolution: "jiti@npm:1.21.6" + bin: + jiti: bin/jiti.js + checksum: 10c0/05b9ed58cd30d0c3ccd3c98209339e74f50abd9a17e716f65db46b6a35812103f6bde6e134be7124d01745586bca8cc5dae1d0d952267c3ebe55171949c32e56 + languageName: node + linkType: hard + "js-md4@npm:^0.3.2": version: 0.3.2 resolution: "js-md4@npm:0.3.2" @@ -10939,7 +11089,7 @@ __metadata: languageName: node linkType: hard -"json5@npm:^2.1.2, json5@npm:^2.1.3, json5@npm:^2.2.0, json5@npm:^2.2.2, json5@npm:^2.2.3": +"json5@npm:^2.1.2, json5@npm:^2.2.0, json5@npm:^2.2.2, json5@npm:^2.2.3": version: 2.2.3 resolution: "json5@npm:2.2.3" bin: @@ -11069,6 +11219,36 @@ __metadata: languageName: node linkType: hard +"knip@npm:^5.27.2": + version: 5.27.2 + resolution: "knip@npm:5.27.2" + dependencies: + "@nodelib/fs.walk": "npm:1.2.8" + "@snyk/github-codeowners": "npm:1.1.0" + easy-table: "npm:1.2.0" + enhanced-resolve: "npm:^5.17.1" + fast-glob: "npm:^3.3.2" + jiti: "npm:^1.21.6" + js-yaml: "npm:^4.1.0" + minimist: "npm:^1.2.8" + picocolors: "npm:^1.0.0" + picomatch: "npm:^4.0.1" + pretty-ms: "npm:^9.0.0" + smol-toml: "npm:^1.1.4" + strip-json-comments: "npm:5.0.1" + summary: "npm:2.1.0" + zod: "npm:^3.22.4" + zod-validation-error: "npm:^3.0.3" + peerDependencies: + "@types/node": ">=18" + typescript: ">=5.0.4" + bin: + knip: bin/knip.js + knip-bun: bin/knip-bun.js + checksum: 10c0/24bc334edbd705cfd0d78dc66517d806161974b45f707555ddc88887772022bc949dca84b06f42573a8fd49ede206f7611e6753349a9f98086fe29ee15ca3f5e + languageName: node + linkType: hard + "language-subtag-registry@npm:^0.3.20": version: 0.3.23 resolution: "language-subtag-registry@npm:0.3.23" @@ -12042,7 +12222,7 @@ __metadata: languageName: node linkType: hard -"minimist@npm:^1.1.0, minimist@npm:^1.2.0, minimist@npm:^1.2.6": +"minimist@npm:^1.1.0, minimist@npm:^1.2.0, minimist@npm:^1.2.6, minimist@npm:^1.2.8": version: 1.2.8 resolution: "minimist@npm:1.2.8" checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 @@ -12166,7 +12346,7 @@ __metadata: languageName: node linkType: hard -"mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": +"mkdirp@npm:^1.0.3": version: 1.0.4 resolution: "mkdirp@npm:1.0.4" bin: @@ -12860,6 +13040,13 @@ __metadata: languageName: node linkType: hard +"parse-ms@npm:^4.0.0": + version: 4.0.0 + resolution: "parse-ms@npm:4.0.0" + checksum: 10c0/a7900f4f1ebac24cbf5e9708c16fb2fd482517fad353aecd7aefb8c2ba2f85ce017913ccb8925d231770404780df46244ea6fec598b3bde6490882358b4d2d16 + languageName: node + linkType: hard + "parse-numeric-range@npm:^1.3.0": version: 1.3.0 resolution: "parse-numeric-range@npm:1.3.0" @@ -12914,13 +13101,6 @@ __metadata: languageName: node linkType: hard -"path-browserify@npm:^1.0.1": - version: 1.0.1 - resolution: "path-browserify@npm:1.0.1" - checksum: 10c0/8b8c3fd5c66bd340272180590ae4ff139769e9ab79522e2eb82e3d571a89b8117c04147f65ad066dccfb42fcad902e5b7d794b3d35e0fd840491a8ddbedf8c66 - languageName: node - linkType: hard - "path-exists@npm:^3.0.0": version: 3.0.0 resolution: "path-exists@npm:3.0.0" @@ -13037,6 +13217,13 @@ __metadata: languageName: node linkType: hard +"picomatch@npm:^4.0.1": + version: 4.0.2 + resolution: "picomatch@npm:4.0.2" + checksum: 10c0/7c51f3ad2bb42c776f49ebf964c644958158be30d0a510efd5a395e8d49cb5acfed5b82c0c5b365523ce18e6ab85013c9ebe574f60305892ec3fa8eee8304ccc + languageName: node + linkType: hard + "pify@npm:^2.0.0, pify@npm:^2.2.0, pify@npm:^2.3.0": version: 2.3.0 resolution: "pify@npm:2.3.0" @@ -14040,7 +14227,7 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^29.7.0": +"pretty-format@npm:^29.0.0, pretty-format@npm:^29.7.0": version: 29.7.0 resolution: "pretty-format@npm:29.7.0" dependencies: @@ -14058,6 +14245,15 @@ __metadata: languageName: node linkType: hard +"pretty-ms@npm:^9.0.0": + version: 9.1.0 + resolution: "pretty-ms@npm:9.1.0" + dependencies: + parse-ms: "npm:^4.0.0" + checksum: 10c0/fd111aad8800a04dfd654e6016da69bdaa6fc6a4c280f8e727cffd8b5960558e94942f1a94d4aa6e4d179561a0fbb0366a9ebe0ccefbbb0f8ff853b129cdefb9 + languageName: node + linkType: hard + "proc-log@npm:^3.0.0": version: 3.0.0 resolution: "proc-log@npm:3.0.0" @@ -15740,6 +15936,13 @@ __metadata: languageName: node linkType: hard +"smol-toml@npm:^1.1.4": + version: 1.3.0 + resolution: "smol-toml@npm:1.3.0" + checksum: 10c0/442b4d033236ff6dd05bf91d57695fd9070a8221af080a5b2782cb2d9fad8bc31f698c61de5308a351907c1200202ba3ee51d52c5704f5349149e7c374f5fe90 + languageName: node + linkType: hard + "sockjs@npm:^0.3.24": version: 0.3.24 resolution: "sockjs@npm:0.3.24" @@ -16199,6 +16402,13 @@ __metadata: languageName: node linkType: hard +"strip-json-comments@npm:5.0.1": + version: 5.0.1 + resolution: "strip-json-comments@npm:5.0.1" + checksum: 10c0/c9d9d55a0167c57aa688df3aa20628cf6f46f0344038f189eaa9d159978e80b2bfa6da541a40d83f7bde8a3554596259bf6b70578b2172356536a0e3fa5a0982 + languageName: node + linkType: hard + "strip-json-comments@npm:^3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" @@ -16283,6 +16493,13 @@ __metadata: languageName: node linkType: hard +"summary@npm:2.1.0": + version: 2.1.0 + resolution: "summary@npm:2.1.0" + checksum: 10c0/2743c1f940fb303c496ef1b085e654704a6c16872957b6b76648c34bd32c8f0b7a3c5ec4e0f8bfb71dcb8473e34d172fef31026b85562af589cf220aa901698d + languageName: node + linkType: hard + "superagent@npm:^9.0.2": version: 9.0.2 resolution: "superagent@npm:9.0.2" @@ -16979,13 +17196,6 @@ __metadata: languageName: node linkType: hard -"true-myth@npm:^4.1.0": - version: 4.1.1 - resolution: "true-myth@npm:4.1.1" - checksum: 10c0/ac83ac82f969129d5f002dcc489b86e28e59ee4149641b341b0176e9407786823c83702fe4b9ae9c0f9593f29a98c931ee175789d33e884f99c47e9c16e80adb - languageName: node - linkType: hard - "truncate-utf8-bytes@npm:^1.0.0": version: 1.0.2 resolution: "truncate-utf8-bytes@npm:1.0.2" @@ -17009,32 +17219,6 @@ __metadata: languageName: node linkType: hard -"ts-morph@npm:^13.0.1": - version: 13.0.3 - resolution: "ts-morph@npm:13.0.3" - dependencies: - "@ts-morph/common": "npm:~0.12.3" - code-block-writer: "npm:^11.0.0" - checksum: 10c0/9d7fa1a29be3996b209e19d3e0c80eacd088afa76cd7c12b4b3d8a6a08d282d5f17e01cedf8bd841ad549a5df6580b876ea10597b3273e2bb49b85ffa2044d99 - languageName: node - linkType: hard - -"ts-prune@npm:^0.10.3": - version: 0.10.3 - resolution: "ts-prune@npm:0.10.3" - dependencies: - commander: "npm:^6.2.1" - cosmiconfig: "npm:^7.0.1" - json5: "npm:^2.1.3" - lodash: "npm:^4.17.21" - true-myth: "npm:^4.1.0" - ts-morph: "npm:^13.0.1" - bin: - ts-prune: lib/index.js - checksum: 10c0/fecb609e4c1f207a23f8d82946cd654242a818ca28d078cebf7b8408f0b20c2245e1482019745117b7ae0e015b76aaba8d7382cd5429ee9fa48829253981b448 - languageName: node - linkType: hard - "tsconfig-paths@npm:^3.15.0": version: 3.15.0 resolution: "tsconfig-paths@npm:3.15.0" @@ -17807,6 +17991,15 @@ __metadata: languageName: node linkType: hard +"wcwidth@npm:^1.0.1": + version: 1.0.1 + resolution: "wcwidth@npm:1.0.1" + dependencies: + defaults: "npm:^1.0.3" + checksum: 10c0/5b61ca583a95e2dd85d7078400190efd452e05751a64accb8c06ce4db65d7e0b0cde9917d705e826a2e05cc2548f61efde115ffa374c3e436d04be45c889e5b4 + languageName: node + linkType: hard + "web-app@workspace:.": version: 0.0.0-use.local resolution: "web-app@workspace:." @@ -17814,6 +18007,7 @@ __metadata: "@babel/plugin-proposal-private-property-in-object": "npm:^7.21.11" "@playwright/test": "npm:^1.45.2" "@reduxjs/toolkit": "npm:^1.9.7" + "@types/jest": "npm:^29.5.12" "@types/lodash": "npm:^4.17.7" "@types/luxon": "npm:^3.4.2" "@types/node": "npm:20.14.11" @@ -17828,8 +18022,11 @@ __metadata: "@types/superagent": "npm:^4.1.24" "@types/webpack-env": "npm:^1.18.5" babel-plugin-istanbul: "npm:^6.1.1" + clsx: "npm:^2.1.1" customize-cra: "npm:^1.0.0" + http-status-codes: "npm:^2.3.0" kbar: "npm:^0.1.0-beta.45" + knip: "npm:^5.27.2" local-storage-fallback: "npm:^4.1.2" lodash: "npm:^4.17.21" luxon: "npm:^3.4.4" @@ -17858,7 +18055,6 @@ __metadata: superagent: "npm:^9.0.2" testcafe: "npm:3.6.2" tinycolor2: "npm:^1.6.0" - ts-prune: "npm:^0.10.3" typescript: "npm:^5.5.3" languageName: unknown linkType: soft @@ -18676,6 +18872,22 @@ __metadata: languageName: node linkType: hard +"zod-validation-error@npm:^3.0.3": + version: 3.3.1 + resolution: "zod-validation-error@npm:3.3.1" + peerDependencies: + zod: ^3.18.0 + checksum: 10c0/53869a8478f42cd38f51e159431fe7af9e0b456e8078c6d9d906adb212753788defa9c8bd7374e9ecd4a688b6736fcfa091aebac65054328b8cfdecce9395d8e + languageName: node + linkType: hard + +"zod@npm:^3.22.4": + version: 3.23.8 + resolution: "zod@npm:3.23.8" + checksum: 10c0/8f14c87d6b1b53c944c25ce7a28616896319d95bc46a9660fe441adc0ed0a81253b02b5abdaeffedbeb23bdd25a0bf1c29d2c12dd919aef6447652dd295e3e69 + languageName: node + linkType: hard + "zwitch@npm:^2.0.0, zwitch@npm:^2.0.4": version: 2.0.4 resolution: "zwitch@npm:2.0.4"