🚀. Socket Launch Week Day 2:Introducing Manifest Alerts.Learn more
Sign In

@diagrams-js/plugin-kubernetes

Package Overview
Dependencies
Maintainers
1
Versions
3
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@diagrams-js/plugin-kubernetes - npm Package Compare versions

Comparing version
0.1.0
to
0.2.0
+1
-1
dist/index.js

@@ -1,3 +0,3 @@

const e=new Map;let t;const n={node:`Nodejs`,golang:`Go`,"c-sharp":`Dotnet`,"c#":`Dotnet`,postgres:`Postgresql`,mongo:`Mongodb`,httpd:`Apache`};function r(r){if(!r||r.trim()===``)return{provider:`onprem`,type:`container`,resource:`Docker`};let i=r.toLowerCase().split(`/`).pop()?.split(`:`)[0]?.split(`@`)[0]||``;if(e.has(i))return e.get(i);let a=n[i]||i;if(t){let n=t(a);if(n.length>0){let t=n[0],r={provider:t.provider,type:t.type,resource:t.resource};return e.set(i,r),r}let r=i.replace(/db$/,``).replace(/sql$/,``);if(r!==i){let n=t(r);if(n.length>0){let t=n[0],r={provider:t.provider,type:t.type,resource:t.resource};return e.set(i,r),r}}}let o={provider:`onprem`,type:`container`,resource:`Docker`};return e.set(i,o),o}function i(e,t={},n){if(n&&t[n]){let e=t[n];return typeof e==`string`?{url:e}:`url`in e?{url:e.url}:`iconify`in e?{url:`https://api.iconify.design/${e.iconify}.svg`}:e}let r=t[e];if(r)return typeof r==`string`?{url:r}:`url`in r?{url:r.url}:`iconify`in r?{url:`https://api.iconify.design/${r.iconify}.svg`}:r;let i={Deployment:{provider:`k8s`,type:`compute`,resource:`Deploy`},StatefulSet:{provider:`k8s`,type:`compute`,resource:`STS`},DaemonSet:{provider:`k8s`,type:`compute`,resource:`DS`},ReplicaSet:{provider:`k8s`,type:`compute`,resource:`RS`},Pod:{provider:`k8s`,type:`compute`,resource:`Pod`},Job:{provider:`k8s`,type:`compute`,resource:`Job`},CronJob:{provider:`k8s`,type:`compute`,resource:`Cronjob`},Service:{provider:`k8s`,type:`network`,resource:`SVC`},Ingress:{provider:`k8s`,type:`network`,resource:`Ing`},NetworkPolicy:{provider:`k8s`,type:`network`,resource:`Netpol`},Endpoint:{provider:`k8s`,type:`network`,resource:`Ep`},Endpoints:{provider:`k8s`,type:`network`,resource:`Ep`},ConfigMap:{provider:`k8s`,type:`podconfig`,resource:`CM`},Secret:{provider:`k8s`,type:`podconfig`,resource:`Secret`},PersistentVolume:{provider:`k8s`,type:`storage`,resource:`PV`},PersistentVolumeClaim:{provider:`k8s`,type:`storage`,resource:`PVC`},StorageClass:{provider:`k8s`,type:`storage`,resource:`SC`},Volume:{provider:`k8s`,type:`storage`,resource:`Vol`},Role:{provider:`k8s`,type:`rbac`,resource:`Role`},RoleBinding:{provider:`k8s`,type:`rbac`,resource:`RB`},ClusterRole:{provider:`k8s`,type:`rbac`,resource:`CRole`},ClusterRoleBinding:{provider:`k8s`,type:`rbac`,resource:`CRB`},ServiceAccount:{provider:`k8s`,type:`rbac`,resource:`SA`},User:{provider:`k8s`,type:`rbac`,resource:`User`},Group:{provider:`k8s`,type:`rbac`,resource:`Group`},Namespace:{provider:`k8s`,type:`group`,resource:`NS`},Node:{provider:`k8s`,type:`infra`,resource:`Node`},ETCD:{provider:`k8s`,type:`infra`,resource:`ETCD`},Master:{provider:`k8s`,type:`infra`,resource:`Master`},HorizontalPodAutoscaler:{provider:`k8s`,type:`clusterconfig`,resource:`HPA`},ResourceQuota:{provider:`k8s`,type:`clusterconfig`,resource:`Quota`},LimitRange:{provider:`k8s`,type:`clusterconfig`,resource:`Limits`},APIServer:{provider:`k8s`,type:`controlplane`,resource:`API`},ControllerManager:{provider:`k8s`,type:`controlplane`,resource:`CCM`},Scheduler:{provider:`k8s`,type:`controlplane`,resource:`Sched`},Kubelet:{provider:`k8s`,type:`controlplane`,resource:`Kubelet`},KProxy:{provider:`k8s`,type:`controlplane`,resource:`KProxy`},ChaosMesh:{provider:`k8s`,type:`chaos`,resource:`ChaosMesh`},LitmusChaos:{provider:`k8s`,type:`chaos`,resource:`LitmusChaos`},Helm:{provider:`k8s`,type:`ecosystem`,resource:`Helm`},Kustomize:{provider:`k8s`,type:`ecosystem`,resource:`Kustomize`},Krew:{provider:`k8s`,type:`ecosystem`,resource:`Krew`},ExternalDns:{provider:`k8s`,type:`ecosystem`,resource:`ExternalDns`},CustomResourceDefinition:{provider:`k8s`,type:`others`,resource:`CRD`},PodSecurityPolicy:{provider:`k8s`,type:`others`,resource:`PSP`}};return i[e]?i[e]:{provider:`k8s`,type:`cluster`,resource:`Api`}}function a(e,t){t.includes(`:`)||console.warn(`[kubernetes-plugin] Invalid Iconify format for "${e}": "${t}". Expected format: "prefix:name" (e.g., "logos:kubernetes")`)}function o(e){if(e)for(let[t,n]of Object.entries(e))typeof n==`object`&&`iconify`in n&&a(t,n.iconify)}let s;function c(e){return o(e?.imageMappings),{name:`kubernetes`,version:`1.0.0`,apiVersion:`1.0`,runtimeSupport:{node:!0,browser:!0,deno:!0,bun:!0},initialize:async(e,n)=>{let[r,i]=await Promise.all([n.loadYaml(),n.loadResourcesList()]);r&&(s=r),i?.findResource&&(t=i.findResource)},capabilities:[{type:`importer`,name:`kubernetes`,extensions:[`.yml`,`.yaml`],mimeTypes:[`text/yaml`,`application/x-yaml`],canImport:async(e,t)=>{let n=Array.isArray(e)?e:[e];for(let e of n)if(e.includes(`apiVersion:`)&&(e.includes(`kind:`)||e.includes(`metadata:`)))return!0;return!1},import:async(t,n,r)=>{let i=Array.isArray(t)?t:[t];for(let t of i){let r=d(u(t),e?.imageMappings);await n.import(JSON.stringify(r),`json`)}}},{type:`exporter`,name:`kubernetes`,extension:`.yaml`,mimeType:`text/yaml`,export:async(t,n)=>{let r=t.toJSON(),i=[];for(let t of r.nodes){let n=t.metadata?.kubernetes||{},r=n.kind||`Deployment`,a=(t.label||`unnamed`).toLowerCase().replace(/\s+/g,`-`);if(!t.metadata?.kubernetes||r===`Pod`&&n.parentKind)continue;let o={name:a,namespace:n.namespace||e?.defaultNamespace||`default`};n.labels&&Object.keys(n.labels).length>0&&(o.labels=n.labels),n.annotations&&Object.keys(n.annotations).length>0&&(o.annotations=n.annotations);let s={apiVersion:n.apiVersion||l(r),kind:r,metadata:o};n.spec?s.spec=n.spec:(r===`ConfigMap`||r===`Secret`)&&(n.data&&(s.data=n.data),r===`Secret`&&n.stringData&&(s.stringData=n.stringData)),i.push(s)}return f(i)}}]}}function l(e){return{Deployment:`apps/v1`,StatefulSet:`apps/v1`,DaemonSet:`apps/v1`,ReplicaSet:`apps/v1`,Service:`v1`,ConfigMap:`v1`,Secret:`v1`,PersistentVolume:`v1`,PersistentVolumeClaim:`v1`,Namespace:`v1`,Pod:`v1`,Job:`batch/v1`,CronJob:`batch/v1`,Ingress:`networking.k8s.io/v1`,NetworkPolicy:`networking.k8s.io/v1`,Role:`rbac.authorization.k8s.io/v1`,RoleBinding:`rbac.authorization.k8s.io/v1`,ClusterRole:`rbac.authorization.k8s.io/v1`,ClusterRoleBinding:`rbac.authorization.k8s.io/v1`,ServiceAccount:`v1`,HorizontalPodAutoscaler:`autoscaling/v2`}[e]||`v1`}function u(e){if(!s)throw Error(`Failed to load Kubernetes manifest parser`);return s.loadAll(e).filter(e=>typeof e==`object`&&!!e).filter(e=>e.apiVersion&&e.kind)}function d(e,t={}){let n=[],a=[],o=[],s=new Map;for(let c of e){let l=c.kind,u=c.metadata.name,d=c.metadata.namespace||`default`,f=d===`default`?u:`${d}/${u}`,p=i(l,t,u),m={id:f,label:u,metadata:{kubernetes:{apiVersion:c.apiVersion,kind:l,namespace:d,labels:c.metadata.labels,annotations:c.metadata.annotations,spec:c.spec,data:c.data,stringData:c.stringData}}};if(`url`in p?m.iconUrl=p.url:(m.provider=p.provider,m.service=p.type,m.type=p.resource),n.push(m),o.push(f),s.has(d)||s.set(d,[]),s.get(d).push(f),[`Deployment`,`StatefulSet`,`DaemonSet`,`ReplicaSet`,`Job`].includes(l)&&c.spec){let e=c.spec,t=e.replicas||1,i=(e.template?.spec?.containers||[])[0];if(i){let e=r(i.image);for(let r=0;r<t;r++){let c=`${f}-pod-${r}`,p={id:c,label:t===1?u:`${u}-${r}`,metadata:{kubernetes:{kind:`Pod`,parentKind:l,parentName:u,namespace:d,image:i.image,ports:i.ports,env:i.env,replicaIndex:r}}};`url`in e?p.iconUrl=e.url:(p.provider=e.provider,p.service=e.type,p.type=e.resource),n.push(p),o.push(c),s.get(d).push(c),a.push({from:f,to:c,direction:`forward`})}}}if(l===`Service`&&c.spec){let t=c.spec;if(t.selector)for(let n of e){let e;if(n.kind===`Deployment`||n.kind===`StatefulSet`||n.kind===`DaemonSet`||n.kind===`ReplicaSet`||n.kind===`Job`){let t=n.spec;e=t?.selector?.matchLabels||t?.template?.metadata?.labels}else n.kind===`Pod`&&(e=n.metadata.labels);if(e&&Object.entries(t.selector).every(([t,n])=>e?.[t]===n)){let e=n.metadata.namespace||`default`,t=e===`default`?n.metadata.name:`${e}/${n.metadata.name}`;a.push({from:f,to:t,direction:`forward`,label:`selects`})}}}if(l===`PersistentVolumeClaim`&&c.spec){for(let t of e)if(t.kind===`Deployment`&&t.spec){let e=t.spec.template?.spec?.volumes||[];for(let n of e)if(n.persistentVolumeClaim?.claimName===u||n.name===u){let e=t.metadata.namespace||`default`,n=e===`default`?t.metadata.name:`${e}/${t.metadata.name}`;a.push({from:n,to:f,direction:`forward`,label:`mounts`})}}}}let c=[];if(s.size>1)for(let[e,t]of s)c.push({label:e,nodes:t});else o.length>0&&c.push({label:`Kubernetes Resources`,nodes:o});return{name:`Kubernetes Manifest`,nodes:n,edges:a.length>0?a:void 0,clusters:c.length>0?c:void 0}}function f(e){if(!s)throw Error(`YAML module not initialized`);return e.length===0?`# No Kubernetes resources found
const e=new Map;let t;const n={node:`Nodejs`,golang:`Go`,"c-sharp":`Dotnet`,"c#":`Dotnet`,postgres:`Postgresql`,mongo:`Mongodb`,httpd:`Apache`};function r(r){if(!r||r.trim()===``)return{provider:`onprem`,type:`container`,resource:`Docker`};let i=r.toLowerCase().split(`/`).pop()?.split(`:`)[0]?.split(`@`)[0]||``;if(e.has(i))return e.get(i);let a=n[i]||i;if(t){let n=t(a);if(n.length>0){let t=n[0],r={provider:t.provider,type:t.type,resource:t.resource};return e.set(i,r),r}let r=i.replace(/db$/,``).replace(/sql$/,``);if(r!==i){let n=t(r);if(n.length>0){let t=n[0],r={provider:t.provider,type:t.type,resource:t.resource};return e.set(i,r),r}}}let o={provider:`onprem`,type:`container`,resource:`Docker`};return e.set(i,o),o}function i(e,t={},n){if(n&&t[n]){let e=t[n];return typeof e==`string`?{url:e}:`url`in e?{url:e.url}:`iconify`in e?{url:`https://api.iconify.design/${e.iconify}.svg`}:e}let r=t[e];if(r)return typeof r==`string`?{url:r}:`url`in r?{url:r.url}:`iconify`in r?{url:`https://api.iconify.design/${r.iconify}.svg`}:r;let i={Deployment:{provider:`k8s`,type:`compute`,resource:`Deploy`},StatefulSet:{provider:`k8s`,type:`compute`,resource:`STS`},DaemonSet:{provider:`k8s`,type:`compute`,resource:`DS`},ReplicaSet:{provider:`k8s`,type:`compute`,resource:`RS`},Pod:{provider:`k8s`,type:`compute`,resource:`Pod`},Job:{provider:`k8s`,type:`compute`,resource:`Job`},CronJob:{provider:`k8s`,type:`compute`,resource:`Cronjob`},Service:{provider:`k8s`,type:`network`,resource:`SVC`},Ingress:{provider:`k8s`,type:`network`,resource:`Ing`},NetworkPolicy:{provider:`k8s`,type:`network`,resource:`Netpol`},Endpoint:{provider:`k8s`,type:`network`,resource:`Ep`},Endpoints:{provider:`k8s`,type:`network`,resource:`Ep`},ConfigMap:{provider:`k8s`,type:`podconfig`,resource:`CM`},Secret:{provider:`k8s`,type:`podconfig`,resource:`Secret`},PersistentVolume:{provider:`k8s`,type:`storage`,resource:`PV`},PersistentVolumeClaim:{provider:`k8s`,type:`storage`,resource:`PVC`},StorageClass:{provider:`k8s`,type:`storage`,resource:`SC`},Volume:{provider:`k8s`,type:`storage`,resource:`Vol`},Role:{provider:`k8s`,type:`rbac`,resource:`Role`},RoleBinding:{provider:`k8s`,type:`rbac`,resource:`RB`},ClusterRole:{provider:`k8s`,type:`rbac`,resource:`CRole`},ClusterRoleBinding:{provider:`k8s`,type:`rbac`,resource:`CRB`},ServiceAccount:{provider:`k8s`,type:`rbac`,resource:`SA`},User:{provider:`k8s`,type:`rbac`,resource:`User`},Group:{provider:`k8s`,type:`rbac`,resource:`Group`},Namespace:{provider:`k8s`,type:`group`,resource:`NS`},Node:{provider:`k8s`,type:`infra`,resource:`Node`},ETCD:{provider:`k8s`,type:`infra`,resource:`ETCD`},Master:{provider:`k8s`,type:`infra`,resource:`Master`},HorizontalPodAutoscaler:{provider:`k8s`,type:`clusterconfig`,resource:`HPA`},ResourceQuota:{provider:`k8s`,type:`clusterconfig`,resource:`Quota`},LimitRange:{provider:`k8s`,type:`clusterconfig`,resource:`Limits`},APIServer:{provider:`k8s`,type:`controlplane`,resource:`API`},ControllerManager:{provider:`k8s`,type:`controlplane`,resource:`CCM`},Scheduler:{provider:`k8s`,type:`controlplane`,resource:`Sched`},Kubelet:{provider:`k8s`,type:`controlplane`,resource:`Kubelet`},KProxy:{provider:`k8s`,type:`controlplane`,resource:`KProxy`},ChaosMesh:{provider:`k8s`,type:`chaos`,resource:`ChaosMesh`},LitmusChaos:{provider:`k8s`,type:`chaos`,resource:`LitmusChaos`},Helm:{provider:`k8s`,type:`ecosystem`,resource:`Helm`},Kustomize:{provider:`k8s`,type:`ecosystem`,resource:`Kustomize`},Krew:{provider:`k8s`,type:`ecosystem`,resource:`Krew`},ExternalDns:{provider:`k8s`,type:`ecosystem`,resource:`ExternalDns`},CustomResourceDefinition:{provider:`k8s`,type:`others`,resource:`CRD`},PodSecurityPolicy:{provider:`k8s`,type:`others`,resource:`PSP`}};return i[e]?i[e]:{provider:`k8s`,type:`cluster`,resource:`Api`}}function a(e,t){t.includes(`:`)||console.warn(`[kubernetes-plugin] Invalid Iconify format for "${e}": "${t}". Expected format: "prefix:name" (e.g., "logos:kubernetes")`)}function o(e){if(e)for(let[t,n]of Object.entries(e))typeof n==`object`&&`iconify`in n&&a(t,n.iconify)}let s;function c(e){return o(e?.imageMappings),{name:`kubernetes`,version:`1.0.0`,apiVersion:`1.0`,runtimeSupport:{node:!0,browser:!0,deno:!0,bun:!0},initialize:async(e,n)=>{let[r,i]=await Promise.all([n.loadYaml(),n.loadResourcesList()]);r&&(s=r),i?.findResource&&(t=i.findResource)},capabilities:[{type:`importer`,name:`kubernetes`,extensions:[`.yml`,`.yaml`],mimeTypes:[`text/yaml`,`application/x-yaml`],canImport:async(e,t)=>{let n=Array.isArray(e)?e:[e];for(let e of n)if(e.includes(`apiVersion:`)&&(e.includes(`kind:`)||e.includes(`metadata:`)))return!0;return!1},import:async(t,n,r)=>{let i=Array.isArray(t)?t:[t];for(let t of i){let r=d(u(t),e?.imageMappings);await n.import(JSON.stringify(r),`json`)}}},{type:`exporter`,name:`kubernetes`,extension:`.yaml`,mimeType:`text/yaml`,export:async(t,n)=>{let r=t.toJSON(),i=[];for(let t of r.nodes){let n=t.metadata?.kubernetes||{},r=n.kind||`Deployment`,a=(t.label||`unnamed`).toLowerCase().replace(/\s+/g,`-`);if(!t.metadata?.kubernetes||r===`Pod`&&n.parentKind)continue;let o={name:a,namespace:n.namespace||e?.defaultNamespace||`default`};n.labels&&Object.keys(n.labels).length>0&&(o.labels=n.labels),n.annotations&&Object.keys(n.annotations).length>0&&(o.annotations=n.annotations);let s={apiVersion:n.apiVersion||l(r),kind:r,metadata:o};n.spec?s.spec=n.spec:(r===`ConfigMap`||r===`Secret`)&&(n.data&&(s.data=n.data),r===`Secret`&&n.stringData&&(s.stringData=n.stringData)),i.push(s)}return f(i)}}]}}function l(e){return{Deployment:`apps/v1`,StatefulSet:`apps/v1`,DaemonSet:`apps/v1`,ReplicaSet:`apps/v1`,Service:`v1`,ConfigMap:`v1`,Secret:`v1`,PersistentVolume:`v1`,PersistentVolumeClaim:`v1`,Namespace:`v1`,Pod:`v1`,Job:`batch/v1`,CronJob:`batch/v1`,Ingress:`networking.k8s.io/v1`,NetworkPolicy:`networking.k8s.io/v1`,Role:`rbac.authorization.k8s.io/v1`,RoleBinding:`rbac.authorization.k8s.io/v1`,ClusterRole:`rbac.authorization.k8s.io/v1`,ClusterRoleBinding:`rbac.authorization.k8s.io/v1`,ServiceAccount:`v1`,HorizontalPodAutoscaler:`autoscaling/v2`}[e]||`v1`}function u(e){if(!s)throw Error(`Failed to load Kubernetes manifest parser`);return s.loadAll(e).filter(e=>typeof e==`object`&&!!e).filter(e=>e.apiVersion&&e.kind)}function d(e,t={}){let n=[],a=[],o=[],s=new Map;for(let c of e){let l=c.kind,u=c.metadata.name,d=c.metadata.namespace||`default`,f=d===`default`?u:`${d}/${u}`,p=i(l,t,u),m={id:f,label:u,metadata:{kubernetes:{apiVersion:c.apiVersion,kind:l,namespace:d,labels:c.metadata.labels,annotations:c.metadata.annotations,spec:c.spec,data:c.data,stringData:c.stringData}}};if(`url`in p?m.iconUrl=p.url:(m.provider=p.provider,m.type=p.type,m.resource=p.resource),n.push(m),o.push(f),s.has(d)||s.set(d,[]),s.get(d).push(f),[`Deployment`,`StatefulSet`,`DaemonSet`,`ReplicaSet`,`Job`].includes(l)&&c.spec){let e=c.spec,t=e.replicas||1,i=(e.template?.spec?.containers||[])[0];if(i){let e=r(i.image);for(let r=0;r<t;r++){let c=`${f}-pod-${r}`,p={id:c,label:t===1?u:`${u}-${r}`,metadata:{kubernetes:{kind:`Pod`,parentKind:l,parentName:u,namespace:d,image:i.image,ports:i.ports,env:i.env,replicaIndex:r}}};`url`in e?p.iconUrl=e.url:(p.provider=e.provider,p.type=e.type,p.resource=e.resource),n.push(p),o.push(c),s.get(d).push(c),a.push({from:f,to:c,direction:`forward`})}}}if(l===`Service`&&c.spec){let t=c.spec;if(t.selector)for(let n of e){let e;if(n.kind===`Deployment`||n.kind===`StatefulSet`||n.kind===`DaemonSet`||n.kind===`ReplicaSet`||n.kind===`Job`){let t=n.spec;e=t?.selector?.matchLabels||t?.template?.metadata?.labels}else n.kind===`Pod`&&(e=n.metadata.labels);if(e&&Object.entries(t.selector).every(([t,n])=>e?.[t]===n)){let e=n.metadata.namespace||`default`,t=e===`default`?n.metadata.name:`${e}/${n.metadata.name}`;a.push({from:f,to:t,direction:`forward`,label:`selects`})}}}if(l===`PersistentVolumeClaim`&&c.spec){for(let t of e)if(t.kind===`Deployment`&&t.spec){let e=t.spec.template?.spec?.volumes||[];for(let n of e)if(n.persistentVolumeClaim?.claimName===u||n.name===u){let e=t.metadata.namespace||`default`,n=e===`default`?t.metadata.name:`${e}/${t.metadata.name}`;a.push({from:n,to:f,direction:`forward`,label:`mounts`})}}}}let c=[];if(s.size>1)for(let[e,t]of s)c.push({label:e,nodes:t});else o.length>0&&c.push({label:`Kubernetes Resources`,nodes:o});return{name:`Kubernetes Manifest`,nodes:n,edges:a.length>0?a:void 0,clusters:c.length>0?c:void 0}}function f(e){if(!s)throw Error(`YAML module not initialized`);return e.length===0?`# No Kubernetes resources found
`:e.length===1?s.dump(e[0]):e.map(e=>s.dump(e)).join(`---
`)}const p=c();export{c as createKubernetesPlugin,p as kubernetesPlugin};
{
"name": "@diagrams-js/plugin-kubernetes",
"version": "0.1.0",
"version": "0.2.0",
"description": "Kubernetes import/export plugin for diagrams-js",

@@ -51,3 +51,3 @@ "keywords": [

"@types/node": "^25.5.0",
"diagrams-js": "^0.3.1",
"diagrams-js": "^0.5.0",
"typescript": "^6.0.2",

@@ -58,3 +58,3 @@ "vite-plus": "^0.1.14",

"peerDependencies": {
"diagrams-js": "^0.3.1"
"diagrams-js": "^0.5.0"
},

@@ -61,0 +61,0 @@ "packageManager": "pnpm@10.33.0",