diff --git a/.devcontainer/Dockerfile.console b/.devcontainer/Dockerfile.console deleted file mode 100644 index 2d6f3c83..00000000 --- a/.devcontainer/Dockerfile.console +++ /dev/null @@ -1,20 +0,0 @@ -FROM quay.io/openshift/origin-console:latest -COPY --from=openshift/origin-cli:latest /usr/bin/oc /usr/local/bin/oc - -ENV OC_URL=$OC_URL -ENV OC_PASS=$OC_PASS -ENV OC_USER=$OC_USER -ENV OC_PLUGIN_NAME=$OC_PLUGIN_NAME - -USER root -CMD eval "oc login $OC_URL -u $OC_USER -p $OC_PASS --insecure-skip-tls-verify" && \ - /opt/bridge/bin/bridge -public-dir=/opt/bridge/static \ - -i18n-namespaces plugin__$OC_PLUGIN_NAME \ - -plugins $OC_PLUGIN_NAME=http://localhost:9001 \ - -k8s-mode-off-cluster-thanos=$(oc -n openshift-config-managed get configmap monitoring-shared-config -o jsonpath='{.data.thanosPublicURL}') \ - -k8s-mode-off-cluster-endpoint=$(oc whoami --show-server) \ - -k8s-mode-off-cluster-skip-verify-tls=true \ - -k8s-auth-bearer-token=$(oc whoami --show-token) \ - -k8s-auth="bearer-token" \ - -user-auth="disabled" \ - -k8s-mode="off-cluster" diff --git a/.devcontainer/Dockerfile.plugin b/.devcontainer/Dockerfile.plugin deleted file mode 100644 index 59d4d0c8..00000000 --- a/.devcontainer/Dockerfile.plugin +++ /dev/null @@ -1,2 +0,0 @@ -FROM mcr.microsoft.com/vscode/devcontainers/typescript-node:16 as build -COPY --from=openshift/origin-cli:latest /usr/bin/oc /usr/local/bin/oc diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json deleted file mode 100644 index bc6a254a..00000000 --- a/.devcontainer/devcontainer.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "Console + Dynamic Plugin", - "dockerComposeFile": "docker-compose.yml", - "service": "plugin", - "workspaceFolder": "/workspace", - "settings": {}, - "initializeCommand": ".devcontainer/init.sh", - "postCreateCommand": "yarn && eval 'oc login $OC_URL -u $OC_USER -p $OC_PASS --insecure-skip-tls-verify'", - "forwardPorts": [9000,9001], - "portsAttributes": { - "9000": { - "label": "Console", - }, - "9001": { - "label": "Plugin static files", - "onAutoForward": "silent" - } - }, - "features": {}, - "extensions": [ - "ms-azuretools.vscode-docker", - "ms-vscode.vscode-typescript-next", - "dbaeumer.vscode-eslint", - "esbenp.prettier-vscode", - ], -} diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml deleted file mode 100644 index 57071ed2..00000000 --- a/.devcontainer/docker-compose.yml +++ /dev/null @@ -1,34 +0,0 @@ -version: '3.8' -# create dev.env with the following values: -# OC_URL -# OC_USER -# OC_PASS -# OC_PLUGIN_NAME -services: - console: - build: - context: .. - dockerfile: .devcontainer/Dockerfile.console - env_file: dev.env - restart: unless-stopped - healthcheck: - test: oc whoami - interval: 1m30s - timeout: 10s - retries: 5 - - plugin: - build: - context: .. - dockerfile: .devcontainer/Dockerfile.plugin - env_file: dev.env - depends_on: - - console - network_mode: service:console - # Overrides default command so things don't shut down after the process ends. - command: sleep infinity - # Cache local workspace and copy shell history. - volumes: - - ..:/workspace:cached - - ~/.bash_history:/root/.bash_history - - ~/.zsh_history:/root/.zsh_history diff --git a/.devcontainer/init.sh b/.devcontainer/init.sh deleted file mode 100755 index 4ddee379..00000000 --- a/.devcontainer/init.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash - -if [[ ! -f .devcontainer/dev.env ]] -then - cat << EOF - env file 'dev.env' does not exist in .devcontainer, please create it and add the the correct values for your cluster. - OC_PLUGIN_NAME=my-plugin - OC_URL=https://api.example.com:6443 - OC_USER=kubeadmin - OC_PASS= -EOF - exit 2 -else - echo 'found 'dev.env' in .devcontainer' -fi - -# if one of the variables are missing, abort the build. -success=1 -! grep -q OC_PLUGIN_NAME= ".devcontainer/dev.env" && success=0 -! grep -q OC_URL= ".devcontainer/dev.env" && success=0 -! grep -q OC_USER= ".devcontainer/dev.env" && success=0 -! grep -q OC_PASS= ".devcontainer/dev.env" && success=0 - -if ((success)); then - echo 'dev.env is formatted correctly, proceeding.' -else - cat << EOF - dev.env is not formatted correctly, please add the the correct values for your cluster. - OC_PLUGIN_NAME=my-plugin - OC_URL=https://api.example.com:6443 - OC_USER=kubeadmin - OC_PASS= -EOF -exit 2 -fi diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 2566ded7..00000000 --- a/.eslintignore +++ /dev/null @@ -1,9 +0,0 @@ -# Ignore artifacts: -dist/ -node_modules/ -i18n-scripts/ -yarn.lock -/coverage -/gui-test-screenshots -cypress/gui-test-screenshots -cypress/cypress-a11y-report.json diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 2d8e0046..00000000 --- a/.eslintrc.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "env": { - "browser": true, - "es2021": true - }, - "extends": [ - "plugin:react/recommended", - "plugin:react-hooks/recommended", - "plugin:@typescript-eslint/recommended", - "prettier", - "plugin:perfectionist/recommended-alphabetical" - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 12, - "sourceType": "module" - }, - "plugins": [ - "react", - "@typescript-eslint", - "react-hooks", - "prettier", - "simple-import-sort", - "perfectionist" - ], - "rules": { - "perfectionist/sort-named-imports": [ - "error", - { - "ignore-alias": true, - "ignore-case": true - } - ], - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-shadow": ["error"], - "@typescript-eslint/no-unused-vars": ["error", { "varsIgnorePattern": "^_" }], - "no-console": "error", - "no-nested-ternary": "error", - "perfectionist/sort-classes": [ - "error", - { - "groups": [ - "static-property", - "private-property", - "property", - "constructor", - "static-method", - "private-method", - "method" - ], - "order": "asc", - "type": "natural" - } - ], - "perfectionist/sort-imports": "off", - "prettier/prettier": [ - "error", - { - "endOfLine": "auto" - } - ], - "react/display-name": "off", - "react/prop-types": "off", - "simple-import-sort/exports": "error", - "simple-import-sort/imports": [ - "warn", - { - "groups": [ - // Node.js builtins. You could also generate this regex if you use a `.js` config. - // For example: `^(${require("module").builtinModules.join("|")})(/|$)` - [ - "^(assert|buffer|child_process|cluster|console|constants|crypto|dgram|dns|domain|events|fs|http|https|module|net|os|path|punycode|querystring|readline|repl|stream|string_decoder|sys|timers|tls|tty|url|util|vm|zlib|freelist|v8|process|async_hooks|http2|perf_hooks)(/.*|$)" - ], - // Packages - ["^react", "^\\w"], - // Internal packages. - ["^(@|config/)(/*|$)"], - // Side effect imports. - ["^\\u0000"], - // Parent imports. Put `..` last. - ["^\\.\\.(?!/?$)", "^\\.\\./?$"], - // Other relative imports. Put same-folder imports and `.` last. - ["^\\./(?=.*/)(?!/?$)", "^\\.(?!/?$)", "^\\./?$"], - // Style imports. - ["^.+\\.s?css$"] - ] - } - ] - }, - "settings": { - "import/resolver": { - "node": { - "extensions": [".js", ".jsx", ".ts", ".tsx"] - }, - "typescript": {} // this loads /tsconfig.json to eslint - }, - "react": { - "version": "detect" - } - } -} diff --git a/.gitignore b/.gitignore index bde351d5..44372b8d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ node_modules/ dist/ -.devcontainer/dev.env integration-tests/videos integration-tests/screenshots integration-tests/.DS_Store diff --git a/.prettierignore b/.prettierignore index d3ff64f1..436f5ec7 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,4 +1,14 @@ -# Ignore artifacts: -dist/ +# .gitignore: node_modules/ -i18n-scripts/ \ No newline at end of file +dist/ +integration-tests/videos +integration-tests/screenshots +integration-tests/.DS_Store +.DS_Store +.env + +#legacy +i18n-scripts/ +#generated +package-lock.json +locales/ diff --git a/.vscode/settings.json b/.vscode/settings.json index abb8af51..0416a0dc 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,8 +1,8 @@ -{ - "json.schemas": [ - { - "fileMatch": ["console-extensions.json", "**/console-extensions.json"], - "url": "./node_modules/@openshift-console/dynamic-plugin-sdk-webpack/schema/console-extensions.json" - } - ] -} +{ + "json.schemas": [ + { + "fileMatch": ["console-extensions.json", "**/console-extensions.json"], + "url": "./node_modules/@openshift-console/dynamic-plugin-sdk-webpack/schema/console-extensions.json" + } + ] +} diff --git a/README.md b/README.md index 849cfc51..6cb7b5a7 100644 --- a/README.md +++ b/README.md @@ -176,14 +176,14 @@ the message for the current language from the `plugin__networking-console-plugin namespace. For example: ```json - { - "type": "console.navigation/section", - "properties": { - "id": "admin-demo-section", - "perspective": "admin", - "name": "%plugin__networking-console-plugin~Plugin Template%" - } +{ + "type": "console.navigation/section", + "properties": { + "id": "admin-demo-section", + "perspective": "admin", + "name": "%plugin__networking-console-plugin~Plugin Template%" } +} ``` Running `npm run i18n` updates the JSON files in the `locales` folder of the @@ -212,7 +212,7 @@ Steps to generate reports 1. In command prompt, navigate to root folder and execute the command `npm run cypress-merge` 2. Then execute command `npm run cypress-generate` -The cypress-report.html file is generated and should be in (/integration-tests/screenshots) directory + The cypress-report.html file is generated and should be in (/integration-tests/screenshots) directory ## References diff --git a/charts/openshift-console-plugin/.helmignore b/charts/openshift-console-plugin/.helmignore deleted file mode 100644 index 0e8a0eb3..00000000 --- a/charts/openshift-console-plugin/.helmignore +++ /dev/null @@ -1,23 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*.orig -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ diff --git a/charts/openshift-console-plugin/Chart.yaml b/charts/openshift-console-plugin/Chart.yaml deleted file mode 100644 index 72bdd846..00000000 --- a/charts/openshift-console-plugin/Chart.yaml +++ /dev/null @@ -1,5 +0,0 @@ -apiVersion: v2 -name: networking-console-plugin -description: A Helm chart for Kubernetes -type: application -version: 0.1.0 diff --git a/charts/openshift-console-plugin/templates/_helpers.tpl b/charts/openshift-console-plugin/templates/_helpers.tpl deleted file mode 100644 index 4d489739..00000000 --- a/charts/openshift-console-plugin/templates/_helpers.tpl +++ /dev/null @@ -1,72 +0,0 @@ -{{/* -Expand the name of the chart. -*/}} -{{- define "openshift-console-plugin.name" -}} -{{- default (default .Chart.Name .Release.Name) .Values.plugin.name | trunc 63 | trimSuffix "-" }} -{{- end }} - - -{{/* -Create chart name and version as used by the chart label. -*/}} -{{- define "openshift-console-plugin.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Common labels -*/}} -{{- define "openshift-console-plugin.labels" -}} -helm.sh/chart: {{ include "openshift-console-plugin.chart" . }} -{{ include "openshift-console-plugin.selectorLabels" . }} -{{- if .Chart.AppVersion }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -{{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end }} - -{{/* -Selector labels -*/}} -{{- define "openshift-console-plugin.selectorLabels" -}} -app: {{ include "openshift-console-plugin.name" . }} -app.kubernetes.io/name: {{ include "openshift-console-plugin.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -app.kubernetes.io/part-of: {{ include "openshift-console-plugin.name" . }} -{{- end }} - -{{/* -Create the name secret containing the certificate -*/}} -{{- define "openshift-console-plugin.certificateSecret" -}} -{{ default (printf "%s-cert" (include "openshift-console-plugin.name" .)) .Values.plugin.certificateSecretName }} -{{- end }} - -{{/* -Create the name of the service account to use -*/}} -{{- define "openshift-console-plugin.serviceAccountName" -}} -{{- if .Values.plugin.serviceAccount.create }} -{{- default (include "openshift-console-plugin.name" .) .Values.plugin.serviceAccount.name }} -{{- else }} -{{- default "default" .Values.plugin.serviceAccount.name }} -{{- end }} -{{- end }} - -{{/* -Create the name of the patcher -*/}} -{{- define "openshift-console-plugin.patcherName" -}} -{{- printf "%s-patcher" (include "openshift-console-plugin.name" .) }} -{{- end }} - -{{/* -Create the name of the service account to use -*/}} -{{- define "openshift-console-plugin.patcherServiceAccountName" -}} -{{- if .Values.plugin.patcherServiceAccount.create }} -{{- default (printf "%s-patcher" (include "openshift-console-plugin.name" .)) .Values.plugin.patcherServiceAccount.name }} -{{- else }} -{{- default "default" .Values.plugin.patcherServiceAccount.name }} -{{- end }} -{{- end }} \ No newline at end of file diff --git a/charts/openshift-console-plugin/templates/configmap.yaml b/charts/openshift-console-plugin/templates/configmap.yaml deleted file mode 100644 index 07c2170e..00000000 --- a/charts/openshift-console-plugin/templates/configmap.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: {{ template "openshift-console-plugin.name" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "openshift-console-plugin.labels" . | nindent 4 }} -data: - nginx.conf: | - error_log /dev/stdout info; - events {} - http { - access_log /dev/stdout; - include /etc/nginx/mime.types; - default_type application/octet-stream; - keepalive_timeout 65; - server { - listen {{ .Values.plugin.port }} ssl; - listen [::]:{{ .Values.plugin.port }} ssl; - ssl_certificate /var/cert/tls.crt; - ssl_certificate_key /var/cert/tls.key; - root /usr/share/nginx/html; - } - } diff --git a/charts/openshift-console-plugin/templates/consoleplugin.yaml b/charts/openshift-console-plugin/templates/consoleplugin.yaml deleted file mode 100644 index c70aa50e..00000000 --- a/charts/openshift-console-plugin/templates/consoleplugin.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: console.openshift.io/v1 -kind: ConsolePlugin -metadata: - name: {{ template "openshift-console-plugin.name" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "openshift-console-plugin.labels" . | nindent 4 }} -spec: - displayName: {{ default (printf "%s Plugin" (include "openshift-console-plugin.name" .)) .Values.plugin.description }} - i18n: - loadType: Preload - backend: - type: Service - service: - name: {{ template "openshift-console-plugin.name" . }} - namespace: {{ .Release.Namespace }} - port: {{ .Values.plugin.port }} - basePath: {{ .Values.plugin.basePath }} \ No newline at end of file diff --git a/charts/openshift-console-plugin/templates/deployment.yaml b/charts/openshift-console-plugin/templates/deployment.yaml deleted file mode 100644 index 4c9c74c9..00000000 --- a/charts/openshift-console-plugin/templates/deployment.yaml +++ /dev/null @@ -1,57 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{ template "openshift-console-plugin.name" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "openshift-console-plugin.labels" . | nindent 4 }} - app.openshift.io/runtime-namespace: {{ .Release.Namespace }} -spec: - replicas: {{ .Values.plugin.replicas }} - selector: - matchLabels: - {{- include "openshift-console-plugin.selectorLabels" . | nindent 6 }} - template: - metadata: - labels: - {{- include "openshift-console-plugin.labels" . | nindent 8 }} - spec: - containers: - - name: {{ template "openshift-console-plugin.name" . }} - image: {{ required "Plugin image must be specified!" .Values.plugin.image }} - ports: - - containerPort: {{ .Values.plugin.port }} - protocol: TCP - imagePullPolicy: {{ .Values.plugin.imagePullPolicy }} - {{- if and (.Values.plugin.securityContext.enabled) (.Values.plugin.containerSecurityContext) }} - securityContext: {{ tpl (toYaml (omit .Values.plugin.containerSecurityContext "enabled")) $ | nindent 12 }} - {{- end }} - resources: - {{- toYaml .Values.plugin.resources | nindent 12 }} - volumeMounts: - - name: {{ template "openshift-console-plugin.certificateSecret" . }} - readOnly: true - mountPath: /var/cert - - name: nginx-conf - readOnly: true - mountPath: /etc/nginx/nginx.conf - subPath: nginx.conf - volumes: - - name: {{ template "openshift-console-plugin.certificateSecret" . }} - secret: - secretName: {{ template "openshift-console-plugin.certificateSecret" . }} - defaultMode: 420 - - name: nginx-conf - configMap: - name: {{ template "openshift-console-plugin.name" . }} - defaultMode: 420 - restartPolicy: Always - dnsPolicy: ClusterFirst - {{- if and (.Values.plugin.securityContext.enabled) (.Values.plugin.podSecurityContext) }} - securityContext: {{ tpl (toYaml (omit .Values.plugin.podSecurityContext "enabled")) $ | nindent 8 }} - {{- end }} - strategy: - type: RollingUpdate - rollingUpdate: - maxUnavailable: 25% - maxSurge: 25% diff --git a/charts/openshift-console-plugin/templates/patch-consoles-job.yaml b/charts/openshift-console-plugin/templates/patch-consoles-job.yaml deleted file mode 100644 index 0b2ccfe3..00000000 --- a/charts/openshift-console-plugin/templates/patch-consoles-job.yaml +++ /dev/null @@ -1,42 +0,0 @@ -{{- if .Values.plugin.jobs.patchConsoles.enabled }} -apiVersion: batch/v1 -kind: Job -metadata: - name: {{ template "openshift-console-plugin.patcherName" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "openshift-console-plugin.labels" . | nindent 4 }} - annotations: - helm.sh/hook: post-install,post-upgrade - helm.sh/hook-delete-policy: before-hook-creation -spec: - parallelism: 1 - template: - metadata: - labels: - {{- include "openshift-console-plugin.labels" . | nindent 8 }} - spec: - restartPolicy: OnFailure - serviceAccountName: {{ template "openshift-console-plugin.patcherServiceAccountName" . }} - {{- if and (.Values.plugin.securityContext.enabled) (.Values.plugin.jobs.patchConsoles.podSecurityContext.enabled) }} - securityContext: {{ tpl (toYaml (omit .Values.plugin.jobs.patchConsoles.podSecurityContext "enabled")) $ | nindent 8 }} - {{- end }} - terminationGracePeriodSeconds: 400 - dnsPolicy: ClusterFirst - containers: - - name: {{ template "openshift-console-plugin.patcherName" . }} - image: {{ required "Patcher image must be specified!" .Values.plugin.jobs.patchConsoles.image }} - {{- if and (.Values.plugin.securityContext.enabled) (.Values.plugin.containerSecurityContext) }} - securityContext: {{ tpl (toYaml (omit .Values.plugin.jobs.patchConsoles.containerSecurityContext "enabled")) $ | nindent 12 }} - {{- end }} - resources: - {{- toYaml .Values.plugin.jobs.patchConsoles.resources | nindent 12 }} - command: - - /bin/bash - - -c - - | - existingPlugins=$(oc get consoles.operator.openshift.io cluster -o json | jq -c '.spec.plugins // []') - mergedPlugins=$(jq --argjson existingPlugins "${existingPlugins}" --argjson consolePlugin '["{{ template "openshift-console-plugin.name" . }}"]' -c -n '$existingPlugins + $consolePlugin | unique') - patchedPlugins=$(jq --argjson mergedPlugins $mergedPlugins -n -c '{ "spec": { "plugins": $mergedPlugins } }') - oc patch consoles.operator.openshift.io cluster --patch $patchedPlugins --type=merge -{{- end }} \ No newline at end of file diff --git a/charts/openshift-console-plugin/templates/patcher-clusterrole.yaml b/charts/openshift-console-plugin/templates/patcher-clusterrole.yaml deleted file mode 100644 index 31c050a5..00000000 --- a/charts/openshift-console-plugin/templates/patcher-clusterrole.yaml +++ /dev/null @@ -1,13 +0,0 @@ -{{- if .Values.plugin.jobs.patchConsoles.enabled }} -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: {{ template "openshift-console-plugin.patcherName" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "openshift-console-plugin.labels" . | nindent 4 }} -rules: - - apiGroups: ["operator.openshift.io"] - resources: ["consoles"] - verbs: ["get","list","patch", "update"] -{{- end }} \ No newline at end of file diff --git a/charts/openshift-console-plugin/templates/patcher-clusterrolebinding.yaml b/charts/openshift-console-plugin/templates/patcher-clusterrolebinding.yaml deleted file mode 100644 index d93b8721..00000000 --- a/charts/openshift-console-plugin/templates/patcher-clusterrolebinding.yaml +++ /dev/null @@ -1,17 +0,0 @@ -{{- if .Values.plugin.jobs.patchConsoles.enabled }} -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: {{ template "openshift-console-plugin.patcherName" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "openshift-console-plugin.labels" . | nindent 4 }} -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: {{ template "openshift-console-plugin.patcherName" . }} -subjects: - - kind: ServiceAccount - name: {{ template "openshift-console-plugin.patcherServiceAccountName" . }} - namespace: {{ .Release.Namespace }} -{{- end }} \ No newline at end of file diff --git a/charts/openshift-console-plugin/templates/patcher-serviceaccount.yaml b/charts/openshift-console-plugin/templates/patcher-serviceaccount.yaml deleted file mode 100644 index 4af6a6b9..00000000 --- a/charts/openshift-console-plugin/templates/patcher-serviceaccount.yaml +++ /dev/null @@ -1,12 +0,0 @@ -{{- if and (.Values.plugin.patcherServiceAccount.create) (.Values.plugin.jobs.patchConsoles.enabled) -}} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ include "openshift-console-plugin.patcherServiceAccountName" . }} - labels: - {{- include "openshift-console-plugin.labels" . | nindent 4 }} - {{- with .Values.plugin.patcherServiceAccount.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -{{- end }} diff --git a/charts/openshift-console-plugin/templates/service.yaml b/charts/openshift-console-plugin/templates/service.yaml deleted file mode 100644 index cb6c9bfc..00000000 --- a/charts/openshift-console-plugin/templates/service.yaml +++ /dev/null @@ -1,21 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - {{- if not .Values.certificateSecretName }} - annotations: - service.alpha.openshift.io/serving-cert-secret-name: {{ template "openshift-console-plugin.certificateSecret" . }} - {{- end }} - name: {{ template "openshift-console-plugin.name" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "openshift-console-plugin.labels" . | nindent 4 }} -spec: - ports: - - name: {{ .Values.plugin.port }}-tcp - protocol: TCP - port: {{ .Values.plugin.port }} - targetPort: {{ .Values.plugin.port }} - selector: - {{- include "openshift-console-plugin.selectorLabels" . | nindent 4 }} - type: ClusterIP - sessionAffinity: None diff --git a/charts/openshift-console-plugin/templates/serviceaccount.yaml b/charts/openshift-console-plugin/templates/serviceaccount.yaml deleted file mode 100644 index 5c3dffe4..00000000 --- a/charts/openshift-console-plugin/templates/serviceaccount.yaml +++ /dev/null @@ -1,12 +0,0 @@ -{{- if .Values.plugin.serviceAccount.create -}} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ include "openshift-console-plugin.serviceAccountName" . }} - labels: - {{- include "openshift-console-plugin.labels" . | nindent 4 }} - {{- with .Values.plugin.serviceAccount.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -{{- end }} diff --git a/charts/openshift-console-plugin/values.yaml b/charts/openshift-console-plugin/values.yaml deleted file mode 100644 index 6cc865ba..00000000 --- a/charts/openshift-console-plugin/values.yaml +++ /dev/null @@ -1,54 +0,0 @@ ---- -plugin: - name: "" - description: "" - image: "" - imagePullPolicy: IfNotPresent - replicas: 2 - port: 9443 - securityContext: - enabled: true - podSecurityContext: - enabled: true - runAsNonRoot: true - seccompProfile: - type: RuntimeDefault - containerSecurityContext: - enabled: true - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL - resources: - requests: - cpu: 10m - memory: 50Mi - basePath: / - certificateSecretName: "" - serviceAccount: - create: true - annotations: {} - name: "" - patcherServiceAccount: - create: true - annotations: {} - name: "" - jobs: - patchConsoles: - enabled: true - image: "registry.redhat.io/openshift4/ose-tools-rhel8@sha256:e44074f21e0cca6464e50cb6ff934747e0bd11162ea01d522433a1a1ae116103" - podSecurityContext: - enabled: true - runAsNonRoot: true - seccompProfile: - type: RuntimeDefault - containerSecurityContext: - enabled: true - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL - resources: - requests: - cpu: 10m - memory: 50Mi diff --git a/ct.yaml b/ct.yaml deleted file mode 100644 index f178aec1..00000000 --- a/ct.yaml +++ /dev/null @@ -1,5 +0,0 @@ -chart-dirs: - - charts -validate-maintainers: false -remote: origin -target-branch: main diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 00000000..985c6329 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,151 @@ +import prettierConfig from 'eslint-config-prettier'; +import cypressPlugin from 'eslint-plugin-cypress'; +import importPlugin from 'eslint-plugin-import'; +import perfectionistPlugin from 'eslint-plugin-perfectionist'; +import reactPlugin from 'eslint-plugin-react'; +import reactHooksPlugin from 'eslint-plugin-react-hooks'; +import simpleImportSort from 'eslint-plugin-simple-import-sort'; +import globals from 'globals'; +import tseslint from 'typescript-eslint'; + +import js from '@eslint/js'; + +export default tseslint.config( + { + ignores: [ + // .gitignore: + '**/node_modules/', + '**/dist/', + 'integration-tests/videos', + 'integration-tests/screenshots', + '**/.DS_Store', + '.env', + //legacy + 'i18n-scripts/', + //generated + 'package-lock.json', + 'locales/', + ], + }, + + js.configs.recommended, + ...tseslint.configs.recommended, + reactPlugin.configs.flat.recommended, + perfectionistPlugin.configs['recommended-alphabetical'], + + { + languageOptions: { + globals: { + ...globals.browser, + ...globals.es2021, + }, + parserOptions: { + ecmaFeatures: { jsx: true }, + }, + }, + plugins: { + import: importPlugin, + 'react-hooks': reactHooksPlugin, + 'simple-import-sort': simpleImportSort, + }, + rules: { + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-shadow': 'error', + '@typescript-eslint/no-unused-expressions': 'off', + '@typescript-eslint/no-unused-vars': ['error', { varsIgnorePattern: '^_' }], + + 'import/no-cycle': 'off', + 'import/no-duplicates': 'error', + + 'no-console': 'error', + 'no-nested-ternary': 'error', + + 'perfectionist/sort-classes': [ + 'error', + { + groups: [ + 'static-property', + 'private-property', + 'property', + 'constructor', + 'static-method', + 'private-method', + 'method', + ], + order: 'asc', + type: 'natural', + }, + ], + 'perfectionist/sort-exports': 'off', + 'perfectionist/sort-imports': 'off', + 'perfectionist/sort-modules': 'off', + 'perfectionist/sort-named-imports': [ + 'error', + { + ignoreAlias: true, + ignoreCase: true, + }, + ], + 'perfectionist/sort-switch-case': 'off', + + 'react-hooks/exhaustive-deps': 'warn', + 'react-hooks/rules-of-hooks': 'error', + 'react/display-name': 'off', + 'react/prop-types': 'off', + + 'simple-import-sort/exports': 'error', + 'simple-import-sort/imports': [ + 'warn', + { + groups: [ + [ + '^(assert|buffer|child_process|cluster|console|constants|crypto|dgram|dns|domain|events|fs|http|https|module|net|os|path|punycode|querystring|readline|repl|stream|string_decoder|sys|timers|tls|tty|url|util|vm|zlib|freelist|v8|process|async_hooks|http2|perf_hooks)(/.*|$)', + ], + ['^react', '^\\w'], + ['^(@|config/)(/*|$)'], + ['^\\u0000'], + ['^\\.\\.(?!/?$)', '^\\.\\./?$'], + ['^\\./(?=.*/)(?!/?$)', '^\\.(?!/?$)', '^\\./?$'], + ['^.+\\.s?css$'], + ], + }, + ], + }, + settings: { + react: { version: 'detect' }, + }, + }, + + { + files: ['**/*.{js,cjs}', 'webpack.config.ts'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + rules: { + '@typescript-eslint/no-require-imports': 'off', + }, + }, + + { + files: ['integration-tests/**/*.{js,ts,jsx,tsx}', 'ui-tests-cy/**/*.{js,ts,jsx,tsx}'], + ...cypressPlugin.configs.recommended, + languageOptions: { + globals: { + ...globals.node, + ...cypressPlugin.configs.globals.languageOptions.globals, + }, + }, + rules: { + ...cypressPlugin.configs.recommended.rules, + '@typescript-eslint/no-namespace': 'off', + '@typescript-eslint/no-require-imports': 'off', + 'no-console': 'off', + 'no-redeclare': 'off', + }, + }, + + // last to disable conflicting rules + prettierConfig, +); diff --git a/i18next-parser.config.js b/i18next-parser.config.js index c98b0177..d975d936 100644 --- a/i18next-parser.config.js +++ b/i18next-parser.config.js @@ -1,7 +1,5 @@ -// eslint-disable-next-line @typescript-eslint/no-var-requires, no-undef const { CustomJSONLexer } = require('./i18n-scripts/lexers'); -// eslint-disable-next-line no-undef module.exports = { createOldCatalogs: false, defaultNamespace: 'plugin__networking-console-plugin', diff --git a/install_helm.sh b/install_helm.sh deleted file mode 100755 index 3a943f5e..00000000 --- a/install_helm.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env bash - -USE_SUDO="false" -HELM_INSTALL_DIR="/tmp" - -curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 -chmod 700 get_helm.sh -source get_helm.sh - -rm -rf get_helm.sh \ No newline at end of file diff --git a/integration-tests/.eslintrc b/integration-tests/.eslintrc deleted file mode 100644 index f01d92ce..00000000 --- a/integration-tests/.eslintrc +++ /dev/null @@ -1,17 +0,0 @@ -{ - "env": { - "cypress/globals": true, - "node": true - }, - "extends": ["../.eslintrc.json", "plugin:cypress/recommended"], - "plugins": ["cypress"], - "rules": { - "no-console": "off", - "no-namespace": "off", - "no-redeclare": "off", - "promise/catch-or-return": "off", - "promise/no-nesting": "off", - "@typescript-eslint/no-var-requires":"off", - "@typescript-eslint/no-namespace":"off" - } - } \ No newline at end of file diff --git a/integration-tests/cypress.config.js b/integration-tests/cypress.config.js index fc195f43..d944f1f9 100644 --- a/integration-tests/cypress.config.js +++ b/integration-tests/cypress.config.js @@ -1,6 +1,7 @@ const { defineConfig } = require('cypress'); module.exports = defineConfig({ + chromeWebSecurity: false, defaultCommandTimeout: 30000, e2e: { setupNodeEvents(on, config) { @@ -9,7 +10,11 @@ module.exports = defineConfig({ specPattern: 'tests/**/*.cy.{js,jsx,ts,tsx}', supportFile: 'support/index.ts', }, + env: { + openshift: true, + }, fixturesFolder: 'fixtures', + pageLoadTimeout: 120000, reporter: '../../node_modules/cypress-multi-reporters', reporterOptions: { configFile: 'reporter-config.json', diff --git a/integration-tests/plugins/index.ts b/integration-tests/plugins/index.ts index b20096f6..bde14f98 100644 --- a/integration-tests/plugins/index.ts +++ b/integration-tests/plugins/index.ts @@ -8,7 +8,7 @@ module.exports = (on, config) => { { exclude: /node_modules/, loader: 'esbuild-loader', - test: /\.(jsx?|tsx?)$/, + test: /\.ts$/, }, ], }, @@ -18,6 +18,12 @@ module.exports = (on, config) => { }, }; on('file:preprocessor', wp(options)); + on('before:browser:launch', (browser = {}, launchOptions) => { + if (browser.family === 'chromium' || browser.name === 'electron') { + launchOptions.args.push('--ignore-certificate-errors'); + } + return launchOptions; + }); // `config` is the resolved Cypress config config.baseUrl = `${process.env.BRIDGE_BASE_ADDRESS || 'http://localhost:9000/'}`; config.env.BRIDGE_KUBEADMIN_PASSWORD = process.env.BRIDGE_KUBEADMIN_PASSWORD; diff --git a/integration-tests/reporter-config.json b/integration-tests/reporter-config.json index af44ea67..0015ca18 100644 --- a/integration-tests/reporter-config.json +++ b/integration-tests/reporter-config.json @@ -1,14 +1,14 @@ { - "reporterEnabled": "mocha-junit-reporter, mochawesome", - "mochaJunitReporterReporterOptions": { - "mochaFile": "./screenshots/junit_cypress-[hash].xml", - "toConsole": false - }, - "mochawesomeReporterOptions": { - "reportDir": "./screenshots/", - "reportFilename": "cypress_report", - "overwrite": false, - "html": false, - "json": true - } - } \ No newline at end of file + "reporterEnabled": "mocha-junit-reporter, mochawesome", + "mochaJunitReporterReporterOptions": { + "mochaFile": "./screenshots/junit_cypress-[hash].xml", + "toConsole": false + }, + "mochawesomeReporterOptions": { + "reportDir": "./screenshots/", + "reportFilename": "cypress_report", + "overwrite": false, + "html": false, + "json": true + } +} diff --git a/integration-tests/support/commands.ts b/integration-tests/support/commands.ts new file mode 100644 index 00000000..b8d72af6 --- /dev/null +++ b/integration-tests/support/commands.ts @@ -0,0 +1,128 @@ +import Loggable = Cypress.Loggable; +import Shadow = Cypress.Shadow; +import Timeoutable = Cypress.Timeoutable; +import Withinable = Cypress.Withinable; + +export const MINUTE = 60 * 1000; + +export const itemFilter = '[data-test-id="item-filter"]'; +export const resourceRow = '[data-test-rows="resource-row"]'; + +type EndpointHealthStatus = 'Degraded' | 'Down' | 'Healthy' | 'Unknown'; + +const assertOcSuccess = ( + result: { + code: number; + stderr: string; + stdout: string; + }, + message: string, +): void => { + // On some macOS/Electron setups Cypress omits `code` even for successful commands. + const code = result.code ?? 0; + expect(code, message).to.eq(0); +}; + +const healthAriaLabel = (status: EndpointHealthStatus, ready?: number, total?: number): string => { + if (status === 'Unknown') { + return 'Unknown: endpoint readiness not available'; + } + return `${status}: ${ready} of ${total} endpoints ready`; +}; + +declare global { + namespace Cypress { + interface Chainable { + applyFixture(fixturePath: string, namespace: string): Chainable; + applyFixtureFile(fixturePath: string): Chainable; + assertEndpointHealth( + name: string, + status: EndpointHealthStatus, + ready?: number, + total?: number, + ): Chainable; + byTestID( + selector: string, + options?: Partial, + ): Chainable; + deleteNamespace(namespace: string): Chainable; + ensureNamespace(namespace: string): Chainable; + filterByName(name: string): Chainable; + getResourceRow(name: string): Chainable; + } + } +} + +Cypress.Commands.add( + 'byTestID', + (selector: string, options?: Partial) => + cy.get(`[data-test="${selector}"]`, options), +); + +Cypress.Commands.add('ensureNamespace', (namespace: string) => { + cy.exec(`oc create namespace ${namespace}`, { failOnNonZeroExit: false }).then((result) => { + const code = result.code ?? 0; + const alreadyExists = /AlreadyExists/i.test(`${result.stderr || ''}${result.stdout || ''}`); + if (code !== 0 && !alreadyExists) { + expect(code, 'failed to create namespace').to.eq(0); + } + }); + cy.exec(`oc project ${namespace}`, { failOnNonZeroExit: false }).then((result) => { + assertOcSuccess(result, 'failed to select namespace'); + }); +}); + +Cypress.Commands.add('deleteNamespace', (namespace: string) => { + cy.exec( + `oc delete namespace ${namespace} --ignore-not-found=true --wait=false --request-timeout=30s`, + { + failOnNonZeroExit: false, + timeout: MINUTE, + }, + ); +}); + +Cypress.Commands.add('applyFixture', (fixturePath: string, namespace: string) => { + cy.exec(`oc apply -n ${namespace} -f "${fixturePath}"`, { + failOnNonZeroExit: false, + timeout: 2 * MINUTE, + }).then((result) => { + assertOcSuccess(result, 'oc apply failed'); + }); +}); + +Cypress.Commands.add('applyFixtureFile', (fixturePath: string) => { + cy.exec(`oc apply -f "${fixturePath}"`, { + failOnNonZeroExit: false, + timeout: 5 * MINUTE, + }).then((result) => { + assertOcSuccess(result, 'oc apply failed'); + }); +}); + +Cypress.Commands.add('filterByName', (name: string) => { + cy.get(itemFilter, { timeout: MINUTE }).should('be.visible').clear(); + cy.get(itemFilter, { timeout: MINUTE }).type(`${name}{enter}`); + cy.contains(resourceRow, name, { timeout: MINUTE }).should('exist'); +}); + +Cypress.Commands.add('getResourceRow', (name: string) => + cy.contains(resourceRow, name, { timeout: MINUTE }).should('exist'), +); + +Cypress.Commands.add( + 'assertEndpointHealth', + (name: string, status: EndpointHealthStatus, ready?: number, total?: number) => { + const ariaLabel = healthAriaLabel(status, ready, total); + + cy.getResourceRow(name).within(() => { + cy.get(`[aria-label="${ariaLabel}"]`, { timeout: MINUTE }).should('exist'); + + if (status === 'Unknown') { + cy.contains('Unknown').should('exist'); + } else if (ready !== undefined && total !== undefined) { + cy.contains(`${ready}/${total}`).should('exist'); + } + }); + }, +); diff --git a/integration-tests/support/index.ts b/integration-tests/support/index.ts index 808cd893..908b8baf 100644 --- a/integration-tests/support/index.ts +++ b/integration-tests/support/index.ts @@ -1,7 +1,63 @@ -// Import commands.js using ES2015 syntax: +import './commands'; import './login'; +import './selectors'; + +declare global { + interface Window { + SERVER_FLAGS?: { authDisabled?: boolean }; + windowError?: string; + } +} + +const NETWORKING_I18N_NS = 'plugin__networking-console-plugin'; + +/** + * Console aggregates missing-key warnings into window.windowError. + * Ignore keys from other dynamic plugins (e.g. kubevirt) that this suite does not own. + */ +const isIgnorableWindowError = (raw: unknown): boolean => { + const message = typeof raw === 'string' ? raw : String(raw ?? ''); + if (!message) { + return true; + } + + if ( + message.includes('loadPlugin failed') || + message.includes('plugin-manifest.json timed out') || + message.includes('Failed to load plugin manifest') + ) { + return true; + } + + const parts = message + .split(';') + .map((part) => part.trim()) + .filter(Boolean); + + if (parts.length === 0) { + return true; + } + + return parts.every((part) => { + const match = part.match(/Missing i18n key ".+" in namespace "([^"]+)"/); + if (match !== null && match[1] !== NETWORKING_I18N_NS) { + return true; + } + + return ( + part.includes('loadPlugin failed') || + part.includes('plugin-manifest.json timed out') || + part.includes('Failed to load plugin manifest') + ); + }); +}; export const checkErrors = () => cy.window().then((win) => { - assert.isTrue(!win.windowError, win.windowError); + const err = win.windowError; + if (!err || isIgnorableWindowError(err)) { + win.windowError = undefined; + return; + } + assert.isTrue(!err, err); }); diff --git a/integration-tests/support/login.ts b/integration-tests/support/login.ts index 0c590742..c7df708b 100644 --- a/integration-tests/support/login.ts +++ b/integration-tests/support/login.ts @@ -1,44 +1,112 @@ +// Cypress global augmentations require this file to be a module. +export {}; + declare global { namespace Cypress { interface Chainable { - login(username?: string, password?: string): Chainable; - logout(): Chainable; + dismissWelcomeTourIfPresent(): Chainable; + login(providerName?: string, username?: string, password?: string): Chainable; + logout(): void; } } } const KUBEADMIN_USERNAME = 'kubeadmin'; -const loginUsername = Cypress.env('BRIDGE_KUBEADMIN_PASSWORD') ? 'user-dropdown' : 'username'; +const KUBEADMIN_IDP = 'kube:admin'; +const TOUR_DISMISS = '[data-test="tour-step-footer-secondary"]'; +const USER_MENU = '[data-test="user-dropdown"], [data-test="user-dropdown-toggle"], #page-sidebar'; +const MINUTE = 60 * 1000; +const TOUR_WAIT_MS = 20_000; +const TOUR_POLL_MS = 500; + +/** + * Fresh CI clusters show "Welcome to the new OpenShift experience!" after login. + * The modal can mount after masthead is ready, so poll briefly without failing when absent. + */ +const dismissWelcomeTourIfPresent = () => { + const deadline = Date.now() + TOUR_WAIT_MS; + + const tryDismiss = () => { + cy.get('body').then(($body) => { + if ($body.find(TOUR_DISMISS).length > 0) { + cy.get(TOUR_DISMISS).click({ force: true }); + cy.get('.pf-v6-l-bullseye', { timeout: 15_000 }).should('not.exist'); + return; + } + + if (Date.now() >= deadline) { + return; + } + + // Welcome modal mounts asynchronously on first login; poll until timeout. + // eslint-disable-next-line cypress/no-unnecessary-waiting + cy.wait(TOUR_POLL_MS).then(tryDismiss); + }); + }; -// This will add 'cy.login(...)' -// ex: cy.login('my-user', 'my-password') -Cypress.Commands.add('login', (username: string, password: string) => { - // Check if auth is disabled (for a local development environment). - cy.visit('/'); // visits baseUrl which is set in plugins/index.js + tryDismiss(); +}; + +Cypress.Commands.add('dismissWelcomeTourIfPresent', dismissWelcomeTourIfPresent); + +Cypress.Commands.add('login', (provider?: string, username?: string, password?: string) => { + const usr = username || KUBEADMIN_USERNAME; + const pwd = password || Cypress.env('BRIDGE_KUBEADMIN_PASSWORD'); + const idp = provider || KUBEADMIN_IDP; + + cy.visit('/'); cy.window().then((win) => { if (win.SERVER_FLAGS?.authDisabled) { return; } - // Make sure we clear the cookie in case a previous test failed to logout. cy.clearCookie('openshift-session-token'); - cy.get('#inputUsername').type(username || KUBEADMIN_USERNAME); - cy.get('#inputPassword').type(password || Cypress.env('BRIDGE_KUBEADMIN_PASSWORD')); - cy.get('button[type=submit]').click(); + cy.origin( + Cypress.config('baseUrl').replace('console-openshift-console', 'oauth-openshift'), + { args: { idp, pwd, usr } }, + ({ idp: originIdp, pwd: originPwd, usr: originUsr }) => { + cy.get('body', { timeout: 180000 }).should('be.visible'); + cy.get('body').then(($body) => { + if ($body.find('#inputUsername').length === 0) { + if ($body.text().includes(originIdp)) { + cy.contains('a', originIdp).click(); + } else if ($body.text().includes('kubeadmin')) { + cy.contains('a', 'kubeadmin').click(); + } else { + cy.get('a').first().click(); + } + } + }); + cy.get('#inputUsername', { timeout: 180000 }).should('be.visible'); + cy.get('#inputUsername').type(originUsr); + cy.get('#inputPassword').type(originPwd, { log: false }); + cy.get('button[type=submit]').click(); + }, + ); - cy.get(`[data-test="${loginUsername}"]`).should('be.visible'); + cy.url({ timeout: 2 * MINUTE }).should('include', 'console-openshift-console'); + cy.get(USER_MENU, { timeout: MINUTE }).should('exist'); + dismissWelcomeTourIfPresent(); }); }); Cypress.Commands.add('logout', () => { - // Check if auth is disabled (for a local development environment). cy.window().then((win) => { if (win.SERVER_FLAGS?.authDisabled) { return; } - cy.get('[data-test="user-dropdown"]').click(); - cy.get('[data-test="log-out"]').should('be.visible'); - cy.get('[data-test="log-out"]').click({ force: true }); + + // after() may run on about:blank when testIsolation is enabled + cy.visit('/'); + cy.get('body').then(($body) => { + if ($body.find('[data-test="user-dropdown"]').length === 0) { + cy.log('logout skipped: user menu not present'); + return; + } + cy.get('[data-test="user-dropdown"]').click(); + cy.get('[data-test="log-out"]').should('be.visible'); + cy.get('[data-test="log-out"]').click({ force: true }); + }); }); }); diff --git a/integration-tests/support/selectors.ts b/integration-tests/support/selectors.ts new file mode 100644 index 00000000..d2efd963 --- /dev/null +++ b/integration-tests/support/selectors.ts @@ -0,0 +1,41 @@ +// Cypress global augmentations require this file to be a module. +export {}; + +declare global { + namespace Cypress { + interface Chainable { + byLegacyTestID( + selector: string, + options?: Partial< + Cypress.Loggable & Cypress.Shadow & Cypress.Timeoutable & Cypress.Withinable + >, + ): Chainable>; + byOuiaId( + id: string, + options?: Partial< + Cypress.Loggable & Cypress.Shadow & Cypress.Timeoutable & Cypress.Withinable + >, + ): Chainable>; + byTestID( + selector: string, + options?: Partial< + Cypress.Loggable & Cypress.Shadow & Cypress.Timeoutable & Cypress.Withinable + >, + ): Chainable>; + } + } +} + +// PatternFly OUIA ids (ouiaId prop) render as data-ouia-component-id. +Cypress.Commands.add('byOuiaId', (id, options) => { + cy.get(`[data-ouia-component-id="${id}"]`, options); +}); + +// Console SDK and legacy plugin selectors still use data-test / data-test-id. +Cypress.Commands.add('byTestID', (selector, options) => { + cy.get(`[data-test="${selector}"]`, options); +}); + +Cypress.Commands.add('byLegacyTestID', (selector, options) => { + cy.get(`[data-test-id="${selector}"]`, options); +}); diff --git a/integration-tests/tests/example-page.cy.ts b/integration-tests/tests/example-page.cy.ts deleted file mode 100644 index 922011c7..00000000 --- a/integration-tests/tests/example-page.cy.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { checkErrors } from '../support'; - -const PLUGIN_TEMPLATE_NAME = 'networking-console-plugin'; -const PLUGIN_TEMPLATE_PULL_SPEC = Cypress.env('PLUGIN_TEMPLATE_PULL_SPEC'); -export const isLocalDevEnvironment = Cypress.config('baseUrl').includes('localhost'); - -const installHelmChart = (path: string) => { - cy.exec( - `cd ../../networking-console-plugin && ${path} upgrade -i ${PLUGIN_TEMPLATE_NAME} charts/openshift-console-plugin -n ${PLUGIN_TEMPLATE_NAME} --create-namespace --set plugin.image=${PLUGIN_TEMPLATE_PULL_SPEC}`, - { - failOnNonZeroExit: false, - }, - ) - .get('[data-test="refresh-web-console"]', { timeout: 300000 }) - .should('exist') - .then((result) => { - cy.reload(); - cy.visit(`/dashboards`); - cy.log('Error installing helm chart: ', result.stderr); - cy.log('Successfully installed helm chart: ', result.stdout); - }); -}; -const deleteHelmChart = (path: string) => { - cy.exec( - `cd ../../networking-console-plugin && ${path} uninstall ${PLUGIN_TEMPLATE_NAME} -n ${PLUGIN_TEMPLATE_NAME} && oc delete namespaces ${PLUGIN_TEMPLATE_NAME}`, - { - failOnNonZeroExit: false, - }, - ).then((result) => { - cy.log('Error uninstalling helm chart: ', result.stderr); - cy.log('Successfully uninstalled helm chart: ', result.stdout); - }); -}; - -describe.skip('Console plugin template test', () => { - before(() => { - cy.login(); - - if (!isLocalDevEnvironment) { - console.log('this is not a local env, installig helm'); - - cy.exec('cd ../../networking-console-plugin && ./install_helm.sh', { - failOnNonZeroExit: false, - }).then((result) => { - cy.log('Error installing helm binary: ', result.stderr); - cy.log('Successfully installed helm binary in "/tmp" directory: ', result.stdout); - - installHelmChart('/tmp/helm'); - }); - } else { - console.log('this is a local env, not installing helm'); - - installHelmChart('helm'); - } - }); - - afterEach(() => { - checkErrors(); - }); - - after(() => { - if (!isLocalDevEnvironment) { - deleteHelmChart('/tmp/helm'); - } else { - deleteHelmChart('helm'); - } - cy.logout(); - }); - - it('Verify the example page title', () => { - cy.get('[data-quickstart-id="qs-nav-home"]').click(); - cy.get('[data-test="nav"]').contains('Plugin Example').click(); - cy.url().should('include', '/example'); - cy.get('[data-test="example-page-title"]').should('contain', 'Hello, Plugin!'); - }); -}); diff --git a/integration-tests/tests/list-pages.cy.ts b/integration-tests/tests/list-pages.cy.ts new file mode 100644 index 00000000..31aaa265 --- /dev/null +++ b/integration-tests/tests/list-pages.cy.ts @@ -0,0 +1,57 @@ +import { checkErrors } from '../support'; +import { MINUTE } from '../support/commands'; + +const LIST_PAGES = [ + { + h1: 'Ingresses', + name: 'Ingresses', + url: '/k8s/ns/default/networking.k8s.io~v1~Ingress', + }, + { + h1: 'NetworkAttachmentDefinitions', + name: 'NetworkAttachmentDefinitions', + url: '/k8s/ns/default/k8s.cni.cncf.io~v1~NetworkAttachmentDefinition', + }, + { + h1: 'NetworkPolicies', + name: 'NetworkPolicies', + url: '/k8s/ns/default/networking.k8s.io~v1~NetworkPolicy', + }, + { + h1: 'Routes', + name: 'Routes', + url: '/k8s/ns/default/route.openshift.io~v1~Route', + }, + { + h1: 'Services', + name: 'Services', + url: '/k8s/ns/default/core~v1~Service', + }, + { + h1: 'UserDefinedNetworks', + name: 'UserDefinedNetworks', + url: '/k8s/ns/default/k8s.ovn.org~v1~UserDefinedNetwork', + }, +]; + +describe('List page smoke tests', { testIsolation: false }, () => { + before(() => { + cy.login(); + }); + + afterEach(() => { + checkErrors(); + }); + + after(() => { + cy.logout(); + }); + + LIST_PAGES.forEach(({ h1, name, url }) => { + it(`loads the ${name} list page`, () => { + cy.visit(url); + cy.dismissWelcomeTourIfPresent(); + cy.contains('h1', h1, { timeout: MINUTE }).should('be.visible'); + }); + }); +}); diff --git a/integration-tests/tsconfig.json b/integration-tests/tsconfig.json index c8f71161..958dc85a 100644 --- a/integration-tests/tsconfig.json +++ b/integration-tests/tsconfig.json @@ -1,9 +1,10 @@ { - "extends": "../tsconfig.json", - "compilerOptions": { - "noEmit": true, - "types":["cypress","node"], - "isolatedModules": false - }, - "include": ["../node_modules/cypress", "./**/*.ts"] -} \ No newline at end of file + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": "..", + "noEmit": true, + "types": ["cypress", "node"], + "isolatedModules": false + }, + "include": ["../node_modules/cypress", "./**/*.ts"] +} diff --git a/locales/en/plugin__networking-console-plugin.json b/locales/en/plugin__networking-console-plugin.json index 4c3e3339..b41606f4 100644 --- a/locales/en/plugin__networking-console-plugin.json +++ b/locales/en/plugin__networking-console-plugin.json @@ -86,6 +86,8 @@ "Configure via:": "Configure via:", "Confirm": "Confirm", "Connection rate": "Connection rate", + "ConsoleQuickStart": "ConsoleQuickStart", + "ConsoleQuickStarts": "ConsoleQuickStarts", "Copied": "Copied", "Copied to clipboard": "Copied to clipboard", "Copy": "Copy", @@ -147,6 +149,8 @@ "Egress rule": "Egress rule", "Egress rules": "Egress rules", "Enable {{kind}}": "Enable {{kind}}", + "EndpointSlice": "EndpointSlice", + "EndpointSlices": "EndpointSlices", "Error": "Error", "Error details": "Error details", "Example: 100": "Example: 100", diff --git a/locales/es/plugin__networking-console-plugin.json b/locales/es/plugin__networking-console-plugin.json index a8c200f2..1fcc0b7c 100644 --- a/locales/es/plugin__networking-console-plugin.json +++ b/locales/es/plugin__networking-console-plugin.json @@ -87,6 +87,8 @@ "Configure via:": "Configurar a través de:", "Confirm": "Confirmar", "Connection rate": "Tasa de conexión", + "ConsoleQuickStart": "ConsoleQuickStart", + "ConsoleQuickStarts": "ConsoleQuickStarts", "Copied": "Copiado", "Copied to clipboard": "Copiado al portapapeles", "Copy": "Copy", @@ -148,6 +150,8 @@ "Egress rule": "Regla de salida", "Egress rules": "Reglas de salida", "Enable {{kind}}": "Permitir {{kind}}", + "EndpointSlice": "EndpointSlice", + "EndpointSlices": "EndpointSlices", "Error": "Error", "Error details": "Error de detalles", "Example: 100": "Ejemplo: 100", diff --git a/locales/fr/plugin__networking-console-plugin.json b/locales/fr/plugin__networking-console-plugin.json index ff250aaa..cda660ee 100644 --- a/locales/fr/plugin__networking-console-plugin.json +++ b/locales/fr/plugin__networking-console-plugin.json @@ -87,6 +87,8 @@ "Configure via:": "Configurer via :", "Confirm": "Confirmer", "Connection rate": "Débit de la connexion", + "ConsoleQuickStart": "ConsoleQuickStart", + "ConsoleQuickStarts": "ConsoleQuickStarts", "Copied": "Copié", "Copied to clipboard": "Copié dans le Presse-papiers", "Copy": "Copy", @@ -148,6 +150,8 @@ "Egress rule": "Règle de sortie", "Egress rules": "Règles de sortie", "Enable {{kind}}": "Activer {{kind}}", + "EndpointSlice": "EndpointSlice", + "EndpointSlices": "EndpointSlices", "Error": "Erreur", "Error details": "Détails de l’erreur", "Example: 100": "Exemple: 100", diff --git a/locales/ja/plugin__networking-console-plugin.json b/locales/ja/plugin__networking-console-plugin.json index 19a3e1e1..32df78e2 100644 --- a/locales/ja/plugin__networking-console-plugin.json +++ b/locales/ja/plugin__networking-console-plugin.json @@ -85,6 +85,8 @@ "Configure via:": "設定方法:", "Confirm": "確定", "Connection rate": "接続速度", + "ConsoleQuickStart": "ConsoleQuickStart", + "ConsoleQuickStarts": "ConsoleQuickStarts", "Copied": "コピー済み", "Copied to clipboard": "クリップボードにコピー済み", "Copy": "Copy", @@ -146,6 +148,8 @@ "Egress rule": "Egress ルール", "Egress rules": "Egress ルール", "Enable {{kind}}": "{{kind}} の有効化", + "EndpointSlice": "EndpointSlice", + "EndpointSlices": "EndpointSlices", "Error": "エラー", "Error details": "エラーの詳細", "Example: 100": "例: 100", diff --git a/locales/ko/plugin__networking-console-plugin.json b/locales/ko/plugin__networking-console-plugin.json index f8026b87..11446843 100644 --- a/locales/ko/plugin__networking-console-plugin.json +++ b/locales/ko/plugin__networking-console-plugin.json @@ -85,6 +85,8 @@ "Configure via:": "다음을 사용하여 설정:", "Confirm": "확인", "Connection rate": "연결 속도", + "ConsoleQuickStart": "ConsoleQuickStart", + "ConsoleQuickStarts": "ConsoleQuickStarts", "Copied": "복사됨", "Copied to clipboard": "클립 보드에 복사됨", "Copy": "Copy", @@ -146,6 +148,8 @@ "Egress rule": "Egress 규칙", "Egress rules": "송신 규칙", "Enable {{kind}}": "{{kind}} 활성화", + "EndpointSlice": "EndpointSlice", + "EndpointSlices": "EndpointSlices", "Error": "오류", "Error details": "오류 정보", "Example: 100": "예: 100", diff --git a/locales/zh/plugin__networking-console-plugin.json b/locales/zh/plugin__networking-console-plugin.json index b3547bc7..06009c5a 100644 --- a/locales/zh/plugin__networking-console-plugin.json +++ b/locales/zh/plugin__networking-console-plugin.json @@ -85,6 +85,8 @@ "Configure via:": "通过以下配置:", "Confirm": "确认", "Connection rate": "连接率", + "ConsoleQuickStart": "ConsoleQuickStart", + "ConsoleQuickStarts": "ConsoleQuickStarts", "Copied": "已复制", "Copied to clipboard": "复制到剪贴板", "Copy": "Copy", @@ -146,6 +148,8 @@ "Egress rule": "Egress 规则", "Egress rules": "Egress 规则", "Enable {{kind}}": "启用 {{kind}}", + "EndpointSlice": "EndpointSlice", + "EndpointSlices": "EndpointSlices", "Error": "错误", "Error details": "错误详情", "Example: 100": "示例:100", diff --git a/package-lock.json b/package-lock.json index a0ac40d0..4d383a40 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "0.0.1", "license": "Apache-2.0", "dependencies": { - "@kubevirt-ui/kubevirt-api": "^1.4.2", + "@kubevirt-ui-ext/kubevirt-api": "2.1.5", "@openshift-console/dynamic-plugin-sdk": "4.19.1", "@openshift-console/dynamic-plugin-sdk-internal": "4.19.0", "@patternfly/quickstarts": "6.4.0", @@ -59,30 +59,31 @@ }, "devDependencies": { "@cypress/webpack-preprocessor": "^5.15.5", + "@eslint/js": "^9.39.5", "@openshift-console/dynamic-plugin-sdk-webpack": "4.19.0", "@openshift/dynamic-plugin-sdk-webpack": "4.0.2", "@types/js-yaml": "^4.0.9", + "@types/lodash": "^4.17.25", "@types/node": "^18.0.0", "@types/react": "^17.0.37", "@types/react-helmet": "^6.1.4", "@types/react-router-dom": "^5.3.2", "@types/uuid": "^9.0.8", - "@typescript-eslint/eslint-plugin": "^5.62.0", - "@typescript-eslint/parser": "^5.62.0", "css-loader": "^6.7.1", "cypress": "^15.21.1", "cypress-multi-reporters": "^1.6.2", "esbuild-loader": "^4.5.0", - "eslint": "^8.57.1", - "eslint-config-prettier": "^8.10.0", - "eslint-plugin-cypress": "^2.15.1", - "eslint-plugin-perfectionist": "^2.6.0", - "eslint-plugin-prettier": "^5.5.7", - "eslint-plugin-react": "^7.34.0", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-simple-import-sort": "^12.0.0", + "eslint": "^9.39.5", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-cypress": "^6.4.4", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-perfectionist": "^5.12.1", + "eslint-plugin-react": "^7.37.5", + "eslint-plugin-react-hooks": "^7.1.1", + "eslint-plugin-simple-import-sort": "^14.0.0", "file-loader": "^6.2.0", "fork-ts-checker-webpack-plugin": "^9.0.2", + "globals": "^17.13.0", "i18next-conv": "12.1.1", "i18next-parser": "^9.3.0", "mocha-junit-reporter": "^2.2.0", @@ -97,6 +98,7 @@ "ts-node": "^10.9.2", "tsconfig-paths-webpack-plugin": "^4.1.0", "typescript": "5.9.x", + "typescript-eslint": "^8.71.1", "webpack": "^5.112.0", "webpack-cli": "5.1.4", "webpack-dev-server": "^5.2.7" @@ -123,7 +125,6 @@ "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=6.9.0" } @@ -134,7 +135,6 @@ "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", @@ -166,7 +166,6 @@ "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", @@ -198,7 +197,6 @@ "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", @@ -276,7 +274,6 @@ "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=6.9.0" } @@ -302,7 +299,6 @@ "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7" @@ -317,7 +313,6 @@ "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/helper-module-imports": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7", @@ -414,7 +409,6 @@ "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=6.9.0" } @@ -435,7 +429,6 @@ "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=6.9.0" } @@ -462,7 +455,6 @@ "integrity": "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" @@ -477,7 +469,6 @@ "integrity": "sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/types": "^7.29.8" }, @@ -1686,7 +1677,6 @@ "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", @@ -1702,7 +1692,6 @@ "integrity": "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", @@ -1722,7 +1711,6 @@ "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/helper-string-parser": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7" @@ -1858,17 +1846,6 @@ "node": ">=10.0.0" } }, - "node_modules/@dual-bundle/import-meta-resolve": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.2.1.tgz", - "integrity": "sha512-id+7YRUgoUX6CgV0DtuhirQWodeeA7Lf4i2x71JS/vtA5pRb/hIGWlw+G6MeXvsM+MXrz0VAydTGElX1rAfgPg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/JounQin" - } - }, "node_modules/@esbuild/aix-ppc64": { "version": "0.25.12", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", @@ -2340,38 +2317,119 @@ "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/config-array": { + "version": "0.21.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz", + "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.5" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.7.tgz", + "integrity": "sha512-F42g89Qd5oAWtp0k0nnSrjziAKza7w8SVT4mStc18LZMaRb4J1HQAHLCalEtDCxrTuksx7NU9qsmeLwpOfPqWw==", "dev": true, "license": "MIT", "dependencies": { - "ajv": "^6.12.4", + "ajv": "^6.14.0", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", + "js-yaml": "^4.3.2", + "minimatch": "^3.1.5", "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "version": "9.39.5", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.5.tgz", + "integrity": "sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A==", "dev": true, "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@gulpjs/to-absolute-glob": { @@ -2387,20 +2445,42 @@ "node": ">=10.13.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", + "node_modules/@humanfs/core": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", + "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "@humanfs/types": "^0.15.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", + "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.2", + "@humanfs/types": "^0.15.0", + "@humanwhocodes/retry": "^0.4.0" }, "engines": { - "node": ">=10.10.0" + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/types": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", + "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" } }, "node_modules/@humanwhocodes/module-importer": { @@ -2417,13 +2497,19 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", "dev": true, - "license": "BSD-3-Clause" + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@isaacs/cliui": { "version": "8.0.2", @@ -2555,7 +2641,6 @@ "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" @@ -3030,11 +3115,14 @@ "tslib": "2" } }, - "node_modules/@kubevirt-ui/kubevirt-api": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@kubevirt-ui/kubevirt-api/-/kubevirt-api-1.4.2.tgz", - "integrity": "sha512-7t15bvfqYTG+bVrVx8YhpRRVcnqXutRI9+OfUdTm/t9X9HDn9Mnm4ID26I+sVW6ML5SfF533mNugi8FuN2/L2g==", - "license": "Apache-2.0" + "node_modules/@kubevirt-ui-ext/kubevirt-api": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@kubevirt-ui-ext/kubevirt-api/-/kubevirt-api-2.1.5.tgz", + "integrity": "sha512-Y045D5Z+ehqZnlQpdzvfXZg5W8yh5b6nkndSbjOlA3Wi1G25512RGMb6/YzA8fj51NS8vIPQEgCss2X+2JYwZg==", + "license": "Apache-2.0", + "engines": { + "node": ">=20" + } }, "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.5", @@ -3056,44 +3144,6 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/@openshift-console/dynamic-plugin-sdk": { "version": "4.19.1", "resolved": "https://registry.npmjs.org/@openshift-console/dynamic-plugin-sdk/-/dynamic-plugin-sdk-4.19.1.tgz", @@ -3939,19 +3989,6 @@ "node": ">=14" } }, - "node_modules/@pkgr/core": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.3.6.tgz", - "integrity": "sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/pkgr" - } - }, "node_modules/@remix-run/router": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.6.2.tgz", @@ -3961,6 +3998,13 @@ "node": ">=14" } }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, "node_modules/@tsconfig/node10": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.13.tgz", @@ -4380,6 +4424,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/lodash": { "version": "4.17.26", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.26.tgz", @@ -4516,13 +4567,6 @@ "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", "license": "MIT" }, - "node_modules/@types/semver": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.8.0.tgz", - "integrity": "sha512-1mAINjtQCXXeLkJ9ehXkwOcBpqtLxiVtKhpUf83DdRNdQKV0iXZpaHYqRr7nj+wvxuJzoAmAwXI+sCNMv1CzLQ==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/send": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", @@ -4629,135 +4673,159 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "version": "8.72.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.72.0.tgz", + "integrity": "sha512-aysKgysPX9XOv/dk95UkvUDe++Q3n3dJPG9CEWT3RUccxfkPJ+Qn6nhKPDhZXU6Ofo9kgwGWwKyQCnZIXTgngg==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.72.0", + "@typescript-eslint/type-utils": "8.72.0", + "@typescript-eslint/utils": "8.72.0", + "@typescript-eslint/visitor-keys": "8.72.0", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.5.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@typescript-eslint/parser": "^8.72.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.13", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.13.tgz", + "integrity": "sha512-2E8Q6rh+1RRSq/YdaGsNfXsEZy9FVqv6BSSrkmZJP7BnaoPnRfKL+YaofPvP+5rzdk144qSm6i4+hvPgUcbV4Q==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 4" } }, "node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "version": "8.72.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.72.0.tgz", + "integrity": "sha512-0O+x3ynciD6zuXb1CKSu165haQV6ey53DKhHHUnujP7U+XlltJG+/keT0Xhd1HXCze+IHf7Tvt39ovyepX/LNw==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "debug": "^4.3.4" + "@typescript-eslint/scope-manager": "8.72.0", + "@typescript-eslint/types": "8.72.0", + "@typescript-eslint/typescript-estree": "8.72.0", + "@typescript-eslint/visitor-keys": "8.72.0", + "debug": "^4.4.3" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.72.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.72.0.tgz", + "integrity": "sha512-bzHngBbmIgzj6TsTjVUCntGx6FFLgE7mPjpO0PzHycOaZHXqS43XnrkFIHRS16LLr/xO6FHSXG3GJFo/F4bSBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.72.0", + "@typescript-eslint/types": "^8.72.0", + "debug": "^4.4.3" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "version": "8.72.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.72.0.tgz", + "integrity": "sha512-JewPyJOYcXBSAS7PIgufscHOwZqhTGyBRiQJhhuDln66tMchxvvt7nJ90JKKIoOelmdHA3kAQbm9cEUHc4JSEA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" + "@typescript-eslint/types": "8.72.0", + "@typescript-eslint/visitor-keys": "8.72.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.72.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.72.0.tgz", + "integrity": "sha512-0vbxCf7xLVPSjcOdm6eQbgViH8EDJ8xnl1laLT9yoqSz2YmcSfSg5Vdl0JUvZf6rcuJ0ZivJIuMD4edTg8obaA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "version": "8.72.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.72.0.tgz", + "integrity": "sha512-gEXxmmbSTSOVTC37IYYvremOM31v+UN2W772bJxmVYPhAOPSUxtacyb7wkm1EhkYKU6KzFJsdU44DCV4to0LWw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" + "@typescript-eslint/types": "8.72.0", + "@typescript-eslint/typescript-estree": "8.72.0", + "@typescript-eslint/utils": "8.72.0", + "debug": "^4.4.3", + "ts-api-utils": "^2.5.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "version": "8.72.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.72.0.tgz", + "integrity": "sha512-Adfoy59kxNEjT5E5fnyrp7GpHYuWs8ONbdohu4ez6IU46qDq8LltG90tLmkucZB2uhYL8mqBjtXqGd8yhfjXqQ==", "dev": true, "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -4765,37 +4833,76 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "version": "8.72.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.72.0.tgz", + "integrity": "sha512-gwLfFgWcw15tN2KXDCJvxEOQjPn+P3j/n3eSqkZ5sX4VpW9Cosodr+tWwBZRvJT3TcKx6HnPRGZMCNAiP1Xhug==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "@typescript-eslint/project-service": "8.72.0", + "@typescript-eslint/tsconfig-utils": "8.72.0", + "@typescript-eslint/types": "8.72.0", + "@typescript-eslint/visitor-keys": "8.72.0", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.5.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.12.tgz", + "integrity": "sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", + "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.8" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, "license": "ISC", "bin": { @@ -4806,69 +4913,59 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "version": "8.72.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.72.0.tgz", + "integrity": "sha512-0up3oArJZBYnzOaEXKo8DmI43QvMZyPoFEt9LWzRJcyl/RcJjfKKPebknN1VbTgXBf3M/KggUh5uUMdURLnseg==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.72.0", + "@typescript-eslint/types": "8.72.0", + "@typescript-eslint/typescript-estree": "8.72.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "version": "8.72.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.72.0.tgz", + "integrity": "sha512-E2mroviasaWecDzTGiGMtuEguuLVOeRggnrIn93CJuxYJzQBHbyymlT08aVQydbBal5538o+JkBKXh2sRuCyIA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "8.72.0", + "eslint-visitor-keys": "^5.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.4.0.tgz", - "integrity": "sha512-1mEZtMKPM09vDmQt5y7YvmN2+DFTP7Tg0EWXdic8/C6VRnpb33e4ghisCIE3WZjsE2N8mf+QV1Zqh7ZFYLWInQ==", + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", "dev": true, - "license": "ISC" + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } }, "node_modules/@webassemblyjs/ast": { "version": "1.14.1", @@ -5389,16 +5486,6 @@ "dev": true, "license": "MIT" }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/array.prototype.findlast": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", @@ -5420,6 +5507,28 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array.prototype.flat": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", @@ -7858,19 +7967,6 @@ "node": ">=0.3.1" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/dns-packet": { "version": "5.6.1", "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", @@ -7884,19 +7980,6 @@ "node": ">=6" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/dom-serializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", @@ -8870,289 +8953,277 @@ } }, "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "version": "9.39.5", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.5.tgz", + "integrity": "sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw==", "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.2", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.6", + "@eslint/js": "9.39.5", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", + "minimatch": "^3.1.5", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-config-prettier": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.2.tgz", - "integrity": "sha512-/IGJ6+Dka158JnP5n5YFMOszjDWrXggGz1LaK/guZq9vZTmniaKlHcsscvkAhn9y4U+BU3JuUdYvtAMcv30y4A==", + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", + "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", "dev": true, "license": "MIT", "bin": { "eslint-config-prettier": "bin/cli.js" }, + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" + }, "peerDependencies": { "eslint": ">=7.0.0" } }, - "node_modules/eslint-plugin-cypress": { - "version": "2.15.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.15.2.tgz", - "integrity": "sha512-CtcFEQTDKyftpI22FVGpx8bkpKyYXBlNge6zSo0pl5/qJvBAnzaD76Vu2AsP16d6mTj478Ldn2mhgrWV+Xr0vQ==", + "node_modules/eslint-import-resolver-node": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.10.tgz", + "integrity": "sha512-tRrKqFyCaKict5hOd244sL6EQFNycnMQnBe+j8uqGNXYzsImGbGUU4ibtoaBmv5FLwJwcFJNeg1GeVjQfbMrDQ==", "dev": true, "license": "MIT", "dependencies": { - "globals": "^13.20.0" - }, - "peerDependencies": { - "eslint": ">= 3.2.1" + "debug": "^3.2.7", + "is-core-module": "^2.16.1", + "resolve": "^2.0.0-next.6" } }, - "node_modules/eslint-plugin-perfectionist": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-perfectionist/-/eslint-plugin-perfectionist-2.11.0.tgz", - "integrity": "sha512-XrtBtiu5rbQv88gl+1e2RQud9te9luYNvKIgM9emttQ2zutHPzY/AQUucwxscDKV4qlTkvLTxjOFvxqeDpPorw==", + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/utils": "^6.13.0 || ^7.0.0", - "minimatch": "^9.0.3", - "natural-compare-lite": "^1.4.0" - }, - "peerDependencies": { - "astro-eslint-parser": "^1.0.2", - "eslint": ">=8.0.0", - "svelte": ">=3.0.0", - "svelte-eslint-parser": "^0.37.0", - "vue-eslint-parser": ">=9.0.0" - }, - "peerDependenciesMeta": { - "astro-eslint-parser": { - "optional": true - }, - "svelte": { - "optional": true - }, - "svelte-eslint-parser": { - "optional": true - }, - "vue-eslint-parser": { - "optional": true - } + "ms": "^2.1.1" } }, - "node_modules/eslint-plugin-perfectionist/node_modules/@typescript-eslint/scope-manager": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", - "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", + "node_modules/eslint-import-resolver-node/node_modules/resolve": { + "version": "2.0.0-next.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.7.tgz", + "integrity": "sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0" + "es-errors": "^1.3.0", + "is-core-module": "^2.16.2", + "node-exports-info": "^1.6.0", + "object-keys": "^1.1.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": "^18.18.0 || >=20.0.0" + "bin": { + "resolve": "bin/resolve" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-perfectionist/node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", - "dev": true, - "license": "MIT", "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-perfectionist/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", - "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", + "node_modules/eslint-module-utils": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.14.0.tgz", + "integrity": "sha512-W2WCRZ9Dqntd+2u8jJcVMV2PKulc6RdLgUUoh/yQr3uB6lo/ZOeGx11sv60/8S4QFFKNslAlWhr9u0Ef7ZW6Ig==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" + "debug": "^3.2.7" }, "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=4" }, "peerDependenciesMeta": { - "typescript": { + "eslint": { "optional": true } } }, - "node_modules/eslint-plugin-perfectionist/node_modules/@typescript-eslint/utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", - "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-cypress": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-6.4.4.tgz", + "integrity": "sha512-ez6i14V0xYrq0DMKQmKPeWpi9XP8RI8GK6YT657yOnVlg72PUyR2psgVmC3jXjpTAXVdyB5VDoQPN/ytaw9+Pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "globals": "^17.8.0" }, "peerDependencies": { - "eslint": "^8.56.0" + "@typescript-eslint/parser": ">=8", + "eslint": ">=9" + }, + "peerDependenciesMeta": { + "@typescript-eslint/parser": { + "optional": true + } } }, - "node_modules/eslint-plugin-perfectionist/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", - "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", + "node_modules/eslint-plugin-import": { + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.18.0", - "eslint-visitor-keys": "^3.4.3" + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.1", + "hasown": "^2.0.2", + "is-core-module": "^2.16.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.1", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.9", + "tsconfig-paths": "^3.15.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": ">=4" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, - "node_modules/eslint-plugin-perfectionist/node_modules/brace-expansion": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.7.tgz", - "integrity": "sha512-uZbew1NqdmPDTMJ8ah1y+b+9QEJrfkXFk3RcTQw3X0jW/xRUvFKsg1CfQdSYGdTbXZWExtU3J3ccxtnfw1Fi0g==", + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "ms": "^2.1.1" } }, - "node_modules/eslint-plugin-perfectionist/node_modules/minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "brace-expansion": "^2.0.2" + "esutils": "^2.0.2" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-perfectionist/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "node_modules/eslint-plugin-import/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" }, - "engines": { - "node": ">=10" + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/eslint-plugin-import/node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" } }, - "node_modules/eslint-plugin-prettier": { - "version": "5.5.7", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.7.tgz", - "integrity": "sha512-WjHyn3GrFd+ZR0rzsLiM4zJZ35PZMOE0SUIxzGmnWNG0126yNfJKJzObmmkYDwHJfGlkz3PSlzyG9ez/LJntwg==", + "node_modules/eslint-plugin-perfectionist": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-perfectionist/-/eslint-plugin-perfectionist-5.13.0.tgz", + "integrity": "sha512-kPlqE2Kdh0njsad9S9xL/xnq+NNVUsga/uS3yf6axE0RddACM3Q+idJyethC7R+C9b73+NRhAWvKyXPrkl0nFA==", "dev": true, "license": "MIT", "dependencies": { - "prettier-linter-helpers": "^1.0.1", - "synckit": "^0.12.3" + "@typescript-eslint/types": "^8.71.2", + "@typescript-eslint/utils": "^8.71.2", + "natural-orderby": "^5.0.0" }, "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint-plugin-prettier" + "node": "^20.0.0 || >=22.0.0" }, "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", - "prettier": ">=3.0.0" + "eslint": "^8.45.0 || ^9.0.0 || ^10.0.0" }, "peerDependenciesMeta": { - "@types/eslint": { - "optional": true - }, - "eslint-config-prettier": { + "eslint": { "optional": true } } @@ -9191,16 +9262,23 @@ } }, "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", - "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.1.1.tgz", + "integrity": "sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==", "dev": true, "license": "MIT", + "dependencies": { + "@babel/core": "^7.24.4", + "@babel/parser": "^7.24.4", + "hermes-parser": "^0.25.1", + "zod": "^3.25.0 || ^4.0.0", + "zod-validation-error": "^3.5.0 || ^4.0.0" + }, "engines": { - "node": ">=10" + "node": ">=18" }, "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0" } }, "node_modules/eslint-plugin-react/node_modules/doctrine": { @@ -9241,9 +9319,9 @@ } }, "node_modules/eslint-plugin-simple-import-sort": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-12.1.1.tgz", - "integrity": "sha512-6nuzu4xwQtE3332Uz0to+TxDQYRLTKRESSc2hefVT48Zc8JthmN23Gx9lnYhu0FtkRSL1oxny3kJ2aveVhmOVA==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-14.0.0.tgz", + "integrity": "sha512-NUJO0+XFCkk+o5EsAJruTgnfMEpeWrPWeJS15UVF60GgXmqz1BJ9/3hzlvG7lkL8Bubzos5cCLptThbFfPnSMQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -9251,27 +9329,20 @@ } }, "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { @@ -9353,18 +9424,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, + "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -9459,18 +9526,31 @@ } }, "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -9712,13 +9792,6 @@ "dev": true, "license": "MIT" }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true, - "license": "Apache-2.0" - }, "node_modules/fast-fifo": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", @@ -9726,36 +9799,6 @@ "dev": true, "license": "MIT" }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -9821,16 +9864,16 @@ } }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/file-loader": { @@ -9991,18 +10034,17 @@ } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "license": "MIT", "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16" } }, "node_modules/flatted": { @@ -10462,7 +10504,6 @@ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=6.9.0" } @@ -10706,16 +10747,13 @@ } }, "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "version": "17.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.13.0.tgz", + "integrity": "sha512-RwMTC61u7hrG3ZJMkZQOK4JLJrKS8QtoTii63EmWvFXHqycY9FObBJQCbsLxSO8kjKhWE5kV1GC+Vb1g3RI0Zg==", "dev": true, "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -10738,27 +10776,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -10779,13 +10796,6 @@ "dev": true, "license": "ISC" }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, "node_modules/gulp-sort": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/gulp-sort/-/gulp-sort-2.0.0.tgz", @@ -10969,6 +10979,23 @@ "dev": true, "license": "MIT" }, + "node_modules/hermes-estree": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", + "dev": true, + "license": "MIT" + }, + "node_modules/hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hermes-estree": "0.25.1" + } + }, "node_modules/history": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/history/-/history-5.3.0.tgz", @@ -12454,7 +12481,6 @@ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, "license": "MIT", - "peer": true, "bin": { "jsesc": "bin/jsesc" }, @@ -13113,7 +13139,6 @@ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "license": "ISC", - "peer": true, "dependencies": { "yallist": "^3.0.2" } @@ -13249,16 +13274,6 @@ "dev": true, "license": "MIT" }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -14289,12 +14304,15 @@ "dev": true, "license": "MIT" }, - "node_modules/natural-compare-lite": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.1.tgz", - "integrity": "sha512-8Mz06azhPqiDlxhUaUTjBhNAbib/1MoPr89kgmuV6Ir8ICT2/Q/XSYg6VfL3fq2x8MpSQX8sqyI/NeZ5GsGyXA==", + "node_modules/natural-orderby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-5.0.0.tgz", + "integrity": "sha512-kKHJhxwpR/Okycz4HhQKKlhWe4ASEfPgkSWNmKFHd7+ezuQlxkA5cM3+XkBPvm1gmHen3w53qsYAv+8GwRrBlg==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=18" + } }, "node_modules/negotiator": { "version": "0.6.4", @@ -14526,6 +14544,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/object.values": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", @@ -15275,19 +15308,6 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz", - "integrity": "sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/pretty-bytes": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", @@ -15439,27 +15459,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/quick-temp": { "version": "0.1.9", "resolved": "https://registry.npmjs.org/quick-temp/-/quick-temp-0.1.9.tgz", @@ -16405,30 +16404,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, "node_modules/rw": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", @@ -17080,16 +17055,6 @@ "dev": true, "license": "ISC" }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/slice-ansi": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-8.0.0.tgz", @@ -17601,23 +17566,6 @@ "dev": true, "license": "MIT" }, - "node_modules/synckit": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.12.3.tgz", - "integrity": "sha512-U+/AXT6LWsxnj2vz9HeUuPWBNgdWxjyIEjEPdbJARC9txmgPzo2VEdqnFo4hHaNyMPtycyVJrSaQYeQv/PoyyA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@dual-bundle/import-meta-resolve": "^4.2.1", - "@pkgr/core": "^0.3.6" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/synckit" - } - }, "node_modules/systeminformation": { "version": "5.33.16", "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.33.16.tgz", @@ -17758,13 +17706,6 @@ } } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "license": "MIT" - }, "node_modules/thingies": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.6.1.tgz", @@ -17862,6 +17803,54 @@ "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", "license": "MIT" }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", + "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/tlds": { "version": "1.261.0", "resolved": "https://registry.npmjs.org/tlds/-/tlds-1.261.0.tgz", @@ -17991,16 +17980,16 @@ } }, "node_modules/ts-api-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", - "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", + "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", "dev": true, "license": "MIT", "engines": { - "node": ">=16" + "node": ">=18.12" }, "peerDependencies": { - "typescript": ">=4.2.0" + "typescript": ">=4.8.4" } }, "node_modules/ts-node": { @@ -18170,29 +18159,6 @@ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" - }, "node_modules/tsyringe": { "version": "4.10.0", "resolved": "https://registry.npmjs.org/tsyringe/-/tsyringe-4.10.0.tgz", @@ -18246,19 +18212,6 @@ "node": ">= 0.8.0" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -18373,6 +18326,30 @@ "node": ">=14.17" } }, + "node_modules/typescript-eslint": { + "version": "8.72.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.72.0.tgz", + "integrity": "sha512-r26Fkc8As+mZvqp7SLsMmNFyYUup/6CjK7/eHBHmhOw6GH6n6YFxHVFrG0jN1c5CMpDzelLPxvgeCOzx7BjN+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.72.0", + "@typescript-eslint/parser": "8.72.0", + "@typescript-eslint/typescript-estree": "8.72.0", + "@typescript-eslint/utils": "8.72.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, "node_modules/uc.micro": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-3.0.0.tgz", @@ -19932,8 +19909,7 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true, - "license": "ISC", - "peer": true + "license": "ISC" }, "node_modules/yargs": { "version": "16.2.0", @@ -20018,6 +19994,29 @@ "engines": { "node": ">=10" } + }, + "node_modules/zod": { + "version": "4.6.7", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.6.7.tgz", + "integrity": "sha512-g8W2D2kU6a8untc053fX1uVBKzM7yqAxW/3zwk83+6RyF2+SKOuV+c0wBDhUwzV1PaGapmZH+rmcUzPf+3CGwg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-validation-error": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", + "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + } } } } diff --git a/package.json b/package.json index 29d0b240..9201a761 100644 --- a/package.json +++ b/package.json @@ -13,8 +13,8 @@ "start-console": "./start-console.sh", "i18n": "node ./i18n-scripts/migrate-plural-format.js && ./i18n-scripts/build-i18n.sh && node ./i18n-scripts/set-english-defaults.js", "ts-node": "ts-node -O '{\"module\":\"commonjs\"}'", - "lint": "eslint ./src ./integration-tests ", - "lint-fix": "eslint ./src ./integration-tests --fix", + "lint": "eslint --max-warnings=0 . && prettier --ignore-unknown --check .", + "lint-fix": "eslint --max-warnings=0 --fix . && prettier --ignore-unknown --write .", "test-cypress": "cd integration-tests s && cypress open --env openshift=true", "test-cypress-headless": "cd integration-tests && node --max-old-space-size=4096 ../node_modules/.bin/cypress run --env openshift=true --browser ${BRIDGE_E2E_BROWSER_NAME:=electron}", "cypress-merge": "mochawesome-merge ./integration-tests/screenshots/cypress_report*.json > ./integration-tests/screenshots/cypress.json", @@ -29,7 +29,7 @@ "shared-modules:sync": "./scripts/align-shared-modules.sh" }, "dependencies": { - "@kubevirt-ui/kubevirt-api": "^1.4.2", + "@kubevirt-ui-ext/kubevirt-api": "2.1.5", "@openshift-console/dynamic-plugin-sdk": "4.19.1", "@openshift-console/dynamic-plugin-sdk-internal": "4.19.0", "@patternfly/quickstarts": "6.4.0", @@ -79,30 +79,31 @@ }, "devDependencies": { "@cypress/webpack-preprocessor": "^5.15.5", + "@eslint/js": "^9.39.5", "@openshift-console/dynamic-plugin-sdk-webpack": "4.19.0", "@openshift/dynamic-plugin-sdk-webpack": "4.0.2", "@types/js-yaml": "^4.0.9", + "@types/lodash": "^4.17.25", "@types/node": "^18.0.0", "@types/react": "^17.0.37", "@types/react-helmet": "^6.1.4", "@types/react-router-dom": "^5.3.2", "@types/uuid": "^9.0.8", - "@typescript-eslint/eslint-plugin": "^5.62.0", - "@typescript-eslint/parser": "^5.62.0", "css-loader": "^6.7.1", "cypress": "^15.21.1", "cypress-multi-reporters": "^1.6.2", "esbuild-loader": "^4.5.0", - "eslint": "^8.57.1", - "eslint-config-prettier": "^8.10.0", - "eslint-plugin-cypress": "^2.15.1", - "eslint-plugin-perfectionist": "^2.6.0", - "eslint-plugin-prettier": "^5.5.7", - "eslint-plugin-react": "^7.34.0", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-simple-import-sort": "^12.0.0", + "eslint": "^9.39.5", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-cypress": "^6.4.4", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-perfectionist": "^5.12.1", + "eslint-plugin-react": "^7.37.5", + "eslint-plugin-react-hooks": "^7.1.1", + "eslint-plugin-simple-import-sort": "^14.0.0", "file-loader": "^6.2.0", "fork-ts-checker-webpack-plugin": "^9.0.2", + "globals": "^17.13.0", "i18next-conv": "12.1.1", "i18next-parser": "^9.3.0", "mocha-junit-reporter": "^2.2.0", @@ -117,6 +118,7 @@ "ts-node": "^10.9.2", "tsconfig-paths-webpack-plugin": "^4.1.0", "typescript": "5.9.x", + "typescript-eslint": "^8.71.1", "webpack": "^5.112.0", "webpack-cli": "5.1.4", "webpack-dev-server": "^5.2.7" diff --git a/src/templates/ingress.ts b/src/templates/ingress.ts index 98f5aa99..68e5e891 100644 --- a/src/templates/ingress.ts +++ b/src/templates/ingress.ts @@ -1,4 +1,4 @@ -import { IngressModel } from '@kubevirt-ui/kubevirt-api/console'; +import { IngressModel } from '@utils/models'; export const IngressYAMLTemplates = ` apiVersion: ${IngressModel.apiGroup}/${IngressModel.apiVersion} diff --git a/src/templates/nads.ts b/src/templates/nads.ts index 1bf0cd77..f67d1b9b 100644 --- a/src/templates/nads.ts +++ b/src/templates/nads.ts @@ -1,4 +1,4 @@ -import NetworkAttachmentDefinitionModel from '@kubevirt-ui/kubevirt-api/console/models/NetworkAttachmentDefinitionModel'; +import { NetworkAttachmentDefinitionModel } from '@kubevirt-ui-ext/kubevirt-api/console'; export const NetworkAttachmentDefinitionsYAMLTemplates = ` apiVersion: ${NetworkAttachmentDefinitionModel.apiGroup}/${NetworkAttachmentDefinitionModel.apiVersion} diff --git a/src/templates/route.ts b/src/templates/route.ts index 36a99eb5..17a55d80 100644 --- a/src/templates/route.ts +++ b/src/templates/route.ts @@ -1,4 +1,4 @@ -import { RouteModel } from '@kubevirt-ui/kubevirt-api/console'; +import { RouteModel } from '@kubevirt-ui-ext/kubevirt-api/console'; export const RouteYAMLTemplates = ` apiVersion: ${RouteModel.apiGroup}/${RouteModel.apiVersion} diff --git a/src/templates/service.ts b/src/templates/service.ts index 053bea7f..cd4de9ed 100644 --- a/src/templates/service.ts +++ b/src/templates/service.ts @@ -1,4 +1,4 @@ -import { ServiceModel } from '@kubevirt-ui/kubevirt-api/console'; +import { ServiceModel } from '@kubevirt-ui-ext/kubevirt-api/console'; export const ServiceYAMLTemplates = ` apiVersion: ${ServiceModel.apiVersion} diff --git a/src/utils/components/Area/components/ChartLegendTooltip.tsx b/src/utils/components/Area/components/ChartLegendTooltip.tsx index 003d411d..c23b72eb 100644 --- a/src/utils/components/Area/components/ChartLegendTooltip.tsx +++ b/src/utils/components/Area/components/ChartLegendTooltip.tsx @@ -35,13 +35,13 @@ const ChartLegendTooltip: FC< getLabel, height, isCursorTooltip = true, - mainDataName, // eslint-disable-next-line perfectionist/sort-objects + mainDataName, labelComponent = , legendData, stack, text, - themeColor, // eslint-disable-next-line perfectionist/sort-objects - width, // eslint-disable-next-line perfectionist/sort-objects + themeColor, + width, // destructure last theme = getTheme(themeColor), // eslint-disable-line perfectionist/sort-objects ...rest diff --git a/src/utils/components/ConfirmModal/ConfirmModal.tsx b/src/utils/components/ConfirmModal/ConfirmModal.tsx index 86153e18..82b97b1f 100644 --- a/src/utils/components/ConfirmModal/ConfirmModal.tsx +++ b/src/utils/components/ConfirmModal/ConfirmModal.tsx @@ -1,7 +1,14 @@ import React, { FC } from 'react'; -import { Button, ButtonVariant, ModalBody, ModalFooter, ModalHeader } from '@patternfly/react-core'; -import { Modal, ModalVariant } from '@patternfly/react-core'; +import { + Button, + ButtonVariant, + Modal, + ModalBody, + ModalFooter, + ModalHeader, + ModalVariant, +} from '@patternfly/react-core'; import { useNetworkingTranslation } from '@utils/hooks/useNetworkingTranslation'; import '@styles/modal-action.scss'; diff --git a/src/utils/hooks/useClusterNetworkFeatures.ts b/src/utils/hooks/useClusterNetworkFeatures.ts index f6f5a631..52dc3c85 100644 --- a/src/utils/hooks/useClusterNetworkFeatures.ts +++ b/src/utils/hooks/useClusterNetworkFeatures.ts @@ -1,6 +1,6 @@ import { useEffect, useState } from 'react'; -import { ConfigMapModel, modelToGroupVersionKind } from '@kubevirt-ui/kubevirt-api/console'; +import { ConfigMapModel, modelToGroupVersionKind } from '@kubevirt-ui-ext/kubevirt-api/console'; import { K8sResourceKind, useK8sWatchResource } from '@openshift-console/dynamic-plugin-sdk'; const networkConfigMapName = 'openshift-network-features'; diff --git a/src/utils/models/index.ts b/src/utils/models/index.ts index 2fa964cb..d0a83401 100644 --- a/src/utils/models/index.ts +++ b/src/utils/models/index.ts @@ -1,6 +1,6 @@ export * from './network-policy'; -import { modelToGroupVersionKind, modelToRef } from '@kubevirt-ui/kubevirt-api/console'; -import { K8sModel } from '@openshift-console/dynamic-plugin-sdk'; +import { modelToGroupVersionKind, modelToRef } from '@kubevirt-ui-ext/kubevirt-api/console'; +import type { K8sModel } from '@openshift-console/dynamic-plugin-sdk'; export const QuickStartModel: K8sModel = { abbr: 'CQS', @@ -9,7 +9,11 @@ export const QuickStartModel: K8sModel = { crd: true, kind: 'ConsoleQuickStart', label: 'ConsoleQuickStart', + // t('ConsoleQuickStart') + labelKey: 'ConsoleQuickStart', labelPlural: 'ConsoleQuickStarts', + // t('ConsoleQuickStarts') + labelPluralKey: 'ConsoleQuickStarts', namespaced: false, plural: 'consolequickstarts', propagationPolicy: 'Background', @@ -21,7 +25,11 @@ export const EndPointSliceModel: K8sModel = { apiVersion: 'v1', kind: 'EndpointSlice', label: 'EndpointSlice', + // t('EndpointSlice') + labelKey: 'EndpointSlice', labelPlural: 'EndpointSlices', + // t('EndpointSlices') + labelPluralKey: 'EndpointSlices', namespaced: true, plural: 'endpointslices', }; @@ -100,3 +108,19 @@ export const ClusterUserDefinedNetworkModelGroupVersionKind = modelToGroupVersio ClusterUserDefinedNetworkModel, ); export const ClusterUserDefinedNetworkModelRef = modelToRef(ClusterUserDefinedNetworkModel); + +export const IngressModel: K8sModel = { + abbr: 'I', + apiGroup: 'networking.k8s.io', + apiVersion: 'v1', + id: 'ingress', + kind: 'Ingress', + label: 'Ingress', + // t('Ingress') + labelKey: 'Ingress', + labelPlural: 'Ingresses', + // t('Ingresses') + labelPluralKey: 'Ingresses', + namespaced: true, + plural: 'ingresses', +}; diff --git a/src/utils/models/network-policy.ts b/src/utils/models/network-policy.ts index e1719eea..b1dd5b7d 100644 --- a/src/utils/models/network-policy.ts +++ b/src/utils/models/network-policy.ts @@ -1,11 +1,11 @@ import * as _ from 'lodash'; -import { NetworkPolicyModel } from '@kubevirt-ui/kubevirt-api/console'; -import { +import { NetworkPolicyModel } from '@kubevirt-ui-ext/kubevirt-api/console'; +import type { IoK8sApiNetworkingV1NetworkPolicy, IoK8sApiNetworkingV1NetworkPolicyIngressRule, IoK8sApiNetworkingV1NetworkPolicyPort, -} from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +} from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { Selector } from '@openshift-console/dynamic-plugin-sdk'; import { t } from '@utils/hooks/useNetworkingTranslation'; import { diff --git a/src/utils/resources/nads/selectors/index.ts b/src/utils/resources/nads/selectors/index.ts index 2e825d57..8cf26f6e 100644 --- a/src/utils/resources/nads/selectors/index.ts +++ b/src/utils/resources/nads/selectors/index.ts @@ -5,7 +5,7 @@ export const getConfigAsJSON = ( ): NetworkAttachmentDefinitionConfig => { try { return JSON.parse(obj?.spec?.config); - } catch (e) { + } catch { // eslint-disable-next-line no-console console.error('Unable to parse NetworkAttachmentDefinition configuration'); return null; diff --git a/src/utils/resources/networkpolicies/utils.ts b/src/utils/resources/networkpolicies/utils.ts index c26043b2..db31fb2a 100644 --- a/src/utils/resources/networkpolicies/utils.ts +++ b/src/utils/resources/networkpolicies/utils.ts @@ -1,4 +1,4 @@ -import { NetworkPolicyModel } from '@kubevirt-ui/kubevirt-api/console'; +import { NetworkPolicyModel } from '@kubevirt-ui-ext/kubevirt-api/console'; import { K8sResourceCommon } from '@openshift-console/dynamic-plugin-sdk'; import { MultiNetworkPolicyModel } from '@utils/models'; diff --git a/src/views/createprojectmodal/CreateProjectModal.tsx b/src/views/createprojectmodal/CreateProjectModal.tsx index ea452683..3f3d9d14 100644 --- a/src/views/createprojectmodal/CreateProjectModal.tsx +++ b/src/views/createprojectmodal/CreateProjectModal.tsx @@ -2,7 +2,7 @@ import React, { FC, useState } from 'react'; import { FormProvider, useForm } from 'react-hook-form'; import { useNavigate } from 'react-router-dom-v5-compat'; -import { ProjectModel, ProjectRequestModel } from '@kubevirt-ui/kubevirt-api/console'; +import { ProjectModel, ProjectRequestModel } from '@kubevirt-ui-ext/kubevirt-api/console'; import { k8sCreate, k8sDelete, K8sResourceCommon } from '@openshift-console/dynamic-plugin-sdk'; import { Button, diff --git a/src/views/createprojectmodal/components/DetailsProjectTab.tsx b/src/views/createprojectmodal/components/DetailsProjectTab.tsx index af60aed4..f4a9fff3 100644 --- a/src/views/createprojectmodal/components/DetailsProjectTab.tsx +++ b/src/views/createprojectmodal/components/DetailsProjectTab.tsx @@ -8,7 +8,7 @@ import { CreateProjectModalFormState } from '../types'; import ProjectNamePopover from './ProjectNamePopover'; -const DetailsProjectTab: FC = ({}) => { +const DetailsProjectTab: FC = () => { const { t } = useNetworkingTranslation(); const { register, setValue } = useFormContext(); diff --git a/src/views/createprojectmodal/useClusterUDN.ts b/src/views/createprojectmodal/useClusterUDN.ts index daf113dd..931a5898 100644 --- a/src/views/createprojectmodal/useClusterUDN.ts +++ b/src/views/createprojectmodal/useClusterUDN.ts @@ -1,4 +1,4 @@ -import { modelToGroupVersionKind } from '@kubevirt-ui/kubevirt-api/console'; +import { modelToGroupVersionKind } from '@kubevirt-ui-ext/kubevirt-api/console'; import { K8sResourceCommon, useK8sWatchResource } from '@openshift-console/dynamic-plugin-sdk'; import { useIsAdmin } from '@utils/hooks/useIsAdmin'; import { ClusterUserDefinedNetworkModel } from '@utils/models'; diff --git a/src/views/ingresses/actions/IngressActions.tsx b/src/views/ingresses/actions/IngressActions.tsx index 91fff9e4..6ba11ad4 100644 --- a/src/views/ingresses/actions/IngressActions.tsx +++ b/src/views/ingresses/actions/IngressActions.tsx @@ -1,6 +1,6 @@ import React, { FC } from 'react'; -import { IoK8sApiNetworkingV1Ingress } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import type { IoK8sApiNetworkingV1Ingress } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import ActionsDropdown from '@utils/components/ActionsDropdown/ActionsDropdown'; import useIngressActions from '@views/ingresses/actions/hooks/useIngressActions'; diff --git a/src/views/ingresses/actions/hooks/useIngressActions.ts b/src/views/ingresses/actions/hooks/useIngressActions.ts index 3d773cb6..f61dd45d 100644 --- a/src/views/ingresses/actions/hooks/useIngressActions.ts +++ b/src/views/ingresses/actions/hooks/useIngressActions.ts @@ -1,7 +1,6 @@ import { useNavigate } from 'react-router-dom-v5-compat'; -import { IngressModel } from '@kubevirt-ui/kubevirt-api/console'; -import { IoK8sApiNetworkingV1Ingress } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import type { IoK8sApiNetworkingV1Ingress } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { Action, useActiveNamespace, @@ -10,6 +9,7 @@ import { useLabelsModal, } from '@openshift-console/dynamic-plugin-sdk'; import { useNetworkingTranslation } from '@utils/hooks/useNetworkingTranslation'; +import { IngressModel } from '@utils/models'; import { asAccessReview, getResourceURL } from '@utils/resources/shared'; type UseIngressActions = (ingress: IoK8sApiNetworkingV1Ingress) => [actions: Action[]]; diff --git a/src/views/ingresses/details/IngressDetailsPage.tsx b/src/views/ingresses/details/IngressDetailsPage.tsx index fe0f0a23..da0e66f4 100644 --- a/src/views/ingresses/details/IngressDetailsPage.tsx +++ b/src/views/ingresses/details/IngressDetailsPage.tsx @@ -1,9 +1,10 @@ import React, { FC } from 'react'; -import { IngressModel, modelToGroupVersionKind } from '@kubevirt-ui/kubevirt-api/console'; -import { IoK8sApiNetworkingV1Ingress } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import { modelToGroupVersionKind } from '@kubevirt-ui-ext/kubevirt-api/console'; +import type { IoK8sApiNetworkingV1Ingress } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { HorizontalNav, useK8sWatchResource } from '@openshift-console/dynamic-plugin-sdk'; import StatusBox from '@utils/components/StatusBox/StatusBox'; +import { IngressModel } from '@utils/models'; import IngressDetailsPageTitle from '@views/ingresses/details/components/IngressDetailsPageTitle'; import useIngressTabs from '@views/ingresses/details/hooks/useIngressTabs'; diff --git a/src/views/ingresses/details/components/IngressDetailsPageTitle.tsx b/src/views/ingresses/details/components/IngressDetailsPageTitle.tsx index 6b109a7e..44c3b962 100644 --- a/src/views/ingresses/details/components/IngressDetailsPageTitle.tsx +++ b/src/views/ingresses/details/components/IngressDetailsPageTitle.tsx @@ -1,11 +1,12 @@ import React, { FC } from 'react'; -import { IngressModel, modelToRef } from '@kubevirt-ui/kubevirt-api/console'; -import { IoK8sApiNetworkingV1Ingress } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import { modelToRef } from '@kubevirt-ui-ext/kubevirt-api/console'; +import type { IoK8sApiNetworkingV1Ingress } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { Title } from '@patternfly/react-core'; import DetailsPageTitle from '@utils/components/DetailsPageTitle/DetailsPageTitle'; import { useLastNamespacePath } from '@utils/hooks/useLastNamespacePath'; import { useNetworkingTranslation } from '@utils/hooks/useNetworkingTranslation'; +import { IngressModel } from '@utils/models'; import { getName } from '@utils/resources/shared'; import IngressActions from '@views/ingresses/actions/IngressActions'; diff --git a/src/views/ingresses/details/tabs/details/IngressDetailsTab.tsx b/src/views/ingresses/details/tabs/details/IngressDetailsTab.tsx index 9318c513..008358f3 100644 --- a/src/views/ingresses/details/tabs/details/IngressDetailsTab.tsx +++ b/src/views/ingresses/details/tabs/details/IngressDetailsTab.tsx @@ -1,6 +1,6 @@ import React, { FC } from 'react'; -import { IoK8sApiNetworkingV1Ingress } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import type { IoK8sApiNetworkingV1Ingress } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { Grid, GridItem, PageSection } from '@patternfly/react-core'; import DetailsSectionTitle from '@utils/components/DetailsSectionTitle/DetailsSectionTitle'; import Loading from '@utils/components/Loading/Loading'; diff --git a/src/views/ingresses/details/tabs/details/components/IngressDetailsSection/IngressDetailsSection.tsx b/src/views/ingresses/details/tabs/details/components/IngressDetailsSection/IngressDetailsSection.tsx index c411362a..44b20ae3 100644 --- a/src/views/ingresses/details/tabs/details/components/IngressDetailsSection/IngressDetailsSection.tsx +++ b/src/views/ingresses/details/tabs/details/components/IngressDetailsSection/IngressDetailsSection.tsx @@ -1,7 +1,7 @@ import React, { FC } from 'react'; -import { IngressModel, NamespaceModel } from '@kubevirt-ui/kubevirt-api/console'; -import { IoK8sApiNetworkingV1Ingress } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import { NamespaceModel } from '@kubevirt-ui-ext/kubevirt-api/console'; +import type { IoK8sApiNetworkingV1Ingress } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { getGroupVersionKindForModel, ResourceLink, @@ -15,6 +15,7 @@ import { DetailsItem } from '@utils/components/DetailsItem/DetailsItem'; import { LabelList } from '@utils/components/DetailsItem/LabelList'; import { OwnerReferences } from '@utils/components/OwnerReference/owner-references'; import { useNetworkingTranslation } from '@utils/hooks/useNetworkingTranslation'; +import { IngressModel } from '@utils/models'; import { getCreationTimestamp, getLabels, diff --git a/src/views/ingresses/details/tabs/details/components/IngressDetailsSection/TLSCert.tsx b/src/views/ingresses/details/tabs/details/components/IngressDetailsSection/TLSCert.tsx index eca718d2..56850926 100644 --- a/src/views/ingresses/details/tabs/details/components/IngressDetailsSection/TLSCert.tsx +++ b/src/views/ingresses/details/tabs/details/components/IngressDetailsSection/TLSCert.tsx @@ -1,7 +1,7 @@ import React, { FC } from 'react'; -import { SecretModel } from '@kubevirt-ui/kubevirt-api/console'; -import { IoK8sApiNetworkingV1Ingress } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import { SecretModel } from '@kubevirt-ui-ext/kubevirt-api/console'; +import type { IoK8sApiNetworkingV1Ingress } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { getGroupVersionKindForModel, ResourceIcon } from '@openshift-console/dynamic-plugin-sdk'; import { useNetworkingTranslation } from '@utils/hooks/useNetworkingTranslation'; diff --git a/src/views/ingresses/details/tabs/details/components/IngressRulesSection/IngressRulesSection.tsx b/src/views/ingresses/details/tabs/details/components/IngressRulesSection/IngressRulesSection.tsx index 7f5f19af..cbb88139 100644 --- a/src/views/ingresses/details/tabs/details/components/IngressRulesSection/IngressRulesSection.tsx +++ b/src/views/ingresses/details/tabs/details/components/IngressRulesSection/IngressRulesSection.tsx @@ -1,6 +1,6 @@ import React, { FC } from 'react'; -import { IoK8sApiNetworkingV1Ingress } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import type { IoK8sApiNetworkingV1Ingress } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { Table } from '@patternfly/react-table'; import DetailsSectionTitle from '@utils/components/DetailsSectionTitle/DetailsSectionTitle'; import { useNetworkingTranslation } from '@utils/hooks/useNetworkingTranslation'; diff --git a/src/views/ingresses/details/tabs/details/components/IngressRulesSection/RulesHeader.tsx b/src/views/ingresses/details/tabs/details/components/IngressRulesSection/RulesHeader.tsx index cfaacfff..ac34efd2 100644 --- a/src/views/ingresses/details/tabs/details/components/IngressRulesSection/RulesHeader.tsx +++ b/src/views/ingresses/details/tabs/details/components/IngressRulesSection/RulesHeader.tsx @@ -3,7 +3,7 @@ import React, { FC } from 'react'; import { Th, Thead, Tr } from '@patternfly/react-table'; import { useNetworkingTranslation } from '@utils/hooks/useNetworkingTranslation'; -const RulesHeader: FC = ({}) => { +const RulesHeader: FC = () => { const { t } = useNetworkingTranslation(); return ( diff --git a/src/views/ingresses/details/tabs/details/components/IngressRulesSection/RulesRow.tsx b/src/views/ingresses/details/tabs/details/components/IngressRulesSection/RulesRow.tsx index a85aa6de..4e06d553 100644 --- a/src/views/ingresses/details/tabs/details/components/IngressRulesSection/RulesRow.tsx +++ b/src/views/ingresses/details/tabs/details/components/IngressRulesSection/RulesRow.tsx @@ -1,6 +1,6 @@ import React, { FC } from 'react'; -import { ServiceModel } from '@kubevirt-ui/kubevirt-api/console'; +import { ServiceModel } from '@kubevirt-ui-ext/kubevirt-api/console'; import { getGroupVersionKindForModel, ResourceLink } from '@openshift-console/dynamic-plugin-sdk'; import { Td, Tr } from '@patternfly/react-table'; import { IngressPathRule } from '@views/ingresses/details/tabs/details/utils/types'; diff --git a/src/views/ingresses/details/tabs/details/components/IngressRulesSection/RulesRows.tsx b/src/views/ingresses/details/tabs/details/components/IngressRulesSection/RulesRows.tsx index 2e418762..aa78cb91 100644 --- a/src/views/ingresses/details/tabs/details/components/IngressRulesSection/RulesRows.tsx +++ b/src/views/ingresses/details/tabs/details/components/IngressRulesSection/RulesRows.tsx @@ -1,6 +1,6 @@ import React, { FC } from 'react'; -import { IoK8sApiNetworkingV1IngressSpec } from '@kubevirt-ui/kubevirt-api/kubernetes/models/IoK8sApiNetworkingV1IngressSpec'; +import type { IoK8sApiNetworkingV1IngressSpec } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { Tbody } from '@patternfly/react-table'; import EmptyBox from '@utils/components/EmptyBox/EmptyBox'; import { useNetworkingTranslation } from '@utils/hooks/useNetworkingTranslation'; diff --git a/src/views/ingresses/details/tabs/details/utils/utils.ts b/src/views/ingresses/details/tabs/details/utils/utils.ts index 09419f4d..ad692e10 100644 --- a/src/views/ingresses/details/tabs/details/utils/utils.ts +++ b/src/views/ingresses/details/tabs/details/utils/utils.ts @@ -1,4 +1,4 @@ -import { IoK8sApiNetworkingV1IngressServiceBackend } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import type { IoK8sApiNetworkingV1IngressServiceBackend } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; export const getPort = (service: IoK8sApiNetworkingV1IngressServiceBackend): number | string => service?.port?.number || service?.port?.name; diff --git a/src/views/ingresses/details/tabs/yaml/IngressYAMLTab.tsx b/src/views/ingresses/details/tabs/yaml/IngressYAMLTab.tsx index d7af86d2..243a600f 100644 --- a/src/views/ingresses/details/tabs/yaml/IngressYAMLTab.tsx +++ b/src/views/ingresses/details/tabs/yaml/IngressYAMLTab.tsx @@ -1,6 +1,6 @@ import React, { FC, Suspense } from 'react'; -import { IoK8sApiNetworkingV1IngressSpec } from '@kubevirt-ui/kubevirt-api/kubernetes/models/IoK8sApiNetworkingV1IngressSpec'; +import type { IoK8sApiNetworkingV1IngressSpec } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { ResourceYAMLEditor } from '@openshift-console/dynamic-plugin-sdk'; import Loading from '@utils/components/Loading/Loading'; diff --git a/src/views/ingresses/list/IngressesList.tsx b/src/views/ingresses/list/IngressesList.tsx index cf239795..9b5d3971 100644 --- a/src/views/ingresses/list/IngressesList.tsx +++ b/src/views/ingresses/list/IngressesList.tsx @@ -1,8 +1,8 @@ import React, { FC } from 'react'; import { useNavigate } from 'react-router-dom-v5-compat'; -import { IngressModel, modelToGroupVersionKind } from '@kubevirt-ui/kubevirt-api/console'; -import { IoK8sApiNetworkingV1Ingress } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import { modelToGroupVersionKind } from '@kubevirt-ui-ext/kubevirt-api/console'; +import type { IoK8sApiNetworkingV1Ingress } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { ListPageBody, ListPageCreateButton, @@ -17,6 +17,7 @@ import ListEmptyState from '@utils/components/ListEmptyState/ListEmptyState'; import { DOC_URL_NETWORK_INGRESS } from '@utils/constants/documentation'; import { SHARED_DEFAULT_PATH_NEW_RESOURCE_YAML } from '@utils/constants/ui'; import { useNetworkingTranslation } from '@utils/hooks/useNetworkingTranslation'; +import { IngressModel } from '@utils/models'; import { getResourceURL } from '@utils/resources/shared'; import { getValidNamespace } from '@utils/utils'; import useIngressColumns from '@views/ingresses/list/hooks/useIngressColumns'; diff --git a/src/views/ingresses/list/components/IngressTableRow.tsx b/src/views/ingresses/list/components/IngressTableRow.tsx index d937c046..c433dcbd 100644 --- a/src/views/ingresses/list/components/IngressTableRow.tsx +++ b/src/views/ingresses/list/components/IngressTableRow.tsx @@ -1,8 +1,8 @@ import React, { FC } from 'react'; import classNames from 'classnames'; -import { IngressModel, NamespaceModel } from '@kubevirt-ui/kubevirt-api/console'; -import { IoK8sApiNetworkingV1Ingress } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import { NamespaceModel } from '@kubevirt-ui-ext/kubevirt-api/console'; +import type { IoK8sApiNetworkingV1Ingress } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { getGroupVersionKindForModel, ResourceLink, @@ -13,6 +13,7 @@ import { LabelList } from '@utils/components/DetailsItem/LabelList'; import HostDetails from '@utils/components/HostData/HostDetails'; import MutedText from '@utils/components/MutedText/MutedText'; import { t } from '@utils/hooks/useNetworkingTranslation'; +import { IngressModel } from '@utils/models'; import IngressActions from '@views/ingresses/actions/IngressActions'; import { getHostsStr } from '@views/ingresses/list/utils/utils'; import { tableColumnClasses } from '@views/services/list/hooks/useServiceColumn'; diff --git a/src/views/ingresses/list/hooks/useIngressColumns.tsx b/src/views/ingresses/list/hooks/useIngressColumns.tsx index 4fb42b84..2988735e 100644 --- a/src/views/ingresses/list/hooks/useIngressColumns.tsx +++ b/src/views/ingresses/list/hooks/useIngressColumns.tsx @@ -1,10 +1,10 @@ import { useMemo } from 'react'; -import { IngressModel } from '@kubevirt-ui/kubevirt-api/console'; -import { IoK8sApiNetworkingV1Ingress } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import type { IoK8sApiNetworkingV1Ingress } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { TableColumn, useActiveColumns } from '@openshift-console/dynamic-plugin-sdk'; import { sortable } from '@patternfly/react-table'; import { useNetworkingTranslation } from '@utils/hooks/useNetworkingTranslation'; +import { IngressModel } from '@utils/models'; import { objectColumnSorting } from '@utils/utils/sorting'; import { tableColumnClasses } from '@views/services/list/hooks/useServiceColumn'; diff --git a/src/views/ingresses/list/utils/utils.ts b/src/views/ingresses/list/utils/utils.ts index 2050d1a1..ff501b41 100644 --- a/src/views/ingresses/list/utils/utils.ts +++ b/src/views/ingresses/list/utils/utils.ts @@ -1,7 +1,7 @@ -import { +import type { IoK8sApiNetworkingV1Ingress, IoK8sApiNetworkingV1IngressRule, -} from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +} from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { get, isString } from '@utils/utils'; export const ingressValidHosts = (ingress: IoK8sApiNetworkingV1Ingress) => diff --git a/src/views/nads/actions/hooks/useNADsActions.tsx b/src/views/nads/actions/hooks/useNADsActions.tsx index f5734b9b..dbb7d5b2 100644 --- a/src/views/nads/actions/hooks/useNADsActions.tsx +++ b/src/views/nads/actions/hooks/useNADsActions.tsx @@ -1,7 +1,9 @@ import { useNavigate } from 'react-router-dom-v5-compat'; -import { NetworkAttachmentDefinitionModelRef } from '@kubevirt-ui/kubevirt-api/console'; -import NetworkAttachmentDefinitionModel from '@kubevirt-ui/kubevirt-api/console/models/NetworkAttachmentDefinitionModel'; +import { + NetworkAttachmentDefinitionModel, + NetworkAttachmentDefinitionModelRef, +} from '@kubevirt-ui-ext/kubevirt-api/console'; import { Action, useAnnotationsModal, diff --git a/src/views/nads/form/NetworkAttachmentDefinitionForm.tsx b/src/views/nads/form/NetworkAttachmentDefinitionForm.tsx index 1ea3a163..bbcad684 100644 --- a/src/views/nads/form/NetworkAttachmentDefinitionForm.tsx +++ b/src/views/nads/form/NetworkAttachmentDefinitionForm.tsx @@ -2,7 +2,7 @@ import React, { FC, useEffect, useState } from 'react'; import { FormProvider, useForm } from 'react-hook-form'; import { useNavigate } from 'react-router-dom-v5-compat'; -import NetworkAttachmentDefinitionModel from '@kubevirt-ui/kubevirt-api/console/models/NetworkAttachmentDefinitionModel'; +import { NetworkAttachmentDefinitionModel } from '@kubevirt-ui-ext/kubevirt-api/console'; import { useActiveNamespace } from '@openshift-console/dynamic-plugin-sdk'; import { ActionGroup, diff --git a/src/views/nads/form/components/NetworkTypeParameters/components/SriovParameters/SriovParameters.tsx b/src/views/nads/form/components/NetworkTypeParameters/components/SriovParameters/SriovParameters.tsx index 1051272c..0cca22f6 100644 --- a/src/views/nads/form/components/NetworkTypeParameters/components/SriovParameters/SriovParameters.tsx +++ b/src/views/nads/form/components/NetworkTypeParameters/components/SriovParameters/SriovParameters.tsx @@ -1,7 +1,7 @@ import React, { FC, Ref, useState } from 'react'; import { Controller, useFormContext } from 'react-hook-form'; -import SriovNetworkNodePolicyModel from '@kubevirt-ui/kubevirt-api/console/models/SriovNetworkNodePolicyModel'; +import { SriovNetworkNodePolicyModel } from '@kubevirt-ui-ext/kubevirt-api/console'; import { getGroupVersionKindForModel, K8sResourceKind, diff --git a/src/views/nads/form/hooks/useNetworkModels.ts b/src/views/nads/form/hooks/useNetworkModels.ts index 68a0dd2a..2b5f117e 100644 --- a/src/views/nads/form/hooks/useNetworkModels.ts +++ b/src/views/nads/form/hooks/useNetworkModels.ts @@ -1,5 +1,7 @@ -import { SriovNetworkNodePolicyModelRef } from '@kubevirt-ui/kubevirt-api/console'; -import { HyperConvergedModelRef } from '@kubevirt-ui/kubevirt-api/console/models/HyperConvergedModel'; +import { + HyperConvergedModelRef, + SriovNetworkNodePolicyModelRef, +} from '@kubevirt-ui-ext/kubevirt-api/console'; import { useK8sModels } from '@openshift-console/dynamic-plugin-sdk'; const useNetworkModels = (): [hasHyperConvergedCRD: boolean, hasSriovNetNodePolicyCRD: boolean] => { diff --git a/src/views/nads/form/hooks/useOVNK8sNetwork.ts b/src/views/nads/form/hooks/useOVNK8sNetwork.ts index 3bcc2579..01d2f6ca 100644 --- a/src/views/nads/form/hooks/useOVNK8sNetwork.ts +++ b/src/views/nads/form/hooks/useOVNK8sNetwork.ts @@ -1,4 +1,4 @@ -import { modelToGroupVersionKind } from '@kubevirt-ui/kubevirt-api/console'; +import { modelToGroupVersionKind } from '@kubevirt-ui-ext/kubevirt-api/console'; import { K8sResourceKind, useK8sWatchResource } from '@openshift-console/dynamic-plugin-sdk'; import { CLUSTER_NETWORK_CONFIG_NAME, NetworkConfigModel, OVN_K8S } from '../utils/constants'; diff --git a/src/views/nads/form/utils/constants.ts b/src/views/nads/form/utils/constants.ts index a164621a..538e8b5a 100644 --- a/src/views/nads/form/utils/constants.ts +++ b/src/views/nads/form/utils/constants.ts @@ -1,4 +1,4 @@ -import NetworkAttachmentDefinitionModel from '@kubevirt-ui/kubevirt-api/console/models/NetworkAttachmentDefinitionModel'; +import { NetworkAttachmentDefinitionModel } from '@kubevirt-ui-ext/kubevirt-api/console'; import { K8sModel } from '@openshift-console/dynamic-plugin-sdk'; import { generateName } from '@utils/utils'; diff --git a/src/views/nads/form/utils/utils.ts b/src/views/nads/form/utils/utils.ts index 6a20abcf..a453da5e 100644 --- a/src/views/nads/form/utils/utils.ts +++ b/src/views/nads/form/utils/utils.ts @@ -1,4 +1,4 @@ -import NetworkAttachmentDefinitionModel from '@kubevirt-ui/kubevirt-api/console/models/NetworkAttachmentDefinitionModel'; +import { NetworkAttachmentDefinitionModel } from '@kubevirt-ui-ext/kubevirt-api/console'; import { k8sCreate } from '@openshift-console/dynamic-plugin-sdk'; import { IPAMConfig, @@ -8,8 +8,7 @@ import { RESOURCE_NAME_ANNOTATION, } from '@utils/resources/nads/types'; import { getName } from '@utils/resources/shared'; -import { isEmpty } from '@utils/utils'; -import { networkConsole } from '@utils/utils'; +import { isEmpty, networkConsole } from '@utils/utils'; import { NetworkAttachmentDefinitionFormInput, NetworkTypeKeys, ovnK8sTopologyKeys } from './types'; diff --git a/src/views/nads/list/NetworkAttachmentDefinitionList.tsx b/src/views/nads/list/NetworkAttachmentDefinitionList.tsx index 7babb450..d492d193 100644 --- a/src/views/nads/list/NetworkAttachmentDefinitionList.tsx +++ b/src/views/nads/list/NetworkAttachmentDefinitionList.tsx @@ -1,9 +1,10 @@ import React, { FC } from 'react'; import { useNavigate } from 'react-router-dom-v5-compat'; -import NetworkAttachmentDefinitionModel, { +import { + NetworkAttachmentDefinitionModel, NetworkAttachmentDefinitionModelGroupVersionKind, -} from '@kubevirt-ui/kubevirt-api/console/models/NetworkAttachmentDefinitionModel'; +} from '@kubevirt-ui-ext/kubevirt-api/console'; import { ListPageBody, ListPageCreateButton, diff --git a/src/views/nads/list/components/NADListEmpty/NADListEmpty.tsx b/src/views/nads/list/components/NADListEmpty/NADListEmpty.tsx index afc6ff3a..7fdefbaa 100644 --- a/src/views/nads/list/components/NADListEmpty/NADListEmpty.tsx +++ b/src/views/nads/list/components/NADListEmpty/NADListEmpty.tsx @@ -1,8 +1,10 @@ import React, { FC } from 'react'; import { useNavigate } from 'react-router-dom-v5-compat'; -import NetworkAttachmentDefinitionModel from '@kubevirt-ui/kubevirt-api/console/models/NetworkAttachmentDefinitionModel'; -import { modelToGroupVersionKind } from '@kubevirt-ui/kubevirt-api/console/modelUtils'; +import { + modelToGroupVersionKind, + NetworkAttachmentDefinitionModel, +} from '@kubevirt-ui-ext/kubevirt-api/console'; import { useK8sWatchResource } from '@openshift-console/dynamic-plugin-sdk'; import { QuickStart } from '@patternfly/quickstarts'; import { diff --git a/src/views/nads/list/components/NADsRow/NADsRow.tsx b/src/views/nads/list/components/NADsRow/NADsRow.tsx index 20e4b91a..6230e726 100644 --- a/src/views/nads/list/components/NADsRow/NADsRow.tsx +++ b/src/views/nads/list/components/NADsRow/NADsRow.tsx @@ -1,7 +1,10 @@ import React, { FC } from 'react'; -import { modelToGroupVersionKind, NamespaceModel } from '@kubevirt-ui/kubevirt-api/console'; -import NetworkAttachmentDefinitionModel from '@kubevirt-ui/kubevirt-api/console/models/NetworkAttachmentDefinitionModel'; +import { + modelToGroupVersionKind, + NamespaceModel, + NetworkAttachmentDefinitionModel, +} from '@kubevirt-ui-ext/kubevirt-api/console'; import { getGroupVersionKindForModel, ResourceLink, diff --git a/src/views/networkpolicies/actions/NetworkPolicyActions.tsx b/src/views/networkpolicies/actions/NetworkPolicyActions.tsx index a3717bf1..7f5ff493 100644 --- a/src/views/networkpolicies/actions/NetworkPolicyActions.tsx +++ b/src/views/networkpolicies/actions/NetworkPolicyActions.tsx @@ -1,6 +1,6 @@ import React, { FC } from 'react'; -import { IoK8sApiNetworkingV1NetworkPolicy } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import type { IoK8sApiNetworkingV1NetworkPolicy } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import ActionsDropdown from '@utils/components/ActionsDropdown/ActionsDropdown'; import useNetworkPolicyActions from './hooks/useNetworkPolicyActions'; diff --git a/src/views/networkpolicies/actions/hooks/useNetworkPolicyActions.tsx b/src/views/networkpolicies/actions/hooks/useNetworkPolicyActions.tsx index dd3ad3fd..2251014c 100644 --- a/src/views/networkpolicies/actions/hooks/useNetworkPolicyActions.tsx +++ b/src/views/networkpolicies/actions/hooks/useNetworkPolicyActions.tsx @@ -1,7 +1,7 @@ import { useNavigate } from 'react-router-dom-v5-compat'; -import { modelToRef } from '@kubevirt-ui/kubevirt-api/console'; -import { IoK8sApiNetworkingV1NetworkPolicy } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import { modelToRef } from '@kubevirt-ui-ext/kubevirt-api/console'; +import type { IoK8sApiNetworkingV1NetworkPolicy } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { Action, useAnnotationsModal, diff --git a/src/views/networkpolicies/details/NetworkPolicyDetailsPage.tsx b/src/views/networkpolicies/details/NetworkPolicyDetailsPage.tsx index 1746f387..a76b4096 100644 --- a/src/views/networkpolicies/details/NetworkPolicyDetailsPage.tsx +++ b/src/views/networkpolicies/details/NetworkPolicyDetailsPage.tsx @@ -1,7 +1,7 @@ import React, { FC } from 'react'; -import { modelToGroupVersionKind } from '@kubevirt-ui/kubevirt-api/console'; -import { IoK8sApiNetworkingV1NetworkPolicy } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import { modelToGroupVersionKind } from '@kubevirt-ui-ext/kubevirt-api/console'; +import type { IoK8sApiNetworkingV1NetworkPolicy } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { HorizontalNav, K8sModel, diff --git a/src/views/networkpolicies/details/components/NetworkPolicyDetailsPageTitle.tsx b/src/views/networkpolicies/details/components/NetworkPolicyDetailsPageTitle.tsx index 38c65c42..a0ed653c 100644 --- a/src/views/networkpolicies/details/components/NetworkPolicyDetailsPageTitle.tsx +++ b/src/views/networkpolicies/details/components/NetworkPolicyDetailsPageTitle.tsx @@ -1,7 +1,7 @@ import React, { FC } from 'react'; -import { modelToRef } from '@kubevirt-ui/kubevirt-api/console'; -import { IoK8sApiNetworkingV1NetworkPolicy } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import { modelToRef } from '@kubevirt-ui-ext/kubevirt-api/console'; +import type { IoK8sApiNetworkingV1NetworkPolicy } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { Title } from '@patternfly/react-core'; import DetailsPageTitle from '@utils/components/DetailsPageTitle/DetailsPageTitle'; import { useLastNamespacePath } from '@utils/hooks/useLastNamespacePath'; diff --git a/src/views/networkpolicies/details/tabs/details/NetworkPolicyDetails.tsx b/src/views/networkpolicies/details/tabs/details/NetworkPolicyDetails.tsx index 1c750b48..872298a2 100644 --- a/src/views/networkpolicies/details/tabs/details/NetworkPolicyDetails.tsx +++ b/src/views/networkpolicies/details/tabs/details/NetworkPolicyDetails.tsx @@ -1,6 +1,6 @@ import React, { FC } from 'react'; -import { IoK8sApiNetworkingV1NetworkPolicy } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import type { IoK8sApiNetworkingV1NetworkPolicy } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { Grid, GridItem, PageSection } from '@patternfly/react-core'; import DetailsSectionTitle from '@utils/components/DetailsSectionTitle/DetailsSectionTitle'; import Loading from '@utils/components/Loading/Loading'; diff --git a/src/views/networkpolicies/details/tabs/details/components/NetworkPolicyDetailsIngress.tsx b/src/views/networkpolicies/details/tabs/details/components/NetworkPolicyDetailsIngress.tsx index c3bf9574..4a412c54 100644 --- a/src/views/networkpolicies/details/tabs/details/components/NetworkPolicyDetailsIngress.tsx +++ b/src/views/networkpolicies/details/tabs/details/components/NetworkPolicyDetailsIngress.tsx @@ -1,7 +1,7 @@ import React, { FC } from 'react'; import { Trans } from 'react-i18next'; -import { IoK8sApiNetworkingV1NetworkPolicy } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import type { IoK8sApiNetworkingV1NetworkPolicy } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { useFlag } from '@openshift-console/dynamic-plugin-sdk'; import { Divider, Grid, GridItem } from '@patternfly/react-core'; import DetailsSectionTitle from '@utils/components/DetailsSectionTitle/DetailsSectionTitle'; diff --git a/src/views/networkpolicies/details/tabs/details/components/NetworkPolicyDetailsMetadata.tsx b/src/views/networkpolicies/details/tabs/details/components/NetworkPolicyDetailsMetadata.tsx index 124fdb85..cdc9624c 100644 --- a/src/views/networkpolicies/details/tabs/details/components/NetworkPolicyDetailsMetadata.tsx +++ b/src/views/networkpolicies/details/tabs/details/components/NetworkPolicyDetailsMetadata.tsx @@ -1,7 +1,7 @@ import React, { FC } from 'react'; -import { modelToGroupVersionKind, NamespaceModel } from '@kubevirt-ui/kubevirt-api/console'; -import { IoK8sApiNetworkingV1NetworkPolicy } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import { modelToGroupVersionKind, NamespaceModel } from '@kubevirt-ui-ext/kubevirt-api/console'; +import type { IoK8sApiNetworkingV1NetworkPolicy } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { ResourceLink, Timestamp, diff --git a/src/views/networkpolicies/details/tabs/yaml/NetworkPolicyYAML.tsx b/src/views/networkpolicies/details/tabs/yaml/NetworkPolicyYAML.tsx index dda0018a..7d4ae899 100644 --- a/src/views/networkpolicies/details/tabs/yaml/NetworkPolicyYAML.tsx +++ b/src/views/networkpolicies/details/tabs/yaml/NetworkPolicyYAML.tsx @@ -1,6 +1,6 @@ import React, { FC, Suspense } from 'react'; -import { IoK8sApiNetworkingV1NetworkPolicy } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import type { IoK8sApiNetworkingV1NetworkPolicy } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { ResourceYAMLEditor } from '@openshift-console/dynamic-plugin-sdk'; import Loading from '@utils/components/Loading/Loading'; diff --git a/src/views/networkpolicies/list/EnableMultiPage.tsx b/src/views/networkpolicies/list/EnableMultiPage.tsx index 92003d1d..c10d2aac 100644 --- a/src/views/networkpolicies/list/EnableMultiPage.tsx +++ b/src/views/networkpolicies/list/EnableMultiPage.tsx @@ -1,7 +1,7 @@ import React, { FC, useState } from 'react'; import { useNavigate } from 'react-router-dom-v5-compat'; -import { modelToGroupVersionKind, modelToRef } from '@kubevirt-ui/kubevirt-api/console'; +import { modelToGroupVersionKind, modelToRef } from '@kubevirt-ui-ext/kubevirt-api/console'; import { k8sPatch, K8sResourceCommon, diff --git a/src/views/networkpolicies/list/MultiNetworkPolicyList.tsx b/src/views/networkpolicies/list/MultiNetworkPolicyList.tsx index b1b1dc7c..aa6f5f3a 100644 --- a/src/views/networkpolicies/list/MultiNetworkPolicyList.tsx +++ b/src/views/networkpolicies/list/MultiNetworkPolicyList.tsx @@ -1,7 +1,7 @@ import React, { FC } from 'react'; -import { modelToGroupVersionKind } from '@kubevirt-ui/kubevirt-api/console'; -import { IoK8sApiNetworkingV1NetworkPolicy } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import { modelToGroupVersionKind } from '@kubevirt-ui-ext/kubevirt-api/console'; +import type { IoK8sApiNetworkingV1NetworkPolicy } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { ListPageBody, ListPageFilter, diff --git a/src/views/networkpolicies/list/NetworkPolicyList.tsx b/src/views/networkpolicies/list/NetworkPolicyList.tsx index a29c74d6..6c9a69cd 100644 --- a/src/views/networkpolicies/list/NetworkPolicyList.tsx +++ b/src/views/networkpolicies/list/NetworkPolicyList.tsx @@ -1,7 +1,7 @@ import React, { FC } from 'react'; -import { modelToGroupVersionKind, NetworkPolicyModel } from '@kubevirt-ui/kubevirt-api/console'; -import { IoK8sApiNetworkingV1NetworkPolicy } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import { modelToGroupVersionKind, NetworkPolicyModel } from '@kubevirt-ui-ext/kubevirt-api/console'; +import type { IoK8sApiNetworkingV1NetworkPolicy } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { ListPageBody, ListPageFilter, diff --git a/src/views/networkpolicies/list/NetworkPolicyPage.tsx b/src/views/networkpolicies/list/NetworkPolicyPage.tsx index 3fd32387..c9d2eab4 100644 --- a/src/views/networkpolicies/list/NetworkPolicyPage.tsx +++ b/src/views/networkpolicies/list/NetworkPolicyPage.tsx @@ -1,7 +1,7 @@ import React, { FC, useMemo } from 'react'; import { useLocation, useNavigate } from 'react-router-dom-v5-compat'; -import { modelToGroupVersionKind, NetworkPolicyModel } from '@kubevirt-ui/kubevirt-api/console'; +import { modelToGroupVersionKind, NetworkPolicyModel } from '@kubevirt-ui-ext/kubevirt-api/console'; import { ListPageCreateButton, ListPageHeader } from '@openshift-console/dynamic-plugin-sdk'; import { Tab, Tabs, TabTitleText } from '@patternfly/react-core'; import { ALL_NAMESPACES, DEFAULT_NAMESPACE } from '@utils/constants'; diff --git a/src/views/networkpolicies/list/components/NetworkPolicyEmptyState.tsx b/src/views/networkpolicies/list/components/NetworkPolicyEmptyState.tsx index 4a3809e0..79a5dbb7 100644 --- a/src/views/networkpolicies/list/components/NetworkPolicyEmptyState.tsx +++ b/src/views/networkpolicies/list/components/NetworkPolicyEmptyState.tsx @@ -1,7 +1,7 @@ import React, { FC } from 'react'; import { useLocation, useNavigate } from 'react-router-dom-v5-compat'; -import { NetworkPolicyModel } from '@kubevirt-ui/kubevirt-api/console'; +import { NetworkPolicyModel } from '@kubevirt-ui-ext/kubevirt-api/console'; import { Button, EmptyState, EmptyStateActions, EmptyStateFooter } from '@patternfly/react-core'; import { DEFAULT_NAMESPACE } from '@utils/constants'; import { SHARED_DEFAULT_PATH_NEW_RESOURCE_FORM } from '@utils/constants/ui'; diff --git a/src/views/networkpolicies/list/components/NetworkPolicyRow.tsx b/src/views/networkpolicies/list/components/NetworkPolicyRow.tsx index e5587071..5d9909f5 100644 --- a/src/views/networkpolicies/list/components/NetworkPolicyRow.tsx +++ b/src/views/networkpolicies/list/components/NetworkPolicyRow.tsx @@ -2,9 +2,8 @@ import React, { FC } from 'react'; import { Link } from 'react-router-dom-v5-compat'; import { isEmpty } from 'lodash'; -import { NamespaceModel } from '@kubevirt-ui/kubevirt-api/console'; -import { modelToGroupVersionKind } from '@kubevirt-ui/kubevirt-api/console/modelUtils'; -import { IoK8sApiNetworkingV1NetworkPolicy } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import { modelToGroupVersionKind, NamespaceModel } from '@kubevirt-ui-ext/kubevirt-api/console'; +import type { IoK8sApiNetworkingV1NetworkPolicy } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { getGroupVersionKindForModel, ResourceLink, diff --git a/src/views/networkpolicies/list/hooks/useIsMultiEnabled.tsx b/src/views/networkpolicies/list/hooks/useIsMultiEnabled.tsx index 883916a4..1918c250 100644 --- a/src/views/networkpolicies/list/hooks/useIsMultiEnabled.tsx +++ b/src/views/networkpolicies/list/hooks/useIsMultiEnabled.tsx @@ -1,4 +1,4 @@ -import { modelToGroupVersionKind } from '@kubevirt-ui/kubevirt-api/console'; +import { modelToGroupVersionKind } from '@kubevirt-ui-ext/kubevirt-api/console'; import { K8sResourceCommon, useK8sWatchResource } from '@openshift-console/dynamic-plugin-sdk'; import { NetworkConfigModel } from '@views/nads/form/utils/constants'; diff --git a/src/views/networkpolicies/list/hooks/useNetworkPolicyColumn.tsx b/src/views/networkpolicies/list/hooks/useNetworkPolicyColumn.tsx index 03e72b2d..676cda0a 100644 --- a/src/views/networkpolicies/list/hooks/useNetworkPolicyColumn.tsx +++ b/src/views/networkpolicies/list/hooks/useNetworkPolicyColumn.tsx @@ -1,7 +1,7 @@ import { useCallback } from 'react'; -import { NetworkPolicyModel } from '@kubevirt-ui/kubevirt-api/console'; -import { IoK8sApiNetworkingV1NetworkPolicy } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import { NetworkPolicyModel } from '@kubevirt-ui-ext/kubevirt-api/console'; +import type { IoK8sApiNetworkingV1NetworkPolicy } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { TableColumn, useActiveColumns } from '@openshift-console/dynamic-plugin-sdk'; import { sortable } from '@patternfly/react-table'; import { useNetworkingTranslation } from '@utils/hooks/useNetworkingTranslation'; diff --git a/src/views/networkpolicies/list/utils.ts b/src/views/networkpolicies/list/utils.ts index 6739a45e..fa601a0e 100644 --- a/src/views/networkpolicies/list/utils.ts +++ b/src/views/networkpolicies/list/utils.ts @@ -1,4 +1,4 @@ -import { modelToRef, NetworkPolicyModel } from '@kubevirt-ui/kubevirt-api/console'; +import { modelToRef, NetworkPolicyModel } from '@kubevirt-ui-ext/kubevirt-api/console'; import { ALL_NAMESPACES } from '@utils/constants'; import { MultiNetworkPolicyModel } from '@utils/models'; diff --git a/src/views/networkpolicies/new/NADsSelector.tsx b/src/views/networkpolicies/new/NADsSelector.tsx index e4cea581..f6c150a5 100644 --- a/src/views/networkpolicies/new/NADsSelector.tsx +++ b/src/views/networkpolicies/new/NADsSelector.tsx @@ -1,6 +1,6 @@ import React, { FC, useMemo } from 'react'; -import { NetworkAttachmentDefinitionModelGroupVersionKind } from '@kubevirt-ui/kubevirt-api/console'; +import { NetworkAttachmentDefinitionModelGroupVersionKind } from '@kubevirt-ui-ext/kubevirt-api/console'; import { useK8sWatchResource } from '@openshift-console/dynamic-plugin-sdk'; import { Alert, AlertVariant, FormGroup } from '@patternfly/react-core'; import Loading from '@utils/components/Loading/Loading'; diff --git a/src/views/networkpolicies/new/NetworkPolicyForm.tsx b/src/views/networkpolicies/new/NetworkPolicyForm.tsx index 646a1028..9d968ce9 100644 --- a/src/views/networkpolicies/new/NetworkPolicyForm.tsx +++ b/src/views/networkpolicies/new/NetworkPolicyForm.tsx @@ -1,7 +1,7 @@ import React, { FC, useState } from 'react'; import { useParams } from 'react-router-dom-v5-compat'; -import { NetworkPolicyModel } from '@kubevirt-ui/kubevirt-api/console'; +import { NetworkPolicyModel } from '@kubevirt-ui-ext/kubevirt-api/console'; import { ResourceYAMLEditor } from '@openshift-console/dynamic-plugin-sdk'; import { Content, PageSection, Title } from '@patternfly/react-core'; import { EditorType } from '@utils/components/SyncedEditor/EditorToggle'; diff --git a/src/views/networkpolicies/new/NetworkPolicyFormSections.tsx b/src/views/networkpolicies/new/NetworkPolicyFormSections.tsx index d904aa15..b31f2850 100644 --- a/src/views/networkpolicies/new/NetworkPolicyFormSections.tsx +++ b/src/views/networkpolicies/new/NetworkPolicyFormSections.tsx @@ -1,8 +1,8 @@ import React, { FC, FormEvent, useState } from 'react'; import { useNavigate, useParams } from 'react-router-dom-v5-compat'; -import { NetworkPolicyModel } from '@kubevirt-ui/kubevirt-api/console'; -import { IoK8sApiNetworkingV1NetworkPolicy } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import { NetworkPolicyModel } from '@kubevirt-ui-ext/kubevirt-api/console'; +import type { IoK8sApiNetworkingV1NetworkPolicy } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { k8sCreate, useModal } from '@openshift-console/dynamic-plugin-sdk'; import { Form, PageSection, Title } from '@patternfly/react-core'; import ConfirmModal, { ConfirmModalProps } from '@utils/components/ConfirmModal/ConfirmModal'; diff --git a/src/views/networkpolicies/new/components/NetworkPolicySelectorPreview/components/NetworkPolicyPodsPreview.tsx b/src/views/networkpolicies/new/components/NetworkPolicySelectorPreview/components/NetworkPolicyPodsPreview.tsx index cc422114..7373368a 100644 --- a/src/views/networkpolicies/new/components/NetworkPolicySelectorPreview/components/NetworkPolicyPodsPreview.tsx +++ b/src/views/networkpolicies/new/components/NetworkPolicySelectorPreview/components/NetworkPolicyPodsPreview.tsx @@ -4,7 +4,7 @@ import { modelToGroupVersionKind, NamespaceModel, PodModel, -} from '@kubevirt-ui/kubevirt-api/console'; +} from '@kubevirt-ui-ext/kubevirt-api/console'; import { ResourceIcon } from '@openshift-console/dynamic-plugin-sdk'; import { Alert, AlertVariant, Label, TreeView, TreeViewDataItem } from '@patternfly/react-core'; import Loading from '@utils/components/Loading/Loading'; diff --git a/src/views/networkpolicies/new/components/NetworkPolicySelectorPreview/components/hooks/useNetworkPolicyPodPreviewData.ts b/src/views/networkpolicies/new/components/NetworkPolicySelectorPreview/components/hooks/useNetworkPolicyPodPreviewData.ts index ac9c8bab..2fad8c31 100644 --- a/src/views/networkpolicies/new/components/NetworkPolicySelectorPreview/components/hooks/useNetworkPolicyPodPreviewData.ts +++ b/src/views/networkpolicies/new/components/NetworkPolicySelectorPreview/components/hooks/useNetworkPolicyPodPreviewData.ts @@ -1,7 +1,7 @@ import { useMemo } from 'react'; -import { PodModel, ProjectModel } from '@kubevirt-ui/kubevirt-api/console'; -import { IoK8sApiCoreV1Pod } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import { PodModel, ProjectModel } from '@kubevirt-ui-ext/kubevirt-api/console'; +import type { IoK8sApiCoreV1Pod } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { K8sResourceCommon, Selector, diff --git a/src/views/routes/actions/hooks/useRouteActions.ts b/src/views/routes/actions/hooks/useRouteActions.ts index c23a6e55..cb01ca3e 100644 --- a/src/views/routes/actions/hooks/useRouteActions.ts +++ b/src/views/routes/actions/hooks/useRouteActions.ts @@ -1,6 +1,6 @@ import { useHistory } from 'react-router'; -import { modelToRef, RouteModel } from '@kubevirt-ui/kubevirt-api/console'; +import { modelToRef, RouteModel } from '@kubevirt-ui-ext/kubevirt-api/console'; import { Action, useAnnotationsModal, diff --git a/src/views/routes/details/EditRoute.tsx b/src/views/routes/details/EditRoute.tsx index 1e7ff369..5d17056c 100644 --- a/src/views/routes/details/EditRoute.tsx +++ b/src/views/routes/details/EditRoute.tsx @@ -1,7 +1,7 @@ import React, { FC } from 'react'; import { useParams } from 'react-router-dom-v5-compat'; -import { modelToGroupVersionKind, RouteModel } from '@kubevirt-ui/kubevirt-api/console'; +import { modelToGroupVersionKind, RouteModel } from '@kubevirt-ui-ext/kubevirt-api/console'; import { useK8sWatchResource } from '@openshift-console/dynamic-plugin-sdk'; import StatusBox from '@utils/components/StatusBox/StatusBox'; import { RouteKind } from '@utils/types'; diff --git a/src/views/routes/details/RouteDetailsPage.tsx b/src/views/routes/details/RouteDetailsPage.tsx index 462a3be2..a2fcb134 100644 --- a/src/views/routes/details/RouteDetailsPage.tsx +++ b/src/views/routes/details/RouteDetailsPage.tsx @@ -1,6 +1,6 @@ import React, { FC } from 'react'; -import { modelToGroupVersionKind, RouteModel } from '@kubevirt-ui/kubevirt-api/console'; +import { modelToGroupVersionKind, RouteModel } from '@kubevirt-ui-ext/kubevirt-api/console'; import { HorizontalNav, useK8sWatchResource } from '@openshift-console/dynamic-plugin-sdk'; import StatusBox from '@utils/components/StatusBox/StatusBox'; import { RouteKind } from '@utils/types'; diff --git a/src/views/routes/details/components/RouteDetailsPageTitle/RouteDetailsPageTitle.tsx b/src/views/routes/details/components/RouteDetailsPageTitle/RouteDetailsPageTitle.tsx index c880351d..662e5688 100644 --- a/src/views/routes/details/components/RouteDetailsPageTitle/RouteDetailsPageTitle.tsx +++ b/src/views/routes/details/components/RouteDetailsPageTitle/RouteDetailsPageTitle.tsx @@ -1,6 +1,6 @@ import React, { FC } from 'react'; -import { modelToRef, RouteModel } from '@kubevirt-ui/kubevirt-api/console'; +import { modelToRef, RouteModel } from '@kubevirt-ui-ext/kubevirt-api/console'; import { Title } from '@patternfly/react-core'; import DetailsPageTitle from '@utils/components/DetailsPageTitle/DetailsPageTitle'; import { useLastNamespacePath } from '@utils/hooks/useLastNamespacePath'; diff --git a/src/views/routes/details/components/tabs/detailsTab/components/RouteDetailsSection/DetailsSectionLeftColumn.tsx b/src/views/routes/details/components/tabs/detailsTab/components/RouteDetailsSection/DetailsSectionLeftColumn.tsx index e7a496d8..0a34d076 100644 --- a/src/views/routes/details/components/tabs/detailsTab/components/RouteDetailsSection/DetailsSectionLeftColumn.tsx +++ b/src/views/routes/details/components/tabs/detailsTab/components/RouteDetailsSection/DetailsSectionLeftColumn.tsx @@ -1,7 +1,7 @@ import React, { FC } from 'react'; import * as _ from 'lodash'; -import { NamespaceModel, RouteModel } from '@kubevirt-ui/kubevirt-api/console'; +import { NamespaceModel, RouteModel } from '@kubevirt-ui-ext/kubevirt-api/console'; import { getGroupVersionKindForModel, ResourceLink, diff --git a/src/views/routes/form/AlternateService.tsx b/src/views/routes/form/AlternateService.tsx index c92de982..93dfd283 100644 --- a/src/views/routes/form/AlternateService.tsx +++ b/src/views/routes/form/AlternateService.tsx @@ -1,7 +1,7 @@ import React, { FC } from 'react'; import { Controller, FieldArrayWithId, useFormContext } from 'react-hook-form'; -import { IoK8sApiCoreV1Service } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import type { IoK8sApiCoreV1Service } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { ResourceIcon } from '@openshift-console/dynamic-plugin-sdk'; import { Button, diff --git a/src/views/routes/form/AlternateServicesSection.tsx b/src/views/routes/form/AlternateServicesSection.tsx index 4881a14e..ef627774 100644 --- a/src/views/routes/form/AlternateServicesSection.tsx +++ b/src/views/routes/form/AlternateServicesSection.tsx @@ -1,7 +1,7 @@ import React, { FC } from 'react'; import { useFieldArray, useFormContext } from 'react-hook-form'; -import { IoK8sApiCoreV1Service } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import type { IoK8sApiCoreV1Service } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { Button, ButtonVariant } from '@patternfly/react-core'; import { PlusCircleIcon } from '@patternfly/react-icons'; import { useNetworkingTranslation } from '@utils/hooks/useNetworkingTranslation'; diff --git a/src/views/routes/form/RouteForm.tsx b/src/views/routes/form/RouteForm.tsx index ca9c34e0..8a95ca3b 100644 --- a/src/views/routes/form/RouteForm.tsx +++ b/src/views/routes/form/RouteForm.tsx @@ -2,7 +2,7 @@ import React, { FC, useEffect, useState } from 'react'; import { Controller, FormProvider, useForm } from 'react-hook-form'; import { useNavigate } from 'react-router-dom-v5-compat'; -import { RouteModel } from '@kubevirt-ui/kubevirt-api/console'; +import { RouteModel } from '@kubevirt-ui-ext/kubevirt-api/console'; import { k8sCreate, k8sUpdate, useActiveNamespace } from '@openshift-console/dynamic-plugin-sdk'; import { Checkbox, diff --git a/src/views/routes/form/RouteFormPage.tsx b/src/views/routes/form/RouteFormPage.tsx index 219229d4..9dbe924d 100644 --- a/src/views/routes/form/RouteFormPage.tsx +++ b/src/views/routes/form/RouteFormPage.tsx @@ -1,6 +1,6 @@ import React, { FC } from 'react'; -import { RouteModel } from '@kubevirt-ui/kubevirt-api/console'; +import { RouteModel } from '@kubevirt-ui-ext/kubevirt-api/console'; import { ResourceYAMLEditor, useActiveNamespace } from '@openshift-console/dynamic-plugin-sdk'; import { Content, ContentVariants, PageSection, Title } from '@patternfly/react-core'; import { EditorType } from '@utils/components/SyncedEditor/EditorToggle'; diff --git a/src/views/routes/form/ServiceSelector.tsx b/src/views/routes/form/ServiceSelector.tsx index 3b9c8488..c3d7435a 100644 --- a/src/views/routes/form/ServiceSelector.tsx +++ b/src/views/routes/form/ServiceSelector.tsx @@ -1,7 +1,7 @@ import React, { FC } from 'react'; import { Controller, useFormContext } from 'react-hook-form'; -import { IoK8sApiCoreV1Service } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import type { IoK8sApiCoreV1Service } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { ResourceIcon, useK8sWatchResource } from '@openshift-console/dynamic-plugin-sdk'; import { Alert, diff --git a/src/views/routes/form/Targetport.tsx b/src/views/routes/form/Targetport.tsx index 19252cde..8468e8eb 100644 --- a/src/views/routes/form/Targetport.tsx +++ b/src/views/routes/form/Targetport.tsx @@ -1,7 +1,7 @@ import React, { FC } from 'react'; import { Controller, useFormContext } from 'react-hook-form'; -import { IoK8sApiCoreV1Service } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import type { IoK8sApiCoreV1Service } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { DropdownItem, FormGroup, ValidatedOptions } from '@patternfly/react-core'; import FormGroupHelperText from '@utils/components/FormGroupHelperText/FormGroupHelperText'; import Select from '@utils/components/Select/Select'; diff --git a/src/views/routes/form/constants.ts b/src/views/routes/form/constants.ts index 5d4d9039..336026aa 100644 --- a/src/views/routes/form/constants.ts +++ b/src/views/routes/form/constants.ts @@ -1,4 +1,4 @@ -import { modelToGroupVersionKind, ServiceModel } from '@kubevirt-ui/kubevirt-api/console'; +import { modelToGroupVersionKind, ServiceModel } from '@kubevirt-ui-ext/kubevirt-api/console'; import { t } from '@utils/hooks/useNetworkingTranslation'; export const PASSTHROUGH = 'passthrough'; diff --git a/src/views/routes/form/utils.ts b/src/views/routes/form/utils.ts index f122cbc7..cb472274 100644 --- a/src/views/routes/form/utils.ts +++ b/src/views/routes/form/utils.ts @@ -1,4 +1,4 @@ -import { RouteModel } from '@kubevirt-ui/kubevirt-api/console'; +import { RouteModel } from '@kubevirt-ui-ext/kubevirt-api/console'; import { RouteKind, RouteTLS } from '@utils/types'; import { generateName } from '@utils/utils'; diff --git a/src/views/routes/list/RoutesList.tsx b/src/views/routes/list/RoutesList.tsx index 7f75b552..8ca5cf97 100644 --- a/src/views/routes/list/RoutesList.tsx +++ b/src/views/routes/list/RoutesList.tsx @@ -1,7 +1,7 @@ import React, { FC } from 'react'; import { useNavigate } from 'react-router-dom-v5-compat'; -import { modelToGroupVersionKind, RouteModel } from '@kubevirt-ui/kubevirt-api/console'; +import { modelToGroupVersionKind, RouteModel } from '@kubevirt-ui-ext/kubevirt-api/console'; import { ListPageBody, ListPageCreateButton, diff --git a/src/views/routes/list/components/RouteRow.tsx b/src/views/routes/list/components/RouteRow.tsx index 3b9c98ca..d5779ebe 100644 --- a/src/views/routes/list/components/RouteRow.tsx +++ b/src/views/routes/list/components/RouteRow.tsx @@ -1,7 +1,7 @@ import React, { FC } from 'react'; import classNames from 'classnames'; -import { NamespaceModel, RouteModel, ServiceModel } from '@kubevirt-ui/kubevirt-api/console'; +import { NamespaceModel, RouteModel, ServiceModel } from '@kubevirt-ui-ext/kubevirt-api/console'; import { getGroupVersionKindForModel, ResourceLink, diff --git a/src/views/routes/list/hooks/useRouteColumns.ts b/src/views/routes/list/hooks/useRouteColumns.ts index 347613c0..965a8e36 100644 --- a/src/views/routes/list/hooks/useRouteColumns.ts +++ b/src/views/routes/list/hooks/useRouteColumns.ts @@ -1,6 +1,6 @@ import { useMemo } from 'react'; -import { RouteModel } from '@kubevirt-ui/kubevirt-api/console'; +import { RouteModel } from '@kubevirt-ui-ext/kubevirt-api/console'; import { TableColumn, useActiveColumns } from '@openshift-console/dynamic-plugin-sdk'; import { sortable } from '@patternfly/react-table'; import { useNetworkingTranslation } from '@utils/hooks/useNetworkingTranslation'; diff --git a/src/views/services/actions/ServiceActions.tsx b/src/views/services/actions/ServiceActions.tsx index e4d200ae..455c85ff 100644 --- a/src/views/services/actions/ServiceActions.tsx +++ b/src/views/services/actions/ServiceActions.tsx @@ -1,6 +1,6 @@ import React, { FC } from 'react'; -import { IoK8sApiCoreV1Service } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import type { IoK8sApiCoreV1Service } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import ActionsDropdown from '@utils/components/ActionsDropdown/ActionsDropdown'; import useServiceActions from './hooks/useServiceActions'; diff --git a/src/views/services/actions/hooks/useServiceActions.tsx b/src/views/services/actions/hooks/useServiceActions.tsx index 912e92a8..8560f80c 100644 --- a/src/views/services/actions/hooks/useServiceActions.tsx +++ b/src/views/services/actions/hooks/useServiceActions.tsx @@ -1,7 +1,7 @@ import { useHistory } from 'react-router'; -import { modelToRef, ServiceModel } from '@kubevirt-ui/kubevirt-api/console'; -import { IoK8sApiCoreV1Service } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import { modelToRef, ServiceModel } from '@kubevirt-ui-ext/kubevirt-api/console'; +import type { IoK8sApiCoreV1Service } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { Action, useAnnotationsModal, diff --git a/src/views/services/details/ServiceDetailsPage.tsx b/src/views/services/details/ServiceDetailsPage.tsx index 7048f279..aa94ff7d 100644 --- a/src/views/services/details/ServiceDetailsPage.tsx +++ b/src/views/services/details/ServiceDetailsPage.tsx @@ -1,7 +1,7 @@ import React, { FC } from 'react'; -import { modelToGroupVersionKind, ServiceModel } from '@kubevirt-ui/kubevirt-api/console'; -import { IoK8sApiCoreV1Service } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import { modelToGroupVersionKind, ServiceModel } from '@kubevirt-ui-ext/kubevirt-api/console'; +import type { IoK8sApiCoreV1Service } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { HorizontalNav, useK8sWatchResource } from '@openshift-console/dynamic-plugin-sdk'; import StatusBox from '@utils/components/StatusBox/StatusBox'; diff --git a/src/views/services/details/components/ServiceDetailsPageTitle.tsx b/src/views/services/details/components/ServiceDetailsPageTitle.tsx index 016668a2..a1086e24 100644 --- a/src/views/services/details/components/ServiceDetailsPageTitle.tsx +++ b/src/views/services/details/components/ServiceDetailsPageTitle.tsx @@ -1,7 +1,7 @@ import React, { FC } from 'react'; -import { modelToRef, ServiceModel } from '@kubevirt-ui/kubevirt-api/console'; -import { IoK8sApiCoreV1Service } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import { modelToRef, ServiceModel } from '@kubevirt-ui-ext/kubevirt-api/console'; +import type { IoK8sApiCoreV1Service } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { Title } from '@patternfly/react-core'; import DetailsPageTitle from '@utils/components/DetailsPageTitle/DetailsPageTitle'; import { useLastNamespacePath } from '@utils/hooks/useLastNamespacePath'; diff --git a/src/views/services/details/tabs/details/ServiceAddress.tsx b/src/views/services/details/tabs/details/ServiceAddress.tsx index 53b1f3bc..4e11ef6c 100644 --- a/src/views/services/details/tabs/details/ServiceAddress.tsx +++ b/src/views/services/details/tabs/details/ServiceAddress.tsx @@ -1,6 +1,6 @@ import React, { FC } from 'react'; -import { IoK8sApiCoreV1Service } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import type { IoK8sApiCoreV1Service } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import MutedText from '@utils/components/MutedText/MutedText'; import { useNetworkingTranslation } from '@utils/hooks/useNetworkingTranslation'; diff --git a/src/views/services/details/tabs/details/ServiceDetails.tsx b/src/views/services/details/tabs/details/ServiceDetails.tsx index 1f42e659..9013c803 100644 --- a/src/views/services/details/tabs/details/ServiceDetails.tsx +++ b/src/views/services/details/tabs/details/ServiceDetails.tsx @@ -1,8 +1,8 @@ import React, { FC } from 'react'; import * as _ from 'lodash'; -import { modelToGroupVersionKind, ServiceModel } from '@kubevirt-ui/kubevirt-api/console'; -import { IoK8sApiCoreV1Service } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import { modelToGroupVersionKind, ServiceModel } from '@kubevirt-ui-ext/kubevirt-api/console'; +import type { IoK8sApiCoreV1Service } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { ResourceLink, Timestamp, diff --git a/src/views/services/details/tabs/pods/ServicePods.tsx b/src/views/services/details/tabs/pods/ServicePods.tsx index 6461612d..420acbc8 100644 --- a/src/views/services/details/tabs/pods/ServicePods.tsx +++ b/src/views/services/details/tabs/pods/ServicePods.tsx @@ -1,10 +1,10 @@ import React, { FC } from 'react'; -import { modelToGroupVersionKind, PodModel } from '@kubevirt-ui/kubevirt-api/console'; -import { +import { modelToGroupVersionKind, PodModel } from '@kubevirt-ui-ext/kubevirt-api/console'; +import type { IoK8sApiCoreV1Pod, IoK8sApiCoreV1Service, -} from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +} from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { ListPageFilter, PrometheusEndpoint, diff --git a/src/views/services/details/tabs/pods/components/PodRow.tsx b/src/views/services/details/tabs/pods/components/PodRow.tsx index 1a412732..9f56d831 100644 --- a/src/views/services/details/tabs/pods/components/PodRow.tsx +++ b/src/views/services/details/tabs/pods/components/PodRow.tsx @@ -2,8 +2,8 @@ import React, { FC } from 'react'; import classNames from 'classnames'; import * as _ from 'lodash'; -import { modelToGroupVersionKind, PodModel } from '@kubevirt-ui/kubevirt-api/console'; -import { IoK8sApiCoreV1Pod } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import { modelToGroupVersionKind, PodModel } from '@kubevirt-ui-ext/kubevirt-api/console'; +import type { IoK8sApiCoreV1Pod } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { PrometheusResponse, ResourceLink, diff --git a/src/views/services/details/tabs/pods/components/PodStatus.tsx b/src/views/services/details/tabs/pods/components/PodStatus.tsx index b01c95f8..aa7578ac 100644 --- a/src/views/services/details/tabs/pods/components/PodStatus.tsx +++ b/src/views/services/details/tabs/pods/components/PodStatus.tsx @@ -1,11 +1,11 @@ import React, { FC, ReactNode } from 'react'; import { Link } from 'react-router-dom-v5-compat'; -import { PodModel } from '@kubevirt-ui/kubevirt-api/console'; -import { +import { PodModel } from '@kubevirt-ui-ext/kubevirt-api/console'; +import type { IoK8sApiCoreV1Container, IoK8sApiCoreV1Pod, -} from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +} from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import Status from '@openshift-console/dynamic-plugin-sdk/lib/app/components/status/Status'; import { Button, ButtonVariant, Content, Divider, Popover } from '@patternfly/react-core'; import { useNetworkingTranslation } from '@utils/hooks/useNetworkingTranslation'; diff --git a/src/views/services/details/tabs/pods/hooks/usePodColumns.tsx b/src/views/services/details/tabs/pods/hooks/usePodColumns.tsx index 903d4ce3..2659371d 100644 --- a/src/views/services/details/tabs/pods/hooks/usePodColumns.tsx +++ b/src/views/services/details/tabs/pods/hooks/usePodColumns.tsx @@ -1,8 +1,8 @@ import { useMemo } from 'react'; import classNames from 'classnames'; -import { modelToRef, PodModel } from '@kubevirt-ui/kubevirt-api/console'; -import { IoK8sApiCoreV1Pod } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import { modelToRef, PodModel } from '@kubevirt-ui-ext/kubevirt-api/console'; +import type { IoK8sApiCoreV1Pod } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { PrometheusResponse, TableColumn, diff --git a/src/views/services/details/tabs/pods/hooks/usePodFilters.tsx b/src/views/services/details/tabs/pods/hooks/usePodFilters.tsx index 314921c3..f37577cd 100644 --- a/src/views/services/details/tabs/pods/hooks/usePodFilters.tsx +++ b/src/views/services/details/tabs/pods/hooks/usePodFilters.tsx @@ -1,6 +1,6 @@ import * as _ from 'lodash'; -import { IoK8sApiCoreV1Pod } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import type { IoK8sApiCoreV1Pod } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { RowFilter } from '@openshift-console/dynamic-plugin-sdk'; import { useNetworkingTranslation } from '@utils/hooks/useNetworkingTranslation'; diff --git a/src/views/services/details/tabs/pods/utils.ts b/src/views/services/details/tabs/pods/utils.ts index 3bfa9bab..d569d56f 100644 --- a/src/views/services/details/tabs/pods/utils.ts +++ b/src/views/services/details/tabs/pods/utils.ts @@ -2,10 +2,10 @@ import * as _ from 'lodash'; -import { +import type { IoK8sApiCoreV1ContainerStatus, IoK8sApiCoreV1Pod, -} from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +} from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { K8sResourceCommon, PrometheusResponse } from '@openshift-console/dynamic-plugin-sdk'; import { SortByDirection } from '@patternfly/react-table'; import { getName, getNamespace } from '@utils/resources/shared'; diff --git a/src/views/services/details/tabs/yaml/ServiceYAML.tsx b/src/views/services/details/tabs/yaml/ServiceYAML.tsx index 9f1a7ac3..cac5a8ae 100644 --- a/src/views/services/details/tabs/yaml/ServiceYAML.tsx +++ b/src/views/services/details/tabs/yaml/ServiceYAML.tsx @@ -1,6 +1,6 @@ import React, { FC, Suspense } from 'react'; -import { IoK8sApiCoreV1Service } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import type { IoK8sApiCoreV1Service } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { ResourceYAMLEditor } from '@openshift-console/dynamic-plugin-sdk'; import Loading from '@utils/components/Loading/Loading'; diff --git a/src/views/services/list/ServiceList.tsx b/src/views/services/list/ServiceList.tsx index c0b36e09..fee80cc8 100644 --- a/src/views/services/list/ServiceList.tsx +++ b/src/views/services/list/ServiceList.tsx @@ -1,8 +1,8 @@ import React, { FC } from 'react'; import { useNavigate } from 'react-router-dom-v5-compat'; -import { modelToGroupVersionKind, ServiceModel } from '@kubevirt-ui/kubevirt-api/console'; -import { IoK8sApiCoreV1Service } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import { modelToGroupVersionKind, ServiceModel } from '@kubevirt-ui-ext/kubevirt-api/console'; +import type { IoK8sApiCoreV1Service } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { ListPageBody, ListPageCreateButton, diff --git a/src/views/services/list/components/ServiceLocation.tsx b/src/views/services/list/components/ServiceLocation.tsx index 34558b51..8d03b5a2 100644 --- a/src/views/services/list/components/ServiceLocation.tsx +++ b/src/views/services/list/components/ServiceLocation.tsx @@ -1,6 +1,6 @@ import React, { FC } from 'react'; -import { IoK8sApiCoreV1Service } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import type { IoK8sApiCoreV1Service } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import HostDetails from '@utils/components/HostData/HostDetails'; import { useNetworkingTranslation } from '@utils/hooks/useNetworkingTranslation'; diff --git a/src/views/services/list/components/ServiceRow.tsx b/src/views/services/list/components/ServiceRow.tsx index 1496521c..f8e381e3 100644 --- a/src/views/services/list/components/ServiceRow.tsx +++ b/src/views/services/list/components/ServiceRow.tsx @@ -2,8 +2,8 @@ import React, { FC } from 'react'; import { Link } from 'react-router-dom-v5-compat'; import * as _ from 'lodash'; -import { ServiceModel } from '@kubevirt-ui/kubevirt-api/console'; -import { IoK8sApiCoreV1Service } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import { ServiceModel } from '@kubevirt-ui-ext/kubevirt-api/console'; +import type { IoK8sApiCoreV1Service } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { getGroupVersionKindForModel, ResourceLink, diff --git a/src/views/services/list/hooks/useServiceColumn.tsx b/src/views/services/list/hooks/useServiceColumn.tsx index 965c6cfc..06856598 100644 --- a/src/views/services/list/hooks/useServiceColumn.tsx +++ b/src/views/services/list/hooks/useServiceColumn.tsx @@ -1,7 +1,7 @@ import { useMemo } from 'react'; -import { ServiceModel } from '@kubevirt-ui/kubevirt-api/console'; -import { IoK8sApiCoreV1Service } from '@kubevirt-ui/kubevirt-api/kubernetes/models'; +import { ServiceModel } from '@kubevirt-ui-ext/kubevirt-api/console'; +import type { IoK8sApiCoreV1Service } from '@kubevirt-ui-ext/kubevirt-api/kubernetes'; import { TableColumn, useActiveColumns } from '@openshift-console/dynamic-plugin-sdk'; import { sortable } from '@patternfly/react-table'; import { useNetworkingTranslation } from '@utils/hooks/useNetworkingTranslation'; diff --git a/src/views/udns/list/components/UserDefinedNetworkRow.tsx b/src/views/udns/list/components/UserDefinedNetworkRow.tsx index df77921a..e784fc76 100644 --- a/src/views/udns/list/components/UserDefinedNetworkRow.tsx +++ b/src/views/udns/list/components/UserDefinedNetworkRow.tsx @@ -1,6 +1,6 @@ import React, { FC } from 'react'; -import { modelToGroupVersionKind, NamespaceModel } from '@kubevirt-ui/kubevirt-api/console'; +import { modelToGroupVersionKind, NamespaceModel } from '@kubevirt-ui-ext/kubevirt-api/console'; import { getGroupVersionKindForModel, ResourceLink, diff --git a/src/views/udns/list/constants.ts b/src/views/udns/list/constants.ts index 57f876c2..7c681b6b 100644 --- a/src/views/udns/list/constants.ts +++ b/src/views/udns/list/constants.ts @@ -1,4 +1,4 @@ -import { modelToGroupVersionKind, ProjectModel } from '@kubevirt-ui/kubevirt-api/console'; +import { modelToGroupVersionKind, ProjectModel } from '@kubevirt-ui-ext/kubevirt-api/console'; export const ProjectGroupVersionKind = modelToGroupVersionKind(ProjectModel); diff --git a/tsconfig.json b/tsconfig.json index cb0f8e33..88d2dbfd 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,23 +1,23 @@ { "compilerOptions": { "allowJs": true, - "baseUrl": ".", "esModuleInterop": true, "experimentalDecorators": true, "jsx": "react", "lib": ["es2016", "es2019", "es2020.promise", "dom", "dom.iterable", "ES2021.String"], "module": "esnext", - "moduleResolution": "node", + "moduleResolution": "bundler", "noUnusedLocals": true, "outDir": "dist", "paths": { - "@utils/*": ["src/utils/*"], - "@views/*": ["src/views/*"], - "@styles/*": ["src/styles/*"] + "@utils/*": ["./src/utils/*"], + "@views/*": ["./src/views/*"], + "@styles/*": ["./src/styles/*"] }, "skipLibCheck": true, "sourceMap": true, - "target": "es2016" + "target": "es2016", + "rootDir": "src" }, "exclude": ["**/node_modules", "**/dist"], "include": ["src", "images"], @@ -25,7 +25,8 @@ "files": true, "transpileOnly": true, "compilerOptions": { - "module": "commonjs" + "module": "commonjs", + "moduleResolution": "node" } } } diff --git a/webpack.config.ts b/webpack.config.ts index 2d3a464d..c3ad9178 100644 --- a/webpack.config.ts +++ b/webpack.config.ts @@ -1,6 +1,3 @@ -/* eslint-disable @typescript-eslint/no-var-requires */ -/* eslint-env node */ - import * as path from 'path'; import { Configuration as WebpackConfiguration } from 'webpack'; @@ -49,14 +46,14 @@ const config: Configuration = { module: { rules: [ { - test: /\.m?js/, include: /node_modules\/@patternfly\/.*/, resolve: { fullySpecified: false, }, + test: /\.m?js/, }, { - exclude: /node_modules\/(?!(@kubevirt-ui)\/kubevirt-api).*/, + exclude: /node_modules\/.*/, test: /\.(jsx?|tsx?)$/, use: [ { @@ -108,8 +105,8 @@ const config: Configuration = { minimize: false, }, output: { - copy: [{ from: '../locales', to: 'locales' }], chunkFilename: '[name]-chunk.js', + copy: [{ from: '../locales', to: 'locales' }], filename: '[name]-bundle.js', path: path.resolve(__dirname, 'dist'), },