k8ts
Version:
Powerful framework for building Kubernetes manifests in TypeScript.
74 lines (70 loc) • 1.82 kB
text/typescript
import type { Resource_Ctor_Of } from "@k8ts/instruments"
import { World_Entity, type World_Props } from "./origins"
import {
ClusterRole,
ClusterRoleBinding,
ConfigMap,
CronJob,
Deployment,
HttpRoute,
Namespace,
Pv,
Pvc,
Secret,
Service,
ServiceAccount
} from "./resources"
// const defaultKinds = [
// v1.Service._,
// v1.ConfigMap._,
// v1.Secret._,
// v1.PersistentVolume._,
// v1.PersistentVolumeClaim._,
// v1.Namespace._,
// v1.ServiceAccount._,
// apps.v1.Deployment._,
// //apps.v1.StatefulSet._,
// //apps.v1.DaemonSet._,
// //apps.v1.ReplicaSet._,
// //apps.v1.ControllerRevision._,
// storage.v1.StorageClass._,
// //storage.v1.VolumeAttachment._,
// batch.v1.CronJob._,
// batch.v1.Job._,
// gateway.v1.Gateway._,
// //gateway.v1.GatewayClass._,
// gateway.v1.HttpRoute._,
// // gateway.v1.TlsRoute._,
// // gateway.v1.TcpRoute._,
// // metrics.v1beta1.NodeMetrics._,
// // metrics.v1beta1.PodMetrics._,
// //rbac.v1.Role._,
// //rbac.v1.RoleBinding._,
// rbac.v1.ClusterRole._,
// rbac.v1.ClusterRoleBinding._
// //networking.v1.NetworkPolicy._
// ] as const
const defaultKindPairs = [
Service,
Deployment,
ConfigMap,
Secret,
Pv,
Pvc,
Namespace,
CronJob,
ServiceAccount,
ClusterRole,
HttpRoute,
ClusterRoleBinding
] as const
export class World<MoreKinds extends Resource_Ctor_Of[] = []> extends World_Entity<
[...typeof defaultKindPairs, ...MoreKinds]
> {
constructor(name: string, props?: World_Props<[...typeof defaultKindPairs, ...MoreKinds]>) {
props ??= {}
props.kinds ??= []
props.kinds.push(...(defaultKindPairs as any))
super(name, props)
}
}