From df686a64b9c51f3cf3225e734c856fd4657c5472 Mon Sep 17 00:00:00 2001 From: Roman Date: Wed, 12 May 2021 16:32:18 +0300 Subject: [PATCH] Reverted "use {useDefineForClassFields: true} in tsconfig.json" (various app-crash fixes) This flag seems to be not possible to use with class-inheritance in some cases. Example / demo: `KubeObject` class has initial type definitions for the fields like: "metadata", "kind", etc. and constructor() has Object.assign(this, data); Meanwhile child class, e.g. KubeEvent inherited from KubeObject and has it's own extra type definitions for underlying resource, e.g. "involvedObject", "source", etc. So calling super(data) doesn't work as expected for child class as it's own type definitions overwrites data from parent's constructor with `undefined` at later point. Signed-off-by: Roman --- src/renderer/api/endpoints/cluster.api.ts | 4 ++-- src/renderer/api/endpoints/crd.api.ts | 4 ++-- src/renderer/api/endpoints/cron-job.api.ts | 4 ++-- src/renderer/api/endpoints/daemon-set.api.ts | 4 ++-- src/renderer/api/endpoints/deployment.api.ts | 4 ++-- src/renderer/api/endpoints/events.api.ts | 8 -------- src/renderer/api/endpoints/hpa.api.ts | 4 ++-- src/renderer/api/endpoints/ingress.api.ts | 4 ++-- src/renderer/api/endpoints/job.api.ts | 4 ++-- src/renderer/api/endpoints/limit-range.api.ts | 2 +- src/renderer/api/endpoints/namespaces.api.ts | 2 +- src/renderer/api/endpoints/network-policy.api.ts | 2 +- src/renderer/api/endpoints/nodes.api.ts | 4 ++-- .../api/endpoints/persistent-volume-claims.api.ts | 4 ++-- src/renderer/api/endpoints/persistent-volume.api.ts | 4 ++-- src/renderer/api/endpoints/poddisruptionbudget.api.ts | 4 ++-- src/renderer/api/endpoints/pods.api.ts | 4 ++-- src/renderer/api/endpoints/podsecuritypolicy.api.ts | 2 +- src/renderer/api/endpoints/replica-set.api.ts | 4 ++-- src/renderer/api/endpoints/resource-quota.api.ts | 4 ++-- src/renderer/api/endpoints/selfsubjectrulesreviews.api.ts | 4 ++-- src/renderer/api/endpoints/service.api.ts | 4 ++-- src/renderer/api/endpoints/stateful-set.api.ts | 4 ++-- src/renderer/api/kube-object.ts | 2 +- src/renderer/components/menu/menu.tsx | 2 +- src/renderer/components/tabs/tabs.tsx | 2 +- tsconfig.json | 2 +- 27 files changed, 44 insertions(+), 52 deletions(-) diff --git a/src/renderer/api/endpoints/cluster.api.ts b/src/renderer/api/endpoints/cluster.api.ts index b0d6446f01..e96ab7f082 100644 --- a/src/renderer/api/endpoints/cluster.api.ts +++ b/src/renderer/api/endpoints/cluster.api.ts @@ -54,7 +54,7 @@ export class Cluster extends KubeObject { static kind = "Cluster"; static apiBase = "/apis/cluster.k8s.io/v1alpha1/clusters"; - declare spec: { + spec: { clusterNetwork?: { serviceDomain?: string; pods?: { @@ -70,7 +70,7 @@ export class Cluster extends KubeObject { }; }; }; - declare status?: { + status?: { apiEndpoints: { host: string; port: string; diff --git a/src/renderer/api/endpoints/crd.api.ts b/src/renderer/api/endpoints/crd.api.ts index ad5a90eccf..f51df634fe 100644 --- a/src/renderer/api/endpoints/crd.api.ts +++ b/src/renderer/api/endpoints/crd.api.ts @@ -22,7 +22,7 @@ export class CustomResourceDefinition extends KubeObject { static namespaced = false; static apiBase = "/apis/apiextensions.k8s.io/v1/customresourcedefinitions"; - declare spec: { + spec: { group: string; version?: string; // deprecated in v1 api names: { @@ -46,7 +46,7 @@ export class CustomResourceDefinition extends KubeObject { }; additionalPrinterColumns?: AdditionalPrinterColumnsV1Beta[]; // removed in v1 }; - declare status: { + status: { conditions: { lastTransitionTime: string; message: string; diff --git a/src/renderer/api/endpoints/cron-job.api.ts b/src/renderer/api/endpoints/cron-job.api.ts index db22cd5611..4b317eac62 100644 --- a/src/renderer/api/endpoints/cron-job.api.ts +++ b/src/renderer/api/endpoints/cron-job.api.ts @@ -48,7 +48,7 @@ export class CronJob extends KubeObject { autoBind(this); } - declare spec: { + spec: { schedule: string; concurrencyPolicy: string; suspend: boolean; @@ -81,7 +81,7 @@ export class CronJob extends KubeObject { successfulJobsHistoryLimit: number; failedJobsHistoryLimit: number; }; - declare status: { + status: { lastScheduleTime?: string; }; diff --git a/src/renderer/api/endpoints/daemon-set.api.ts b/src/renderer/api/endpoints/daemon-set.api.ts index 585c636156..1a114174cb 100644 --- a/src/renderer/api/endpoints/daemon-set.api.ts +++ b/src/renderer/api/endpoints/daemon-set.api.ts @@ -15,7 +15,7 @@ export class DaemonSet extends WorkloadKubeObject { autoBind(this); } - declare spec: { + spec: { selector: { matchLabels: { [name: string]: string; @@ -57,7 +57,7 @@ export class DaemonSet extends WorkloadKubeObject { }; revisionHistoryLimit: number; }; - declare status: { + status: { currentNumberScheduled: number; numberMisscheduled: number; desiredNumberScheduled: number; diff --git a/src/renderer/api/endpoints/deployment.api.ts b/src/renderer/api/endpoints/deployment.api.ts index b03916e7e7..fa67953312 100644 --- a/src/renderer/api/endpoints/deployment.api.ts +++ b/src/renderer/api/endpoints/deployment.api.ts @@ -77,7 +77,7 @@ export class Deployment extends WorkloadKubeObject { autoBind(this); } - declare spec: { + spec: { replicas: number; selector: { matchLabels: { [app: string]: string } }; template: { @@ -156,7 +156,7 @@ export class Deployment extends WorkloadKubeObject { }; }; }; - declare status: { + status: { observedGeneration: number; replicas: number; updatedReplicas: number; diff --git a/src/renderer/api/endpoints/events.api.ts b/src/renderer/api/endpoints/events.api.ts index c43a3649bd..d026d3d1f0 100644 --- a/src/renderer/api/endpoints/events.api.ts +++ b/src/renderer/api/endpoints/events.api.ts @@ -1,21 +1,13 @@ import moment from "moment"; import { KubeObject } from "../kube-object"; import { formatDuration } from "../../utils/formatDuration"; -import { autoBind } from "../../utils"; import { KubeApi } from "../kube-api"; -import { KubeJsonApiData } from "../kube-json-api"; export class KubeEvent extends KubeObject { static kind = "Event"; static namespaced = true; static apiBase = "/api/v1/events"; - constructor(data: KubeJsonApiData) { - super(data); - autoBind(this); - Object.assign(this, data); // TODO: figure out why this doesn't work from super() - } - involvedObject: { kind: string; namespace: string; diff --git a/src/renderer/api/endpoints/hpa.api.ts b/src/renderer/api/endpoints/hpa.api.ts index 60e8cdb649..4876ee43eb 100644 --- a/src/renderer/api/endpoints/hpa.api.ts +++ b/src/renderer/api/endpoints/hpa.api.ts @@ -43,7 +43,7 @@ export class HorizontalPodAutoscaler extends KubeObject { static namespaced = true; static apiBase = "/apis/autoscaling/v2beta1/horizontalpodautoscalers"; - declare spec: { + spec: { scaleTargetRef: { kind: string; name: string; @@ -53,7 +53,7 @@ export class HorizontalPodAutoscaler extends KubeObject { maxReplicas: number; metrics: IHpaMetric[]; }; - declare status: { + status: { currentReplicas: number; desiredReplicas: number; currentMetrics: IHpaMetric[]; diff --git a/src/renderer/api/endpoints/ingress.api.ts b/src/renderer/api/endpoints/ingress.api.ts index 49ba6b07c9..ee7e4fadd4 100644 --- a/src/renderer/api/endpoints/ingress.api.ts +++ b/src/renderer/api/endpoints/ingress.api.ts @@ -72,7 +72,7 @@ export class Ingress extends KubeObject { autoBind(this); } - declare spec: { + spec: { tls: { secretName: string; }[]; @@ -96,7 +96,7 @@ export class Ingress extends KubeObject { } } }; - declare status: { + status: { loadBalancer: { ingress: ILoadBalancerIngress[]; }; diff --git a/src/renderer/api/endpoints/job.api.ts b/src/renderer/api/endpoints/job.api.ts index 1df41ad548..7a92a94fa6 100644 --- a/src/renderer/api/endpoints/job.api.ts +++ b/src/renderer/api/endpoints/job.api.ts @@ -16,7 +16,7 @@ export class Job extends WorkloadKubeObject { autoBind(this); } - declare spec: { + spec: { parallelism?: number; completions?: number; backoffLimit?: number; @@ -62,7 +62,7 @@ export class Job extends WorkloadKubeObject { serviceAccount?: string; schedulerName?: string; }; - declare status: { + status: { conditions: { type: string; status: string; diff --git a/src/renderer/api/endpoints/limit-range.api.ts b/src/renderer/api/endpoints/limit-range.api.ts index 89aa8eeb34..a97ca28c43 100644 --- a/src/renderer/api/endpoints/limit-range.api.ts +++ b/src/renderer/api/endpoints/limit-range.api.ts @@ -40,7 +40,7 @@ export class LimitRange extends KubeObject { autoBind(this); } - declare spec: { + spec: { limits: LimitRangeItem[]; }; diff --git a/src/renderer/api/endpoints/namespaces.api.ts b/src/renderer/api/endpoints/namespaces.api.ts index 8d489fc26d..848a34bd32 100644 --- a/src/renderer/api/endpoints/namespaces.api.ts +++ b/src/renderer/api/endpoints/namespaces.api.ts @@ -18,7 +18,7 @@ export class Namespace extends KubeObject { autoBind(this); } - declare status?: { + status?: { phase: string; }; diff --git a/src/renderer/api/endpoints/network-policy.api.ts b/src/renderer/api/endpoints/network-policy.api.ts index 7e120d1796..72e828bfc0 100644 --- a/src/renderer/api/endpoints/network-policy.api.ts +++ b/src/renderer/api/endpoints/network-policy.api.ts @@ -46,7 +46,7 @@ export class NetworkPolicy extends KubeObject { autoBind(this); } - declare spec: { + spec: { podSelector: { matchLabels: { [label: string]: string; diff --git a/src/renderer/api/endpoints/nodes.api.ts b/src/renderer/api/endpoints/nodes.api.ts index 4bb7e0ff4a..a95cff26a4 100644 --- a/src/renderer/api/endpoints/nodes.api.ts +++ b/src/renderer/api/endpoints/nodes.api.ts @@ -39,7 +39,7 @@ export class Node extends KubeObject { autoBind(this); } - declare spec: { + spec: { podCIDR: string; externalID: string; taints?: { @@ -49,7 +49,7 @@ export class Node extends KubeObject { }[]; unschedulable?: boolean; }; - declare status: { + status: { capacity: { cpu: string; memory: string; diff --git a/src/renderer/api/endpoints/persistent-volume-claims.api.ts b/src/renderer/api/endpoints/persistent-volume-claims.api.ts index 500af710e5..dab5040cdc 100644 --- a/src/renderer/api/endpoints/persistent-volume-claims.api.ts +++ b/src/renderer/api/endpoints/persistent-volume-claims.api.ts @@ -32,7 +32,7 @@ export class PersistentVolumeClaim extends KubeObject { autoBind(this); } - declare spec: { + spec: { accessModes: string[]; storageClassName: string; selector: { @@ -51,7 +51,7 @@ export class PersistentVolumeClaim extends KubeObject { }; }; }; - declare status: { + status: { phase: string; // Pending }; diff --git a/src/renderer/api/endpoints/persistent-volume.api.ts b/src/renderer/api/endpoints/persistent-volume.api.ts index ae1daba816..ce8f04eabd 100644 --- a/src/renderer/api/endpoints/persistent-volume.api.ts +++ b/src/renderer/api/endpoints/persistent-volume.api.ts @@ -14,7 +14,7 @@ export class PersistentVolume extends KubeObject { autoBind(this); } - declare spec: { + spec: { capacity: { storage: string; // 8Gi }; @@ -45,7 +45,7 @@ export class PersistentVolume extends KubeObject { }; }; - declare status: { + status: { phase: string; reason?: string; }; diff --git a/src/renderer/api/endpoints/poddisruptionbudget.api.ts b/src/renderer/api/endpoints/poddisruptionbudget.api.ts index a202565398..654e1785f5 100644 --- a/src/renderer/api/endpoints/poddisruptionbudget.api.ts +++ b/src/renderer/api/endpoints/poddisruptionbudget.api.ts @@ -13,12 +13,12 @@ export class PodDisruptionBudget extends KubeObject { autoBind(this); } - declare spec: { + spec: { minAvailable: string; maxUnavailable: string; selector: { matchLabels: { [app: string]: string } }; }; - declare status: { + status: { currentHealthy: number desiredHealthy: number disruptionsAllowed: number diff --git a/src/renderer/api/endpoints/pods.api.ts b/src/renderer/api/endpoints/pods.api.ts index b865960fec..fad991de37 100644 --- a/src/renderer/api/endpoints/pods.api.ts +++ b/src/renderer/api/endpoints/pods.api.ts @@ -192,7 +192,7 @@ export class Pod extends WorkloadKubeObject { autoBind(this); } - declare spec: { + spec: { volumes?: { name: string; persistentVolumeClaim: { @@ -249,7 +249,7 @@ export class Pod extends WorkloadKubeObject { }; affinity?: IAffinity; }; - declare status?: { + status?: { phase: string; conditions: { type: string; diff --git a/src/renderer/api/endpoints/podsecuritypolicy.api.ts b/src/renderer/api/endpoints/podsecuritypolicy.api.ts index 5ff8537143..f33d70299e 100644 --- a/src/renderer/api/endpoints/podsecuritypolicy.api.ts +++ b/src/renderer/api/endpoints/podsecuritypolicy.api.ts @@ -13,7 +13,7 @@ export class PodSecurityPolicy extends KubeObject { autoBind(this); } - declare spec: { + spec: { allowPrivilegeEscalation?: boolean; allowedCSIDrivers?: { name: string; diff --git a/src/renderer/api/endpoints/replica-set.api.ts b/src/renderer/api/endpoints/replica-set.api.ts index 503c17adcf..e5795444b4 100644 --- a/src/renderer/api/endpoints/replica-set.api.ts +++ b/src/renderer/api/endpoints/replica-set.api.ts @@ -38,7 +38,7 @@ export class ReplicaSet extends WorkloadKubeObject { autoBind(this); } - declare spec: { + spec: { replicas?: number; selector: { matchLabels: { [app: string]: string } }; template?: { @@ -51,7 +51,7 @@ export class ReplicaSet extends WorkloadKubeObject { }; minReadySeconds?: number; }; - declare status: { + status: { replicas: number; fullyLabeledReplicas?: number; readyReplicas?: number; diff --git a/src/renderer/api/endpoints/resource-quota.api.ts b/src/renderer/api/endpoints/resource-quota.api.ts index 590e137eca..e2d37a9081 100644 --- a/src/renderer/api/endpoints/resource-quota.api.ts +++ b/src/renderer/api/endpoints/resource-quota.api.ts @@ -40,7 +40,7 @@ export class ResourceQuota extends KubeObject { this.spec = this.spec || {} as any; } - declare spec: { + spec: { hard: IResourceQuotaValues; scopeSelector?: { matchExpressions: { @@ -51,7 +51,7 @@ export class ResourceQuota extends KubeObject { }; }; - declare status: { + status: { hard: IResourceQuotaValues; used: IResourceQuotaValues; }; diff --git a/src/renderer/api/endpoints/selfsubjectrulesreviews.api.ts b/src/renderer/api/endpoints/selfsubjectrulesreviews.api.ts index 98f68f95f7..f47fc29a4e 100644 --- a/src/renderer/api/endpoints/selfsubjectrulesreviews.api.ts +++ b/src/renderer/api/endpoints/selfsubjectrulesreviews.api.ts @@ -25,12 +25,12 @@ export class SelfSubjectRulesReview extends KubeObject { static namespaced = false; static apiBase = "/apis/authorization.k8s.io/v1/selfsubjectrulesreviews"; - declare spec: { + spec: { // todo: add more types from api docs namespace?: string; }; - declare status: { + status: { resourceRules: ISelfSubjectReviewRule[]; nonResourceRules: ISelfSubjectReviewRule[]; incomplete: boolean; diff --git a/src/renderer/api/endpoints/service.api.ts b/src/renderer/api/endpoints/service.api.ts index 4723e6f66c..9dce4df628 100644 --- a/src/renderer/api/endpoints/service.api.ts +++ b/src/renderer/api/endpoints/service.api.ts @@ -40,7 +40,7 @@ export class Service extends KubeObject { autoBind(this); } - declare spec: { + spec: { type: string; clusterIP: string; externalTrafficPolicy?: string; @@ -51,7 +51,7 @@ export class Service extends KubeObject { externalIPs?: string[]; // https://kubernetes.io/docs/concepts/services-networking/service/#external-ips }; - declare status: { + status: { loadBalancer?: { ingress?: { ip?: string; diff --git a/src/renderer/api/endpoints/stateful-set.api.ts b/src/renderer/api/endpoints/stateful-set.api.ts index beb39015a6..cad00a365d 100644 --- a/src/renderer/api/endpoints/stateful-set.api.ts +++ b/src/renderer/api/endpoints/stateful-set.api.ts @@ -38,7 +38,7 @@ export class StatefulSet extends WorkloadKubeObject { autoBind(this); } - declare spec: { + spec: { serviceName: string; replicas: number; selector: { @@ -91,7 +91,7 @@ export class StatefulSet extends WorkloadKubeObject { }; }[]; }; - declare status: { + status: { observedGeneration: number; replicas: number; currentReplicas: number; diff --git a/src/renderer/api/kube-object.ts b/src/renderer/api/kube-object.ts index 25e6e62e2f..cc14ff9a7b 100644 --- a/src/renderer/api/kube-object.ts +++ b/src/renderer/api/kube-object.ts @@ -145,7 +145,7 @@ export class KubeObject implements ItemObject { kind: string; metadata: IKubeObjectMetadata; status?: any; - spec: any = {}; + spec?: any; get selfLink() { return this.metadata.selfLink; diff --git a/src/renderer/components/menu/menu.tsx b/src/renderer/components/menu/menu.tsx index 945f449e96..ff30b24c30 100644 --- a/src/renderer/components/menu/menu.tsx +++ b/src/renderer/components/menu/menu.tsx @@ -326,7 +326,7 @@ export class MenuItem extends React.Component { static defaultProps = defaultPropsMenuItem as object; static contextType = MenuContext; - declare context: MenuContextValue; + public context: MenuContextValue; public elem: HTMLElement; constructor(props: MenuItemProps) { diff --git a/src/renderer/components/tabs/tabs.tsx b/src/renderer/components/tabs/tabs.tsx index 6c06c029ca..bfc5a01b7e 100644 --- a/src/renderer/components/tabs/tabs.tsx +++ b/src/renderer/components/tabs/tabs.tsx @@ -62,7 +62,7 @@ export interface TabProps extends DOMAttributes { export class Tab extends React.PureComponent { static contextType = TabsContext; - declare context: TabsContextValue; + public context: TabsContextValue; public elem: HTMLElement; get isActive() { diff --git a/tsconfig.json b/tsconfig.json index c4c63baf88..b23c764f2b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -23,7 +23,7 @@ "allowSyntheticDefaultImports": true, "traceResolution": false, "resolveJsonModule": true, - "useDefineForClassFields": true, + "useDefineForClassFields": false, "paths": { "*": [ "node_modules/*",