kubetsx 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -81,6 +81,38 @@ npx kubetsx your-config.tsx > k8s.yaml
81
81
 
82
82
  > **💡 Tip:** Use `console.error()` for debug output. The CLI validates that stdout contains only valid YAML and will error if `console.log()` corrupts the output.
83
83
 
84
+ ### Render Options
85
+
86
+ ```tsx
87
+ import { render, Manifest, Deployment, Container, Port } from 'kubetsx';
88
+
89
+ const App = () => (
90
+ <Manifest>
91
+ <Deployment name="api" replicas={3}>
92
+ <Container name="api" image="mycompany/api:v1" />
93
+ </Deployment>
94
+ </Manifest>
95
+ );
96
+
97
+ // Output to stdout (default)
98
+ render(<App />);
99
+
100
+ // Write to a directory with separate files per resource
101
+ render(<App />, {
102
+ output: './manifests',
103
+ splitFiles: true,
104
+ });
105
+
106
+ // Dry run - returns YAML string without outputting
107
+ const yaml = render(<App />, { dryRun: true });
108
+ ```
109
+
110
+ | Option | Type | Description |
111
+ |--------|------|-------------|
112
+ | `output` | `string` | Output directory for YAML files (default: stdout) |
113
+ | `splitFiles` | `boolean` | Split resources into separate files (e.g., `api-deployment.yaml`) |
114
+ | `dryRun` | `boolean` | Return YAML string without writing to stdout or files |
115
+
84
116
  ---
85
117
 
86
118
  ## 🎯 Quick Start
@@ -337,6 +369,343 @@ render(<ProductionStack />, { output: './k8s/production.yaml' });
337
369
 
338
370
  ---
339
371
 
372
+ ## 🔌 Custom Resources & Plugins
373
+
374
+ Create any Kubernetes resource including CRDs. You are responsible for providing valid specs.
375
+
376
+ ### Custom Resources (CRDs)
377
+
378
+ ```tsx
379
+ import { render, Manifest, Custom } from 'kubetsx';
380
+
381
+ const App = () => (
382
+ <Manifest>
383
+ {/* Cert-Manager Certificate */}
384
+ <Custom
385
+ apiVersion="cert-manager.io/v1"
386
+ kind="Certificate"
387
+ metadata={{ name: 'my-cert', namespace: 'default' }}
388
+ spec={{
389
+ secretName: 'my-cert-tls',
390
+ issuerRef: { name: 'letsencrypt', kind: 'ClusterIssuer' },
391
+ dnsNames: ['example.com', 'www.example.com']
392
+ }}
393
+ />
394
+
395
+ {/* ArgoCD Application */}
396
+ <Custom
397
+ apiVersion="argoproj.io/v1alpha1"
398
+ kind="Application"
399
+ metadata={{ name: 'my-app', namespace: 'argocd' }}
400
+ spec={{
401
+ project: 'default',
402
+ source: {
403
+ repoURL: 'https://github.com/org/repo',
404
+ targetRevision: 'HEAD',
405
+ path: 'k8s'
406
+ },
407
+ destination: {
408
+ server: 'https://kubernetes.default.svc',
409
+ namespace: 'production'
410
+ }
411
+ }}
412
+ />
413
+ </Manifest>
414
+ );
415
+
416
+ render(<App />);
417
+ ```
418
+
419
+ ### Helm Releases (Flux CD)
420
+
421
+ ```tsx
422
+ import { render, Manifest, HelmRelease } from 'kubetsx';
423
+
424
+ const App = () => (
425
+ <Manifest>
426
+ <HelmRelease
427
+ name="nginx"
428
+ namespace="default"
429
+ chart={{
430
+ repository: "https://charts.bitnami.com/bitnami",
431
+ name: "nginx",
432
+ version: "15.0.0"
433
+ }}
434
+ values={{
435
+ replicaCount: 3,
436
+ service: { type: 'LoadBalancer' }
437
+ }}
438
+ />
439
+ </Manifest>
440
+ );
441
+
442
+ render(<App />);
443
+ ```
444
+
445
+ ### Creating Reusable Components
446
+
447
+ ```tsx
448
+ import { Custom } from 'kubetsx';
449
+ import type { KubexElement } from 'kubetsx';
450
+
451
+ // Create your own typed component for a CRD
452
+ interface CertificateProps {
453
+ name: string;
454
+ namespace?: string;
455
+ secretName: string;
456
+ issuer: string;
457
+ dnsNames: string[];
458
+ }
459
+
460
+ function Certificate({ name, namespace = 'default', secretName, issuer, dnsNames }: CertificateProps): KubexElement {
461
+ return (
462
+ <Custom
463
+ apiVersion="cert-manager.io/v1"
464
+ kind="Certificate"
465
+ metadata={{ name, namespace }}
466
+ spec={{
467
+ secretName,
468
+ issuerRef: { name: issuer, kind: 'ClusterIssuer' },
469
+ dnsNames
470
+ }}
471
+ />
472
+ );
473
+ }
474
+
475
+ // Use it like any other component
476
+ const App = () => (
477
+ <Manifest>
478
+ <Certificate
479
+ name="my-cert"
480
+ secretName="my-cert-tls"
481
+ issuer="letsencrypt"
482
+ dnsNames={['example.com']}
483
+ />
484
+ </Manifest>
485
+ );
486
+ ```
487
+
488
+ ### Ready-to-Use Plugin Examples
489
+
490
+ Copy these into your project and customize as needed:
491
+
492
+ <details>
493
+ <summary><strong>🔐 Cert-Manager (Certificate & ClusterIssuer)</strong></summary>
494
+
495
+ ```tsx
496
+ interface CertificateProps {
497
+ name: string;
498
+ namespace?: string;
499
+ secretName: string;
500
+ issuer: string;
501
+ issuerKind?: 'ClusterIssuer' | 'Issuer';
502
+ dnsNames: string[];
503
+ }
504
+
505
+ function Certificate({ name, namespace = 'default', secretName, issuer, issuerKind = 'ClusterIssuer', dnsNames }: CertificateProps) {
506
+ return (
507
+ <Custom
508
+ apiVersion="cert-manager.io/v1"
509
+ kind="Certificate"
510
+ metadata={{ name, namespace }}
511
+ spec={{ secretName, issuerRef: { name: issuer, kind: issuerKind }, dnsNames }}
512
+ />
513
+ );
514
+ }
515
+
516
+ interface ClusterIssuerProps {
517
+ name: string;
518
+ email: string;
519
+ server?: string;
520
+ }
521
+
522
+ function ClusterIssuer({ name, email, server = 'https://acme-v02.api.letsencrypt.org/directory' }: ClusterIssuerProps) {
523
+ return (
524
+ <Custom
525
+ apiVersion="cert-manager.io/v1"
526
+ kind="ClusterIssuer"
527
+ metadata={{ name }}
528
+ spec={{
529
+ acme: {
530
+ email,
531
+ server,
532
+ privateKeySecretRef: { name: `${name}-account-key` },
533
+ solvers: [{ http01: { ingress: { class: 'nginx' } } }]
534
+ }
535
+ }}
536
+ />
537
+ );
538
+ }
539
+ ```
540
+
541
+ </details>
542
+
543
+ <details>
544
+ <summary><strong>🚀 ArgoCD Application</strong></summary>
545
+
546
+ ```tsx
547
+ interface ArgoCDAppProps {
548
+ name: string;
549
+ namespace?: string;
550
+ repoURL: string;
551
+ path: string;
552
+ destinationNamespace: string;
553
+ syncPolicy?: 'automated' | 'manual';
554
+ }
555
+
556
+ function ArgoCDApp({ name, namespace = 'argocd', repoURL, path, destinationNamespace, syncPolicy = 'automated' }: ArgoCDAppProps) {
557
+ return (
558
+ <Custom
559
+ apiVersion="argoproj.io/v1alpha1"
560
+ kind="Application"
561
+ metadata={{ name, namespace }}
562
+ spec={{
563
+ project: 'default',
564
+ source: { repoURL, path, targetRevision: 'HEAD' },
565
+ destination: { server: 'https://kubernetes.default.svc', namespace: destinationNamespace },
566
+ ...(syncPolicy === 'automated' && {
567
+ syncPolicy: { automated: { prune: true, selfHeal: true }, syncOptions: ['CreateNamespace=true'] }
568
+ })
569
+ }}
570
+ />
571
+ );
572
+ }
573
+ ```
574
+
575
+ </details>
576
+
577
+ <details>
578
+ <summary><strong>🌐 Istio VirtualService</strong></summary>
579
+
580
+ ```tsx
581
+ interface VirtualServiceProps {
582
+ name: string;
583
+ namespace?: string;
584
+ hosts: string[];
585
+ gateways?: string[];
586
+ http: { match?: { uri?: { prefix?: string } }[]; route: { destination: { host: string; port?: { number: number } } }[] }[];
587
+ }
588
+
589
+ function VirtualService({ name, namespace = 'default', hosts, gateways, http }: VirtualServiceProps) {
590
+ return (
591
+ <Custom
592
+ apiVersion="networking.istio.io/v1beta1"
593
+ kind="VirtualService"
594
+ metadata={{ name, namespace }}
595
+ spec={{ hosts, ...(gateways && { gateways }), http }}
596
+ />
597
+ );
598
+ }
599
+ ```
600
+
601
+ </details>
602
+
603
+ <details>
604
+ <summary><strong>📊 Prometheus ServiceMonitor</strong></summary>
605
+
606
+ ```tsx
607
+ interface ServiceMonitorProps {
608
+ name: string;
609
+ namespace?: string;
610
+ matchLabels: Record<string, string>;
611
+ port: string;
612
+ path?: string;
613
+ interval?: string;
614
+ }
615
+
616
+ function ServiceMonitor({ name, namespace = 'default', matchLabels, port, path = '/metrics', interval = '30s' }: ServiceMonitorProps) {
617
+ return (
618
+ <Custom
619
+ apiVersion="monitoring.coreos.com/v1"
620
+ kind="ServiceMonitor"
621
+ metadata={{ name, namespace }}
622
+ spec={{ selector: { matchLabels }, endpoints: [{ port, path, interval }] }}
623
+ />
624
+ );
625
+ }
626
+ ```
627
+
628
+ </details>
629
+
630
+ <details>
631
+ <summary><strong>🔑 External Secrets</strong></summary>
632
+
633
+ ```tsx
634
+ interface ExternalSecretProps {
635
+ name: string;
636
+ namespace?: string;
637
+ secretStoreName: string;
638
+ target: string;
639
+ data: { secretKey: string; remoteRef: { key: string; property?: string } }[];
640
+ }
641
+
642
+ function ExternalSecret({ name, namespace = 'default', secretStoreName, target, data }: ExternalSecretProps) {
643
+ return (
644
+ <Custom
645
+ apiVersion="external-secrets.io/v1beta1"
646
+ kind="ExternalSecret"
647
+ metadata={{ name, namespace }}
648
+ spec={{
649
+ secretStoreRef: { name: secretStoreName, kind: 'ClusterSecretStore' },
650
+ target: { name: target },
651
+ data
652
+ }}
653
+ />
654
+ );
655
+ }
656
+ ```
657
+
658
+ </details>
659
+
660
+ <details>
661
+ <summary><strong>🔒 Sealed Secrets</strong></summary>
662
+
663
+ ```tsx
664
+ interface SealedSecretProps {
665
+ name: string;
666
+ namespace?: string;
667
+ encryptedData: Record<string, string>;
668
+ }
669
+
670
+ function SealedSecret({ name, namespace = 'default', encryptedData }: SealedSecretProps) {
671
+ return (
672
+ <Custom
673
+ apiVersion="bitnami.com/v1alpha1"
674
+ kind="SealedSecret"
675
+ metadata={{ name, namespace }}
676
+ spec={{ encryptedData }}
677
+ />
678
+ );
679
+ }
680
+ ```
681
+
682
+ </details>
683
+
684
+ ### Create Your Own Plugin Package
685
+
686
+ For full type safety on CRDs, you can create and publish your own plugin packages:
687
+
688
+ ```bash
689
+ npm install kubetsx-cert-manager # Your package or community package
690
+ npm install kubetsx-argocd # Your package or community package
691
+ ```
692
+
693
+ A plugin package is simply a collection of typed components that wrap `<Custom>`:
694
+
695
+ ```tsx
696
+ // kubetsx-cert-manager/src/index.tsx
697
+ import { Custom } from 'kubetsx';
698
+
699
+ export interface CertificateProps { /* ... */ }
700
+ export function Certificate(props: CertificateProps) {
701
+ return <Custom apiVersion="cert-manager.io/v1" kind="Certificate" /* ... */ />;
702
+ }
703
+ ```
704
+
705
+ **Want to share your plugin?** Open a PR to add it to our community plugins list.
706
+
707
+ ---
708
+
340
709
  ## 📤 Render Options
341
710
 
342
711
  ```tsx
package/dist/cli.js CHANGED
@@ -29,7 +29,7 @@ Examples:
29
29
  process.exit(0);
30
30
  }
31
31
  if (args.includes('--version') || args.includes('-v')) {
32
- console.log('kubetsx v0.1.2');
32
+ console.log('kubetsx v0.1.4');
33
33
  process.exit(0);
34
34
  }
35
35
  // Find tsx CLI
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * All Kubernetes resource components as JSX elements
5
5
  */
6
- import type { KubexElement, KubexNode, ManifestProps, ClusterProps, NamespaceProps, DeploymentProps, ContainerProps, PortProps, EnvProps, SecretRefProps, ConfigMapRefProps, ResourcesProps, ProbeProps, HttpProbeProps, TcpProbeProps, ExecProbeProps, ServiceProps, IngressProps, IngressHostProps, RouteProps, ConfigMapProps, SecretProps, VolumeProps, VolumeMountProps, EmptyDirProps, PvcVolumeProps, ConfigMapVolumeProps, SecretVolumeProps, PvcProps, HpaProps, JobProps, CronJobProps, ServiceAccountProps, RoleProps, ClusterRoleProps, RoleBindingProps, ClusterRoleBindingProps } from '../types.js';
6
+ import type { KubexElement, KubexNode, ManifestProps, ClusterProps, NamespaceProps, DeploymentProps, ContainerProps, PortProps, EnvProps, SecretRefProps, ConfigMapRefProps, ResourcesProps, ProbeProps, HttpProbeProps, TcpProbeProps, ExecProbeProps, ServiceProps, IngressProps, IngressHostProps, RouteProps, ConfigMapProps, SecretProps, VolumeProps, VolumeMountProps, EmptyDirProps, PvcVolumeProps, ConfigMapVolumeProps, SecretVolumeProps, PvcProps, HpaProps, JobProps, CronJobProps, ServiceAccountProps, RoleProps, ClusterRoleProps, RoleBindingProps, ClusterRoleBindingProps, CustomResourceProps, HelmReleaseProps } from '../types.js';
7
7
  export declare function Manifest(props: ManifestProps): KubexElement;
8
8
  export declare function Cluster(props: ClusterProps): KubexElement;
9
9
  export declare function Namespace(props: NamespaceProps): KubexElement;
@@ -43,4 +43,40 @@ export declare function Role(props: RoleProps): KubexElement;
43
43
  export declare function ClusterRole(props: ClusterRoleProps): KubexElement;
44
44
  export declare function RoleBinding(props: RoleBindingProps): KubexElement;
45
45
  export declare function ClusterRoleBinding(props: ClusterRoleBindingProps): KubexElement;
46
+ /**
47
+ * Create any Kubernetes resource - CRDs, custom resources, etc.
48
+ * User is responsible for providing valid spec.
49
+ *
50
+ * @example
51
+ * <Custom
52
+ * apiVersion="cert-manager.io/v1"
53
+ * kind="Certificate"
54
+ * metadata={{ name: 'my-cert', namespace: 'default' }}
55
+ * spec={{
56
+ * secretName: 'my-cert-tls',
57
+ * issuerRef: { name: 'letsencrypt', kind: 'ClusterIssuer' },
58
+ * dnsNames: ['example.com']
59
+ * }}
60
+ * />
61
+ */
62
+ export declare function Custom(props: CustomResourceProps): KubexElement;
63
+ /**
64
+ * Helm Release resource (Flux/ArgoCD style)
65
+ *
66
+ * @example
67
+ * <HelmRelease
68
+ * name="nginx"
69
+ * namespace="default"
70
+ * chart={{
71
+ * repository: "https://charts.bitnami.com/bitnami",
72
+ * name: "nginx",
73
+ * version: "15.0.0"
74
+ * }}
75
+ * values={{
76
+ * replicaCount: 3,
77
+ * service: { type: 'ClusterIP' }
78
+ * }}
79
+ * />
80
+ */
81
+ export declare function HelmRelease(props: HelmReleaseProps): KubexElement;
46
82
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"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"}
@@ -152,4 +152,47 @@ export function RoleBinding(props) {
152
152
  export function ClusterRoleBinding(props) {
153
153
  return h('ClusterRoleBinding', toProps(props));
154
154
  }
155
+ // ============================================================================
156
+ // Plugin & Custom Resources
157
+ // ============================================================================
158
+ /**
159
+ * Create any Kubernetes resource - CRDs, custom resources, etc.
160
+ * User is responsible for providing valid spec.
161
+ *
162
+ * @example
163
+ * <Custom
164
+ * apiVersion="cert-manager.io/v1"
165
+ * kind="Certificate"
166
+ * metadata={{ name: 'my-cert', namespace: 'default' }}
167
+ * spec={{
168
+ * secretName: 'my-cert-tls',
169
+ * issuerRef: { name: 'letsencrypt', kind: 'ClusterIssuer' },
170
+ * dnsNames: ['example.com']
171
+ * }}
172
+ * />
173
+ */
174
+ export function Custom(props) {
175
+ return h('Custom', toProps(props));
176
+ }
177
+ /**
178
+ * Helm Release resource (Flux/ArgoCD style)
179
+ *
180
+ * @example
181
+ * <HelmRelease
182
+ * name="nginx"
183
+ * namespace="default"
184
+ * chart={{
185
+ * repository: "https://charts.bitnami.com/bitnami",
186
+ * name: "nginx",
187
+ * version: "15.0.0"
188
+ * }}
189
+ * values={{
190
+ * replicaCount: 3,
191
+ * service: { type: 'ClusterIP' }
192
+ * }}
193
+ * />
194
+ */
195
+ export function HelmRelease(props) {
196
+ return h('HelmRelease', toProps(props));
197
+ }
155
198
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -5,6 +5,6 @@
5
5
  */
6
6
  export { h, Fragment, jsx, jsxs, jsxDEV } from './jsx-runtime.js';
7
7
  export { render } from './render.js';
8
- export { Manifest, Cluster, Namespace, Deployment, Container, Job, CronJob, Port, Env, SecretRef, ConfigMapRef, Resources, Probe, HttpProbe, TcpProbe, ExecProbe, Service, Ingress, IngressHost, Route, ConfigMap, Secret, Volume, VolumeMount, EmptyDir, PvcVolume, ConfigMapVolume, SecretVolume, Pvc, Hpa, ServiceAccount, Role, ClusterRole, RoleBinding, ClusterRoleBinding, } from './components/index.js';
9
- export type { KubexElement, KubexNode, KubexComponent, RenderOptions, K8sMetadata, K8sResource, ManifestProps, ClusterProps, NamespaceProps, DeploymentProps, ContainerProps, PortProps, EnvProps, SecretRefProps, ConfigMapRefProps, ResourcesProps, ProbeProps, HttpProbeProps, TcpProbeProps, ExecProbeProps, ServiceProps, IngressProps, IngressHostProps, RouteProps, ConfigMapProps, SecretProps, VolumeProps, VolumeMountProps, EmptyDirProps, PvcVolumeProps, ConfigMapVolumeProps, SecretVolumeProps, PvcProps, HpaProps, JobProps, CronJobProps, ServiceAccountProps, RoleProps, ClusterRoleProps, RoleBindingProps, ClusterRoleBindingProps, RoleRule, } from './types.js';
8
+ export { Manifest, Cluster, Namespace, Deployment, Container, Job, CronJob, Port, Env, SecretRef, ConfigMapRef, Resources, Probe, HttpProbe, TcpProbe, ExecProbe, Service, Ingress, IngressHost, Route, ConfigMap, Secret, Volume, VolumeMount, EmptyDir, PvcVolume, ConfigMapVolume, SecretVolume, Pvc, Hpa, ServiceAccount, Role, ClusterRole, RoleBinding, ClusterRoleBinding, Custom, HelmRelease, } from './components/index.js';
9
+ export type { KubexElement, KubexNode, KubexComponent, RenderOptions, K8sMetadata, K8sResource, ManifestProps, ClusterProps, NamespaceProps, DeploymentProps, ContainerProps, PortProps, EnvProps, SecretRefProps, ConfigMapRefProps, ResourcesProps, ProbeProps, HttpProbeProps, TcpProbeProps, ExecProbeProps, ServiceProps, IngressProps, IngressHostProps, RouteProps, ConfigMapProps, SecretProps, VolumeProps, VolumeMountProps, EmptyDirProps, PvcVolumeProps, ConfigMapVolumeProps, SecretVolumeProps, PvcProps, HpaProps, JobProps, CronJobProps, ServiceAccountProps, RoleProps, ClusterRoleProps, RoleBindingProps, ClusterRoleBindingProps, RoleRule, CustomResourceProps, HelmReleaseProps, KubetsxPlugin, PluginRegistry, } from './types.js';
10
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAGlE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,OAAO,EAEL,QAAQ,EAGR,OAAO,EACP,SAAS,EAGT,UAAU,EACV,SAAS,EACT,GAAG,EACH,OAAO,EAGP,IAAI,EACJ,GAAG,EACH,SAAS,EACT,YAAY,EACZ,SAAS,EAGT,KAAK,EACL,SAAS,EACT,QAAQ,EACR,SAAS,EAGT,OAAO,EACP,OAAO,EACP,WAAW,EACX,KAAK,EAGL,SAAS,EACT,MAAM,EAGN,MAAM,EACN,WAAW,EACX,QAAQ,EACR,SAAS,EACT,eAAe,EACf,YAAY,EAGZ,GAAG,EAGH,GAAG,EAGH,cAAc,EACd,IAAI,EACJ,WAAW,EACX,WAAW,EACX,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAG/B,YAAY,EAEV,YAAY,EACZ,SAAS,EACT,cAAc,EACd,aAAa,EAGb,WAAW,EACX,WAAW,EAGX,aAAa,EACb,YAAY,EACZ,cAAc,EACd,eAAe,EACf,cAAc,EACd,SAAS,EACT,QAAQ,EACR,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,UAAU,EACV,cAAc,EACd,aAAa,EACb,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EACjB,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,mBAAmB,EACnB,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,uBAAuB,EACvB,QAAQ,GACT,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAGlE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,OAAO,EAEL,QAAQ,EAGR,OAAO,EACP,SAAS,EAGT,UAAU,EACV,SAAS,EACT,GAAG,EACH,OAAO,EAGP,IAAI,EACJ,GAAG,EACH,SAAS,EACT,YAAY,EACZ,SAAS,EAGT,KAAK,EACL,SAAS,EACT,QAAQ,EACR,SAAS,EAGT,OAAO,EACP,OAAO,EACP,WAAW,EACX,KAAK,EAGL,SAAS,EACT,MAAM,EAGN,MAAM,EACN,WAAW,EACX,QAAQ,EACR,SAAS,EACT,eAAe,EACf,YAAY,EAGZ,GAAG,EAGH,GAAG,EAGH,cAAc,EACd,IAAI,EACJ,WAAW,EACX,WAAW,EACX,kBAAkB,EAGlB,MAAM,EACN,WAAW,GACZ,MAAM,uBAAuB,CAAC;AAG/B,YAAY,EAEV,YAAY,EACZ,SAAS,EACT,cAAc,EACd,aAAa,EAGb,WAAW,EACX,WAAW,EAGX,aAAa,EACb,YAAY,EACZ,cAAc,EACd,eAAe,EACf,cAAc,EACd,SAAS,EACT,QAAQ,EACR,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,UAAU,EACV,cAAc,EACd,aAAa,EACb,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EACjB,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,mBAAmB,EACnB,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,uBAAuB,EACvB,QAAQ,EAGR,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,cAAc,GACf,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -30,5 +30,7 @@ Pvc,
30
30
  // Autoscaling
31
31
  Hpa,
32
32
  // RBAC
33
- ServiceAccount, Role, ClusterRole, RoleBinding, ClusterRoleBinding, } from './components/index.js';
33
+ ServiceAccount, Role, ClusterRole, RoleBinding, ClusterRoleBinding,
34
+ // Plugin & Custom Resources
35
+ Custom, HelmRelease, } from './components/index.js';
34
36
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc;AACd,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAElE,gBAAgB;AAChB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,aAAa;AACb,OAAO;AACL,uCAAuC;AACvC,QAAQ;AAER,sBAAsB;AACtB,OAAO,EACP,SAAS;AAET,YAAY;AACZ,UAAU,EACV,SAAS,EACT,GAAG,EACH,OAAO;AAEP,0BAA0B;AAC1B,IAAI,EACJ,GAAG,EACH,SAAS,EACT,YAAY,EACZ,SAAS;AAET,SAAS;AACT,KAAK,EACL,SAAS,EACT,QAAQ,EACR,SAAS;AAET,aAAa;AACb,OAAO,EACP,OAAO,EACP,WAAW,EACX,KAAK;AAEL,gBAAgB;AAChB,SAAS,EACT,MAAM;AAEN,UAAU;AACV,MAAM,EACN,WAAW,EACX,QAAQ,EACR,SAAS,EACT,eAAe,EACf,YAAY;AAEZ,UAAU;AACV,GAAG;AAEH,cAAc;AACd,GAAG;AAEH,OAAO;AACP,cAAc,EACd,IAAI,EACJ,WAAW,EACX,WAAW,EACX,kBAAkB,GACnB,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc;AACd,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAElE,gBAAgB;AAChB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,aAAa;AACb,OAAO;AACL,uCAAuC;AACvC,QAAQ;AAER,sBAAsB;AACtB,OAAO,EACP,SAAS;AAET,YAAY;AACZ,UAAU,EACV,SAAS,EACT,GAAG,EACH,OAAO;AAEP,0BAA0B;AAC1B,IAAI,EACJ,GAAG,EACH,SAAS,EACT,YAAY,EACZ,SAAS;AAET,SAAS;AACT,KAAK,EACL,SAAS,EACT,QAAQ,EACR,SAAS;AAET,aAAa;AACb,OAAO,EACP,OAAO,EACP,WAAW,EACX,KAAK;AAEL,gBAAgB;AAChB,SAAS,EACT,MAAM;AAEN,UAAU;AACV,MAAM,EACN,WAAW,EACX,QAAQ,EACR,SAAS,EACT,eAAe,EACf,YAAY;AAEZ,UAAU;AACV,GAAG;AAEH,cAAc;AACd,GAAG;AAEH,OAAO;AACP,cAAc,EACd,IAAI,EACJ,WAAW,EACX,WAAW,EACX,kBAAkB;AAElB,4BAA4B;AAC5B,MAAM,EACN,WAAW,GACZ,MAAM,uBAAuB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EACV,YAAY,EAGZ,aAAa,EAGd,MAAM,YAAY,CAAC;AAMpB;;GAEG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CA2BjF;AAyyBD,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EACV,YAAY,EAGZ,aAAa,EAGd,MAAM,YAAY,CAAC;AAMpB;;GAEG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CA2BjF;AA+2BD,eAAe,MAAM,CAAC"}
package/dist/render.js CHANGED
@@ -89,6 +89,10 @@ function processElement(node, ctx) {
89
89
  return [processRoleBinding(props, ctx)];
90
90
  case 'ClusterRoleBinding':
91
91
  return [processClusterRoleBinding(props, ctx)];
92
+ case 'Custom':
93
+ return [processCustomResource(props)];
94
+ case 'HelmRelease':
95
+ return [processHelmRelease(props, ctx)];
92
96
  default:
93
97
  // Unknown element, process children
94
98
  return children.flatMap(child => processElement(child, ctx));
@@ -743,5 +747,61 @@ function processClusterRoleBinding(props, ctx) {
743
747
  })),
744
748
  };
745
749
  }
750
+ // ============================================================================
751
+ // Plugin & Custom Resource Processors
752
+ // ============================================================================
753
+ /**
754
+ * Process Custom resource - pass-through for any K8s resource
755
+ * User is responsible for providing valid spec
756
+ */
757
+ function processCustomResource(props) {
758
+ const { apiVersion, kind, metadata, spec, ...rest } = props;
759
+ const resource = {
760
+ apiVersion: apiVersion,
761
+ kind: kind,
762
+ metadata: metadata,
763
+ };
764
+ // Add spec if provided
765
+ if (spec) {
766
+ resource.spec = spec;
767
+ }
768
+ // Add any additional top-level fields (e.g., data, stringData, etc.)
769
+ const reserved = ['apiVersion', 'kind', 'metadata', 'spec', 'children', 'key'];
770
+ for (const [key, value] of Object.entries(rest)) {
771
+ if (!reserved.includes(key) && value !== undefined) {
772
+ resource[key] = value;
773
+ }
774
+ }
775
+ return resource;
776
+ }
777
+ /**
778
+ * Process HelmRelease resource (Flux CD style)
779
+ */
780
+ function processHelmRelease(props, ctx) {
781
+ const name = props.name;
782
+ const namespace = props.namespace || ctx.namespace || 'default';
783
+ const chart = props.chart;
784
+ const values = props.values;
785
+ const apiVersion = props.apiVersion || 'helm.toolkit.fluxcd.io/v2beta1';
786
+ return {
787
+ apiVersion,
788
+ kind: 'HelmRelease',
789
+ metadata: { name, namespace },
790
+ spec: {
791
+ interval: '5m',
792
+ chart: {
793
+ spec: {
794
+ chart: chart.name,
795
+ version: chart.version,
796
+ sourceRef: {
797
+ kind: 'HelmRepository',
798
+ name: chart.repository.split('/').pop() || 'repo',
799
+ },
800
+ },
801
+ },
802
+ ...(values && { values }),
803
+ },
804
+ };
805
+ }
746
806
  export default render;
747
807
  //# sourceMappingURL=render.js.map