1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

- Merging interfaces & classses to avoid overwriting fields from parent's super(data)-call with Object.assign(this, data). Otherwise use "declare" keyword at class field definition.

- Revamping {useDefineForClassFields: true} to avoid issues with non-observable class fields in some cases (from previous commit):

```
@observer
export class CommandContainer extends React.Component<CommandContainerProps> {
  // without some defined initial value "commandComponent" is non-observable for some reasons
  // when tsconfig.ts has {useDefineForClassFields:false}
  @observable.ref commandComponent: React.ReactNode = null;

  constructor(props: CommandContainerProps) {
    super(props);
    makeObservable(this);
  }
```

Signed-off-by: Roman <ixrock@gmail.com>
This commit is contained in:
Roman 2021-05-14 15:52:00 +03:00
parent 291595d476
commit 6addce21fb
39 changed files with 283 additions and 236 deletions

View File

@ -71,10 +71,7 @@ export interface IClusterMetrics<T = IMetrics> {
fsUsage: T;
}
export class Cluster extends KubeObject {
static kind = "Cluster";
static apiBase = "/apis/cluster.k8s.io/v1alpha1/clusters";
export interface Cluster {
spec: {
clusterNetwork?: {
serviceDomain?: string;
@ -106,6 +103,11 @@ export class Cluster extends KubeObject {
errorMessage?: string;
errorReason?: string;
};
}
export class Cluster extends KubeObject {
static kind = "Cluster";
static apiBase = "/apis/cluster.k8s.io/v1alpha1/clusters";
getStatus() {
if (this.metadata.deletionTimestamp) return ClusterStatus.REMOVING;

View File

@ -28,13 +28,15 @@ export interface IComponentStatusCondition {
message: string;
}
export interface ComponentStatus {
conditions: IComponentStatusCondition[];
}
export class ComponentStatus extends KubeObject {
static kind = "ComponentStatus";
static namespaced = false;
static apiBase = "/api/v1/componentstatuses";
conditions: IComponentStatusCondition[];
getTruthyConditions() {
return this.conditions.filter(c => c.status === "True");
}

View File

@ -22,6 +22,13 @@
import { KubeObject } from "../kube-object";
import { KubeJsonApiData } from "../kube-json-api";
import { KubeApi } from "../kube-api";
import { autoBind } from "../../../common/utils";
export interface ConfigMap {
data: {
[param: string]: string;
};
}
export class ConfigMap extends KubeObject {
static kind = "ConfigMap";
@ -30,12 +37,10 @@ export class ConfigMap extends KubeObject {
constructor(data: KubeJsonApiData) {
super(data);
this.data = this.data || {};
}
autoBind(this);
data: {
[param: string]: string;
};
this.data ??= {};
}
getKeys(): string[] {
return Object.keys(this.data);

View File

@ -38,11 +38,7 @@ type AdditionalPrinterColumnsV1Beta = AdditionalPrinterColumnsCommon & {
JSONPath: string;
};
export class CustomResourceDefinition extends KubeObject {
static kind = "CustomResourceDefinition";
static namespaced = false;
static apiBase = "/apis/apiextensions.k8s.io/v1/customresourcedefinitions";
export interface CustomResourceDefinition {
spec: {
group: string;
version?: string; // deprecated in v1 api
@ -84,6 +80,12 @@ export class CustomResourceDefinition extends KubeObject {
};
storedVersions: string[];
};
}
export class CustomResourceDefinition extends KubeObject {
static kind = "CustomResourceDefinition";
static namespaced = false;
static apiBase = "/apis/apiextensions.k8s.io/v1/customresourcedefinitions";
getResourceUrl() {
return crdResourcesURL({

View File

@ -59,16 +59,7 @@ export class CronJobApi extends KubeApi<CronJob> {
}
}
export class CronJob extends KubeObject {
static kind = "CronJob";
static namespaced = true;
static apiBase = "/apis/batch/v1beta1/cronjobs";
constructor(data: KubeJsonApiData) {
super(data);
autoBind(this);
}
export interface CronJob {
spec: {
schedule: string;
concurrencyPolicy: string;
@ -105,6 +96,17 @@ export class CronJob extends KubeObject {
status: {
lastScheduleTime?: string;
};
}
export class CronJob extends KubeObject {
static kind = "CronJob";
static namespaced = true;
static apiBase = "/apis/batch/v1beta1/cronjobs";
constructor(data: KubeJsonApiData) {
super(data);
autoBind(this);
}
getSuspendFlag() {
return this.spec.suspend.toString();

View File

@ -36,7 +36,7 @@ export class DaemonSet extends WorkloadKubeObject {
autoBind(this);
}
spec: {
declare spec: {
selector: {
matchLabels: {
[name: string]: string;
@ -78,7 +78,7 @@ export class DaemonSet extends WorkloadKubeObject {
};
revisionHistoryLimit: number;
};
status: {
declare status: {
currentNumberScheduled: number;
numberMisscheduled: number;
desiredNumberScheduled: number;

View File

@ -98,7 +98,7 @@ export class Deployment extends WorkloadKubeObject {
autoBind(this);
}
spec: {
declare spec: {
replicas: number;
selector: { matchLabels: { [app: string]: string } };
template: {
@ -177,7 +177,7 @@ export class Deployment extends WorkloadKubeObject {
};
};
};
status: {
declare status: {
observedGeneration: number;
replicas: number;
updatedReplicas: number;

View File

@ -122,13 +122,15 @@ export class EndpointSubset implements IEndpointSubset {
}
}
export interface Endpoint {
subsets: IEndpointSubset[];
}
export class Endpoint extends KubeObject {
static kind = "Endpoints";
static namespaced = true;
static apiBase = "/api/v1/endpoints";
subsets: IEndpointSubset[];
constructor(data: KubeJsonApiData) {
super(data);
autoBind(this);

View File

@ -24,11 +24,7 @@ import { KubeObject } from "../kube-object";
import { formatDuration } from "../../utils/formatDuration";
import { KubeApi } from "../kube-api";
export class KubeEvent extends KubeObject {
static kind = "Event";
static namespaced = true;
static apiBase = "/api/v1/events";
export interface KubeEvent {
involvedObject: {
kind: string;
namespace: string;
@ -51,6 +47,12 @@ export class KubeEvent extends KubeObject {
eventTime: null;
reportingComponent: string;
reportingInstance: string;
}
export class KubeEvent extends KubeObject {
static kind = "Event";
static namespaced = true;
static apiBase = "/api/v1/events";
isWarning() {
return this.type === "Warning";

View File

@ -83,16 +83,7 @@ export async function getChartValues(repo: string, name: string, version: string
return apiBase.get<string>(`/v2/charts/${repo}/${name}/values?${stringify({ version })}`);
}
export class HelmChart {
constructor(data: any) {
Object.assign(this, data);
autoBind(this);
}
static create(data: any) {
return new HelmChart(data);
}
export interface HelmChart {
apiVersion: string;
name: string;
version: string;
@ -114,6 +105,17 @@ export class HelmChart {
appVersion?: string;
deprecated?: boolean;
tillerVersion?: string;
}
export class HelmChart {
constructor(data: HelmChart) {
Object.assign(this, data);
autoBind(this);
}
static create(data: any) {
return new HelmChart(data);
}
getId() {
return `${this.repo}:${this.apiVersion}/${this.name}@${this.getAppVersion()}+${this.digest}`;

View File

@ -155,6 +155,16 @@ export async function rollbackRelease(name: string, namespace: string, revision:
});
}
export interface HelmRelease {
appVersion: string;
name: string;
namespace: string;
chart: string;
status: string;
updated: string;
revision: string;
}
export class HelmRelease implements ItemObject {
constructor(data: any) {
Object.assign(this, data);
@ -165,14 +175,6 @@ export class HelmRelease implements ItemObject {
return new HelmRelease(data);
}
appVersion: string;
name: string;
namespace: string;
chart: string;
status: string;
updated: string;
revision: string;
getId() {
return this.namespace + this.name;
}

View File

@ -59,11 +59,7 @@ export interface IHpaMetric {
}>;
}
export class HorizontalPodAutoscaler extends KubeObject {
static kind = "HorizontalPodAutoscaler";
static namespaced = true;
static apiBase = "/apis/autoscaling/v2beta1/horizontalpodautoscalers";
export interface HorizontalPodAutoscaler {
spec: {
scaleTargetRef: {
kind: string;
@ -86,6 +82,12 @@ export class HorizontalPodAutoscaler extends KubeObject {
type: string;
}[];
};
}
export class HorizontalPodAutoscaler extends KubeObject {
static kind = "HorizontalPodAutoscaler";
static namespaced = true;
static apiBase = "/apis/autoscaling/v2beta1/horizontalpodautoscalers";
getMaxPods() {
return this.spec.maxReplicas || 0;

View File

@ -83,16 +83,7 @@ export const getBackendServiceNamePort = (backend: IIngressBackend) => {
return { serviceName, servicePort };
};
export class Ingress extends KubeObject {
static kind = "Ingress";
static namespaced = true;
static apiBase = "/apis/networking.k8s.io/v1/ingresses";
constructor(data: KubeJsonApiData) {
super(data);
autoBind(this);
}
export interface Ingress {
spec: {
tls: {
secretName: string;
@ -122,6 +113,17 @@ export class Ingress extends KubeObject {
ingress: ILoadBalancerIngress[];
};
};
}
export class Ingress extends KubeObject {
static kind = "Ingress";
static namespaced = true;
static apiBase = "/apis/networking.k8s.io/v1/ingresses";
constructor(data: KubeJsonApiData) {
super(data);
autoBind(this);
}
getRoutes() {
const { spec: { tls, rules } } = this;
@ -193,7 +195,7 @@ export class Ingress extends KubeObject {
getLoadBalancers() {
const { status: { loadBalancer = { ingress: [] } } } = this;
return (loadBalancer.ingress ?? []).map(address => (
address.hostname || address.ip
));

View File

@ -37,7 +37,7 @@ export class Job extends WorkloadKubeObject {
autoBind(this);
}
spec: {
declare spec: {
parallelism?: number;
completions?: number;
backoffLimit?: number;
@ -83,7 +83,7 @@ export class Job extends WorkloadKubeObject {
serviceAccount?: string;
schedulerName?: string;
};
status: {
declare status: {
conditions: {
type: string;
status: string;

View File

@ -51,6 +51,12 @@ export interface LimitRangeItem extends LimitRangeParts {
type: string
}
export interface LimitRange {
spec: {
limits: LimitRangeItem[];
};
}
export class LimitRange extends KubeObject {
static kind = "LimitRange";
static namespaced = true;
@ -61,10 +67,6 @@ export class LimitRange extends KubeObject {
autoBind(this);
}
spec: {
limits: LimitRangeItem[];
};
getContainerLimits() {
return this.spec.limits.filter(limit => limit.type === LimitType.CONTAINER);
}

View File

@ -29,6 +29,12 @@ export enum NamespaceStatus {
TERMINATING = "Terminating",
}
export interface Namespace {
status?: {
phase: string;
};
}
export class Namespace extends KubeObject {
static kind = "Namespace";
static namespaced = false;
@ -39,12 +45,8 @@ export class Namespace extends KubeObject {
autoBind(this);
}
status?: {
phase: string;
};
getStatus() {
return this.status ? this.status.phase : "-";
return this.status?.phase ?? "-";
}
}

View File

@ -57,16 +57,7 @@ export interface IPolicyEgress {
}[];
}
export class NetworkPolicy extends KubeObject {
static kind = "NetworkPolicy";
static namespaced = true;
static apiBase = "/apis/networking.k8s.io/v1/networkpolicies";
constructor(data: KubeJsonApiData) {
super(data);
autoBind(this);
}
export interface NetworkPolicy {
spec: {
podSelector: {
matchLabels: {
@ -78,6 +69,17 @@ export class NetworkPolicy extends KubeObject {
ingress: IPolicyIngress[];
egress: IPolicyEgress[];
};
}
export class NetworkPolicy extends KubeObject {
static kind = "NetworkPolicy";
static namespaced = true;
static apiBase = "/apis/networking.k8s.io/v1/networkpolicies";
constructor(data: KubeJsonApiData) {
super(data);
autoBind(this);
}
getMatchLabels(): string[] {
if (!this.spec.podSelector || !this.spec.podSelector.matchLabels) return [];

View File

@ -27,7 +27,7 @@ import { KubeJsonApiData } from "../kube-json-api";
export class NodesApi extends KubeApi<Node> {
getMetrics(): Promise<INodeMetrics> {
const opts = { category: "nodes"};
const opts = { category: "nodes" };
return metricsApi.getMetrics({
memoryUsage: opts,
@ -50,16 +50,7 @@ export interface INodeMetrics<T = IMetrics> {
fsSize: T;
}
export class Node extends KubeObject {
static kind = "Node";
static namespaced = false;
static apiBase = "/api/v1/nodes";
constructor(data: KubeJsonApiData) {
super(data);
autoBind(this);
}
export interface Node {
spec: {
podCIDR: string;
externalID: string;
@ -110,6 +101,17 @@ export class Node extends KubeObject {
sizeBytes: number;
}[];
};
}
export class Node extends KubeObject {
static kind = "Node";
static namespaced = false;
static apiBase = "/api/v1/nodes";
constructor(data: KubeJsonApiData) {
super(data);
autoBind(this);
}
getNodeConditionText() {
const { conditions } = this.status;

View File

@ -43,16 +43,7 @@ export interface IPvcMetrics<T = IMetrics> {
diskCapacity: T;
}
export class PersistentVolumeClaim extends KubeObject {
static kind = "PersistentVolumeClaim";
static namespaced = true;
static apiBase = "/api/v1/persistentvolumeclaims";
constructor(data: KubeJsonApiData) {
super(data);
autoBind(this);
}
export interface PersistentVolumeClaim {
spec: {
accessModes: string[];
storageClassName: string;
@ -75,6 +66,17 @@ export class PersistentVolumeClaim extends KubeObject {
status: {
phase: string; // Pending
};
}
export class PersistentVolumeClaim extends KubeObject {
static kind = "PersistentVolumeClaim";
static namespaced = true;
static apiBase = "/api/v1/persistentvolumeclaims";
constructor(data: KubeJsonApiData) {
super(data);
autoBind(this);
}
getPods(allPods: Pod[]): Pod[] {
const pods = allPods.filter(pod => pod.getNs() === this.getNs());

View File

@ -25,16 +25,7 @@ import { autoBind } from "../../utils";
import { KubeApi } from "../kube-api";
import { KubeJsonApiData } from "../kube-json-api";
export class PersistentVolume extends KubeObject {
static kind = "PersistentVolume";
static namespaced = false;
static apiBase = "/api/v1/persistentvolumes";
constructor(data: KubeJsonApiData) {
super(data);
autoBind(this);
}
export interface PersistentVolume {
spec: {
capacity: {
storage: string; // 8Gi
@ -70,6 +61,17 @@ export class PersistentVolume extends KubeObject {
phase: string;
reason?: string;
};
}
export class PersistentVolume extends KubeObject {
static kind = "PersistentVolume";
static namespaced = false;
static apiBase = "/api/v1/persistentvolumes";
constructor(data: KubeJsonApiData) {
super(data);
autoBind(this);
}
getCapacity(inBytes = false) {
const capacity = this.spec.capacity;

View File

@ -22,11 +22,7 @@
import { KubeObject } from "../kube-object";
import { KubeApi } from "../kube-api";
export class PodMetrics extends KubeObject {
static kind = "PodMetrics";
static namespaced = true;
static apiBase = "/apis/metrics.k8s.io/v1beta1/pods";
export interface PodMetrics {
timestamp: string;
window: string;
containers: {
@ -38,6 +34,12 @@ export class PodMetrics extends KubeObject {
}[];
}
export class PodMetrics extends KubeObject {
static kind = "PodMetrics";
static namespaced = true;
static apiBase = "/apis/metrics.k8s.io/v1beta1/pods";
}
export const podMetricsApi = new KubeApi({
objectConstructor: PodMetrics,
});

View File

@ -24,16 +24,7 @@ import { KubeObject } from "../kube-object";
import { KubeApi } from "../kube-api";
import { KubeJsonApiData } from "../kube-json-api";
export class PodDisruptionBudget extends KubeObject {
static kind = "PodDisruptionBudget";
static namespaced = true;
static apiBase = "/apis/policy/v1beta1/poddisruptionbudgets";
constructor(data: KubeJsonApiData) {
super(data);
autoBind(this);
}
export interface PodDisruptionBudget {
spec: {
minAvailable: string;
maxUnavailable: string;
@ -45,6 +36,17 @@ export class PodDisruptionBudget extends KubeObject {
disruptionsAllowed: number
expectedPods: number
};
}
export class PodDisruptionBudget extends KubeObject {
static kind = "PodDisruptionBudget";
static namespaced = true;
static apiBase = "/apis/policy/v1beta1/poddisruptionbudgets";
constructor(data: KubeJsonApiData) {
super(data);
autoBind(this);
}
getSelectors() {
const selector = this.spec.selector;

View File

@ -213,7 +213,7 @@ export class Pod extends WorkloadKubeObject {
autoBind(this);
}
spec: {
declare spec: {
volumes?: {
name: string;
persistentVolumeClaim: {
@ -270,7 +270,7 @@ export class Pod extends WorkloadKubeObject {
};
affinity?: IAffinity;
};
status?: {
declare status?: {
phase: string;
conditions: {
type: string;

View File

@ -24,16 +24,7 @@ import { KubeObject } from "../kube-object";
import { KubeApi } from "../kube-api";
import { KubeJsonApiData } from "../kube-json-api";
export class PodSecurityPolicy extends KubeObject {
static kind = "PodSecurityPolicy";
static namespaced = false;
static apiBase = "/apis/policy/v1beta1/podsecuritypolicies";
constructor(data: KubeJsonApiData) {
super(data);
autoBind(this);
}
export interface PodSecurityPolicy {
spec: {
allowPrivilegeEscalation?: boolean;
allowedCSIDrivers?: {
@ -93,6 +84,17 @@ export class PodSecurityPolicy extends KubeObject {
};
volumes?: string[];
};
}
export class PodSecurityPolicy extends KubeObject {
static kind = "PodSecurityPolicy";
static namespaced = false;
static apiBase = "/apis/policy/v1beta1/podsecuritypolicies";
constructor(data: KubeJsonApiData) {
super(data);
autoBind(this);
}
isPrivileged() {
return !!this.spec.privileged;

View File

@ -59,7 +59,7 @@ export class ReplicaSet extends WorkloadKubeObject {
autoBind(this);
}
spec: {
declare spec: {
replicas?: number;
selector: { matchLabels: { [app: string]: string } };
template?: {
@ -72,7 +72,7 @@ export class ReplicaSet extends WorkloadKubeObject {
};
minReadySeconds?: number;
};
status: {
declare status: {
replicas: number;
fullyLabeledReplicas?: number;
readyReplicas?: number;

View File

@ -21,7 +21,6 @@
import { KubeObject } from "../kube-object";
import { KubeApi } from "../kube-api";
import { KubeJsonApiData } from "../kube-json-api";
export interface IResourceQuotaValues {
[quota: string]: string;
@ -51,16 +50,7 @@ export interface IResourceQuotaValues {
"count/deployments.extensions"?: string;
}
export class ResourceQuota extends KubeObject {
static kind = "ResourceQuota";
static namespaced = true;
static apiBase = "/api/v1/resourcequotas";
constructor(data: KubeJsonApiData) {
super(data);
this.spec = this.spec || {} as any;
}
export interface ResourceQuota {
spec: {
hard: IResourceQuotaValues;
scopeSelector?: {
@ -76,6 +66,12 @@ export class ResourceQuota extends KubeObject {
hard: IResourceQuotaValues;
used: IResourceQuotaValues;
};
}
export class ResourceQuota extends KubeObject {
static kind = "ResourceQuota";
static namespaced = true;
static apiBase = "/api/v1/resourcequotas";
getScopeSelector() {
const { matchExpressions = [] } = this.spec.scopeSelector || {};

View File

@ -31,6 +31,15 @@ export interface IRoleBindingSubject {
apiGroup?: string;
}
export interface RoleBinding {
subjects?: IRoleBindingSubject[];
roleRef: {
kind: string;
name: string;
apiGroup?: string;
};
}
export class RoleBinding extends KubeObject {
static kind = "RoleBinding";
static namespaced = true;
@ -41,13 +50,6 @@ export class RoleBinding extends KubeObject {
autoBind(this);
}
subjects?: IRoleBindingSubject[];
roleRef: {
kind: string;
name: string;
apiGroup?: string;
};
getSubjects() {
return this.subjects || [];
}

View File

@ -22,17 +22,19 @@
import { KubeObject } from "../kube-object";
import { KubeApi } from "../kube-api";
export class Role extends KubeObject {
static kind = "Role";
static namespaced = true;
static apiBase = "/apis/rbac.authorization.k8s.io/v1/roles";
export interface Role {
rules: {
verbs: string[];
apiGroups: string[];
resources: string[];
resourceNames?: string[];
}[];
}
export class Role extends KubeObject {
static kind = "Role";
static namespaced = true;
static apiBase = "/apis/rbac.authorization.k8s.io/v1/roles";
getRules() {
return this.rules || [];

View File

@ -40,6 +40,14 @@ export interface ISecretRef {
name: string;
}
export interface Secret {
type: SecretType;
data: {
[prop: string]: string;
token?: string;
};
}
export class Secret extends KubeObject {
static kind = "Secret";
static namespaced = true;
@ -48,13 +56,9 @@ export class Secret extends KubeObject {
constructor(data: KubeJsonApiData) {
super(data);
autoBind(this);
}
type: SecretType;
data: {
[prop: string]: string;
token?: string;
} = {};
this.data ??= {};
}
getKeys(): string[] {
return Object.keys(this.data);

View File

@ -28,8 +28,7 @@ export class SelfSubjectRulesReviewApi extends KubeApi<SelfSubjectRulesReview> {
spec: {
namespace
},
}
);
});
}
}
@ -41,21 +40,21 @@ export interface ISelfSubjectReviewRule {
nonResourceURLs?: string[];
}
export class SelfSubjectRulesReview extends KubeObject {
static kind = "SelfSubjectRulesReview";
static namespaced = false;
static apiBase = "/apis/authorization.k8s.io/v1/selfsubjectrulesreviews";
export interface SelfSubjectRulesReview {
spec: {
// todo: add more types from api docs
namespace?: string;
};
status: {
resourceRules: ISelfSubjectReviewRule[];
nonResourceRules: ISelfSubjectReviewRule[];
incomplete: boolean;
};
}
export class SelfSubjectRulesReview extends KubeObject {
static kind = "SelfSubjectRulesReview";
static namespaced = false;
static apiBase = "/apis/authorization.k8s.io/v1/selfsubjectrulesreviews";
getResourceRules() {
const rules = this.status && this.status.resourceRules || [];

View File

@ -24,6 +24,15 @@ import { KubeObject } from "../kube-object";
import { KubeApi } from "../kube-api";
import { KubeJsonApiData } from "../kube-json-api";
export interface ServiceAccount {
secrets?: {
name: string;
}[];
imagePullSecrets?: {
name: string;
}[];
}
export class ServiceAccount extends KubeObject {
static kind = "ServiceAccount";
static namespaced = true;
@ -34,13 +43,6 @@ export class ServiceAccount extends KubeObject {
autoBind(this);
}
secrets?: {
name: string;
}[];
imagePullSecrets?: {
name: string;
}[];
getSecrets() {
return this.secrets || [];
}

View File

@ -24,21 +24,16 @@ import { KubeObject } from "../kube-object";
import { KubeApi } from "../kube-api";
import { KubeJsonApiData } from "../kube-json-api";
export interface IServicePort {
name?: string;
protocol: string;
port: number;
targetPort: number;
}
export class ServicePort implements IServicePort {
export interface ServicePort {
name?: string;
protocol: string;
port: number;
targetPort: number;
nodePort?: number;
}
constructor(data: IServicePort) {
export class ServicePort {
constructor(data: ServicePort) {
Object.assign(this, data);
}
@ -51,16 +46,7 @@ export class ServicePort implements IServicePort {
}
}
export class Service extends KubeObject {
static kind = "Service";
static namespaced = true;
static apiBase = "/api/v1/services";
constructor(data: KubeJsonApiData) {
super(data);
autoBind(this);
}
export interface Service {
spec: {
type: string;
clusterIP: string;
@ -80,6 +66,17 @@ export class Service extends KubeObject {
}[];
};
};
}
export class Service extends KubeObject {
static kind = "Service";
static namespaced = true;
static apiBase = "/api/v1/services";
constructor(data: KubeJsonApiData) {
super(data);
autoBind(this);
}
getClusterIp() {
return this.spec.clusterIP;

View File

@ -59,7 +59,7 @@ export class StatefulSet extends WorkloadKubeObject {
autoBind(this);
}
spec: {
declare spec: {
serviceName: string;
replicas: number;
selector: {
@ -112,7 +112,7 @@ export class StatefulSet extends WorkloadKubeObject {
};
}[];
};
status: {
declare status: {
observedGeneration: number;
replicas: number;
currentReplicas: number;

View File

@ -24,6 +24,16 @@ import { KubeObject } from "../kube-object";
import { KubeApi } from "../kube-api";
import { KubeJsonApiData } from "../kube-json-api";
export interface StorageClass {
provisioner: string; // e.g. "storage.k8s.io/v1"
mountOptions?: string[];
volumeBindingMode: string;
reclaimPolicy: string;
parameters: {
[param: string]: string; // every provisioner has own set of these parameters
};
}
export class StorageClass extends KubeObject {
static kind = "StorageClass";
static namespaced = false;
@ -34,14 +44,6 @@ export class StorageClass extends KubeObject {
autoBind(this);
}
provisioner: string; // e.g. "storage.k8s.io/v1"
mountOptions?: string[];
volumeBindingMode: string;
reclaimPolicy: string;
parameters: {
[param: string]: string; // every provisioner has own set of these parameters
};
isDefault() {
const annotations = this.metadata.annotations || {};

View File

@ -91,6 +91,12 @@ export class KubeObject implements ItemObject {
static readonly kind: string;
static readonly namespaced: boolean;
apiVersion: string;
kind: string;
metadata: IKubeObjectMetadata;
status?: any;
spec?: any = {};
static create(data: any) {
return new KubeObject(data);
}
@ -178,12 +184,6 @@ export class KubeObject implements ItemObject {
autoBind(this);
}
apiVersion: string;
kind: string;
metadata: IKubeObjectMetadata;
status?: any;
spec?: any;
get selfLink() {
return this.metadata.selfLink;
}

View File

@ -53,7 +53,7 @@ export interface CommandContainerProps {
@observer
export class CommandContainer extends React.Component<CommandContainerProps> {
@observable.ref commandComponent: React.ReactNode = null;
@observable.ref commandComponent: React.ReactNode;
constructor(props: CommandContainerProps) {
super(props);

View File

@ -347,7 +347,7 @@ export class MenuItem extends React.Component<MenuItemProps> {
static defaultProps = defaultPropsMenuItem as object;
static contextType = MenuContext;
public context: MenuContextValue;
declare context: MenuContextValue;
public elem: HTMLElement;
constructor(props: MenuItemProps) {

View File

@ -83,7 +83,7 @@ export interface TabProps<D = any> extends DOMAttributes<HTMLElement> {
export class Tab extends React.PureComponent<TabProps> {
static contextType = TabsContext;
public context: TabsContextValue;
declare context: TabsContextValue;
public elem: HTMLElement;
get isActive() {

View File

@ -23,7 +23,7 @@
"allowSyntheticDefaultImports": true,
"traceResolution": false,
"resolveJsonModule": true,
"useDefineForClassFields": false,
"useDefineForClassFields": true,
"paths": {
"*": [
"node_modules/*",