timonel 2.2.0 → 2.4.0

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.
Files changed (77) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +5 -1
  3. package/SECURITY.md +15 -8
  4. package/dist/cli.js +29 -31
  5. package/dist/cli.js.map +1 -1
  6. package/dist/index.d.ts +7 -2
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +7 -2
  9. package/dist/index.js.map +1 -1
  10. package/dist/lib/helm.d.ts +200 -12
  11. package/dist/lib/helm.d.ts.map +1 -1
  12. package/dist/lib/helm.js +234 -13
  13. package/dist/lib/helm.js.map +1 -1
  14. package/dist/lib/helmChartWriter.d.ts +238 -0
  15. package/dist/lib/helmChartWriter.d.ts.map +1 -0
  16. package/dist/lib/helmChartWriter.js +318 -0
  17. package/dist/lib/helmChartWriter.js.map +1 -0
  18. package/dist/lib/resources/autoscaling/autoscalingResources.d.ts +26 -0
  19. package/dist/lib/resources/autoscaling/autoscalingResources.d.ts.map +1 -0
  20. package/dist/lib/resources/autoscaling/autoscalingResources.js +35 -0
  21. package/dist/lib/resources/autoscaling/autoscalingResources.js.map +1 -0
  22. package/dist/lib/resources/baseResourceProvider.d.ts +47 -0
  23. package/dist/lib/resources/baseResourceProvider.d.ts.map +1 -0
  24. package/dist/lib/resources/baseResourceProvider.js +83 -0
  25. package/dist/lib/resources/baseResourceProvider.js.map +1 -0
  26. package/dist/lib/resources/cloud/aws/awsResources.d.ts +165 -0
  27. package/dist/lib/resources/cloud/aws/awsResources.d.ts.map +1 -0
  28. package/dist/lib/resources/cloud/aws/awsResources.js +187 -0
  29. package/dist/lib/resources/cloud/aws/awsResources.js.map +1 -0
  30. package/dist/lib/resources/cloud/azure/azureResources.d.ts +169 -0
  31. package/dist/lib/resources/cloud/azure/azureResources.d.ts.map +1 -0
  32. package/dist/lib/resources/cloud/azure/azureResources.js +218 -0
  33. package/dist/lib/resources/cloud/azure/azureResources.js.map +1 -0
  34. package/dist/lib/resources/cloud/gcp/gcpResources.d.ts +133 -0
  35. package/dist/lib/resources/cloud/gcp/gcpResources.d.ts.map +1 -0
  36. package/dist/lib/resources/cloud/gcp/gcpResources.js +162 -0
  37. package/dist/lib/resources/cloud/gcp/gcpResources.js.map +1 -0
  38. package/dist/lib/resources/core/coreResources.d.ts +584 -0
  39. package/dist/lib/resources/core/coreResources.d.ts.map +1 -0
  40. package/dist/lib/resources/core/coreResources.js +796 -0
  41. package/dist/lib/resources/core/coreResources.js.map +1 -0
  42. package/dist/lib/resources/core/storageResources.d.ts +133 -0
  43. package/dist/lib/resources/core/storageResources.d.ts.map +1 -0
  44. package/dist/lib/resources/core/storageResources.js +120 -0
  45. package/dist/lib/resources/core/storageResources.js.map +1 -0
  46. package/dist/lib/resources/validation/validationResources.d.ts +26 -0
  47. package/dist/lib/resources/validation/validationResources.d.ts.map +1 -0
  48. package/dist/lib/resources/validation/validationResources.js +33 -0
  49. package/dist/lib/resources/validation/validationResources.js.map +1 -0
  50. package/dist/lib/rutter.d.ts +554 -0
  51. package/dist/lib/rutter.d.ts.map +1 -0
  52. package/dist/lib/rutter.js +665 -0
  53. package/dist/lib/rutter.js.map +1 -0
  54. package/dist/lib/security.d.ts +73 -0
  55. package/dist/lib/security.d.ts.map +1 -0
  56. package/dist/lib/security.js +138 -0
  57. package/dist/lib/security.js.map +1 -0
  58. package/dist/lib/umbrella.d.ts +22 -2
  59. package/dist/lib/umbrella.d.ts.map +1 -1
  60. package/dist/lib/umbrella.js +21 -1
  61. package/dist/lib/umbrella.js.map +1 -1
  62. package/dist/lib/umbrellaRutter.d.ts +97 -0
  63. package/dist/lib/umbrellaRutter.d.ts.map +1 -0
  64. package/dist/lib/{UmbrellaRutter.js → umbrellaRutter.js} +72 -23
  65. package/dist/lib/umbrellaRutter.js.map +1 -0
  66. package/package.json +2 -1
  67. package/dist/lib/HelmChartWriter.d.ts +0 -69
  68. package/dist/lib/HelmChartWriter.d.ts.map +0 -1
  69. package/dist/lib/HelmChartWriter.js +0 -124
  70. package/dist/lib/HelmChartWriter.js.map +0 -1
  71. package/dist/lib/Rutter.d.ts +0 -1334
  72. package/dist/lib/Rutter.d.ts.map +0 -1
  73. package/dist/lib/Rutter.js +0 -2138
  74. package/dist/lib/Rutter.js.map +0 -1
  75. package/dist/lib/UmbrellaRutter.d.ts +0 -34
  76. package/dist/lib/UmbrellaRutter.d.ts.map +0 -1
  77. package/dist/lib/UmbrellaRutter.js.map +0 -1
@@ -0,0 +1,665 @@
1
+ import { Chart, App, Testing } from 'cdk8s';
2
+ import YAML from 'yaml';
3
+ // Import resource providers
4
+ import { CoreResources } from './resources/core/coreResources.js';
5
+ import { StorageResources } from './resources/core/storageResources.js';
6
+ import { AWSResources } from './resources/cloud/aws/awsResources.js';
7
+ import { AzureResources } from './resources/cloud/azure/azureResources.js';
8
+ import { GCPResources } from './resources/cloud/gcp/gcpResources.js';
9
+ // Import HelmChartWriter for write functionality
10
+ import { HelmChartWriter } from './helmChartWriter.js';
11
+ import { include, helm } from './helm.js';
12
+ /**
13
+ * Rutter class with modular architecture
14
+ * Provides a clean API while delegating to specialized resource providers
15
+ * Maintains full backward compatibility with the original Rutter class
16
+ *
17
+ * @since 2.4.0
18
+ */
19
+ export class Rutter {
20
+ constructor(props) {
21
+ this.assets = [];
22
+ this.meta = props.meta;
23
+ this.defaultValues = props.defaultValues ?? {};
24
+ this.envValues = props.envValues ?? {};
25
+ // Create CDK8s infrastructure
26
+ this.app = new App();
27
+ this.chart = new Chart(this.app, props.meta.name, {
28
+ ...props.chartProps,
29
+ ...(props.namespace ? { namespace: props.namespace } : {}),
30
+ });
31
+ // Initialize resource providers
32
+ this.coreResources = new CoreResources(this.chart);
33
+ this.storageResources = new StorageResources(this.chart);
34
+ this.awsResources = new AWSResources(this.chart);
35
+ this.azureResources = new AzureResources(this.chart);
36
+ this.gcpResources = new GCPResources(this.chart);
37
+ }
38
+ // Core Kubernetes Resources
39
+ /**
40
+ * Creates a Deployment resource
41
+ * @param spec - Deployment specification
42
+ * @returns Created Deployment ApiObject
43
+ *
44
+ * @example
45
+ * ```typescript
46
+ * rutter.addDeployment({
47
+ * name: 'web-app',
48
+ * image: 'nginx:1.21',
49
+ * replicas: 3,
50
+ * containerPort: 80
51
+ * });
52
+ * ```
53
+ *
54
+ * @since 1.0.0
55
+ */
56
+ addDeployment(spec) {
57
+ return this.coreResources.addDeployment(spec);
58
+ }
59
+ /**
60
+ * Creates a DaemonSet resource
61
+ * @param spec - DaemonSet specification
62
+ * @returns Created DaemonSet ApiObject
63
+ *
64
+ * @example
65
+ * ```typescript
66
+ * rutter.addDaemonSet({
67
+ * name: 'log-collector',
68
+ * image: 'fluentd:v1.14',
69
+ * containerPort: 24224,
70
+ * hostNetwork: true
71
+ * });
72
+ * ```
73
+ *
74
+ * @since 2.4.0
75
+ */
76
+ addDaemonSet(spec) {
77
+ return this.coreResources.addDaemonSet(spec);
78
+ }
79
+ /**
80
+ * Creates a StatefulSet resource
81
+ * @param spec - StatefulSet specification
82
+ * @returns Created StatefulSet ApiObject
83
+ *
84
+ * @example
85
+ * ```typescript
86
+ * rutter.addStatefulSet({
87
+ * name: 'database',
88
+ * image: 'postgres:13',
89
+ * replicas: 3,
90
+ * serviceName: 'database-headless',
91
+ * containerPort: 5432
92
+ * });
93
+ * ```
94
+ *
95
+ * @since 2.4.0
96
+ */
97
+ addStatefulSet(spec) {
98
+ return this.coreResources.addStatefulSet(spec);
99
+ }
100
+ /**
101
+ * Creates a Role resource for RBAC
102
+ * @param spec - Role specification
103
+ * @returns Created Role ApiObject
104
+ *
105
+ * @example
106
+ * ```typescript
107
+ * rutter.addRole({
108
+ * name: 'pod-reader',
109
+ * rules: [
110
+ * {
111
+ * apiGroups: [''],
112
+ * resources: ['pods'],
113
+ * verbs: ['get', 'list', 'watch']
114
+ * }
115
+ * ]
116
+ * });
117
+ * ```
118
+ *
119
+ * @since 2.4.0
120
+ */
121
+ addRole(spec) {
122
+ return this.coreResources.addRole(spec);
123
+ }
124
+ /**
125
+ * Creates a ClusterRole resource for cluster-wide RBAC
126
+ * @param spec - ClusterRole specification
127
+ * @returns Created ClusterRole ApiObject
128
+ *
129
+ * @example
130
+ * ```typescript
131
+ * rutter.addClusterRole({
132
+ * name: 'cluster-reader',
133
+ * rules: [
134
+ * {
135
+ * apiGroups: [''],
136
+ * resources: ['nodes', 'namespaces'],
137
+ * verbs: ['get', 'list', 'watch']
138
+ * }
139
+ * ]
140
+ * });
141
+ * ```
142
+ *
143
+ * @since 2.4.0
144
+ */
145
+ addClusterRole(spec) {
146
+ return this.coreResources.addClusterRole(spec);
147
+ }
148
+ /**
149
+ * Creates a RoleBinding resource for RBAC
150
+ * @param spec - RoleBinding specification
151
+ * @returns Created RoleBinding ApiObject
152
+ *
153
+ * @example
154
+ * ```typescript
155
+ * rutter.addRoleBinding({
156
+ * name: 'pod-reader-binding',
157
+ * roleRef: {
158
+ * kind: 'Role',
159
+ * name: 'pod-reader',
160
+ * apiGroup: 'rbac.authorization.k8s.io'
161
+ * },
162
+ * subjects: [
163
+ * {
164
+ * kind: 'ServiceAccount',
165
+ * name: 'my-service-account'
166
+ * }
167
+ * ]
168
+ * });
169
+ * ```
170
+ *
171
+ * @since 2.4.0
172
+ */
173
+ addRoleBinding(spec) {
174
+ return this.coreResources.addRoleBinding(spec);
175
+ }
176
+ /**
177
+ * Creates a ClusterRoleBinding resource for cluster-wide RBAC
178
+ * @param spec - ClusterRoleBinding specification
179
+ * @returns Created ClusterRoleBinding ApiObject
180
+ *
181
+ * @example
182
+ * ```typescript
183
+ * rutter.addClusterRoleBinding({
184
+ * name: 'cluster-reader-binding',
185
+ * roleRef: {
186
+ * kind: 'ClusterRole',
187
+ * name: 'cluster-reader',
188
+ * apiGroup: 'rbac.authorization.k8s.io'
189
+ * },
190
+ * subjects: [
191
+ * {
192
+ * kind: 'ServiceAccount',
193
+ * name: 'monitoring-agent',
194
+ * namespace: 'monitoring'
195
+ * }
196
+ * ]
197
+ * });
198
+ * ```
199
+ *
200
+ * @since 2.4.0
201
+ */
202
+ addClusterRoleBinding(spec) {
203
+ return this.coreResources.addClusterRoleBinding(spec);
204
+ }
205
+ /**
206
+ * Creates a Job resource for batch workloads
207
+ * @param spec - Job specification
208
+ * @returns Created Job ApiObject
209
+ *
210
+ * @example
211
+ * ```typescript
212
+ * rutter.addJob({
213
+ * name: 'data-processor',
214
+ * image: 'busybox:1.35',
215
+ * command: ['sh', '-c', 'echo "Processing..." && sleep 30'],
216
+ * completions: 1
217
+ * });
218
+ * ```
219
+ *
220
+ * @since 2.4.0
221
+ */
222
+ addJob(spec) {
223
+ return this.coreResources.addJob(spec);
224
+ }
225
+ /**
226
+ * Creates a Service resource
227
+ * @param spec - Service specification
228
+ * @returns Created Service ApiObject
229
+ *
230
+ * @example
231
+ * ```typescript
232
+ * rutter.addService({
233
+ * name: 'web-service',
234
+ * port: 80,
235
+ * targetPort: 8080,
236
+ * type: 'ClusterIP'
237
+ * });
238
+ * ```
239
+ *
240
+ * @since 1.0.0
241
+ */
242
+ addService(spec) {
243
+ return this.coreResources.addService(spec);
244
+ }
245
+ /**
246
+ * Creates a ConfigMap resource
247
+ * @param spec - ConfigMap specification
248
+ * @returns Created ConfigMap ApiObject
249
+ *
250
+ * @example
251
+ * ```typescript
252
+ * rutter.addConfigMap({
253
+ * name: 'app-config',
254
+ * data: {
255
+ * 'config.yaml': 'key: value',
256
+ * 'app.properties': 'debug=true'
257
+ * }
258
+ * });
259
+ * ```
260
+ *
261
+ * @since 1.0.0
262
+ */
263
+ addConfigMap(spec) {
264
+ return this.coreResources.addConfigMap(spec);
265
+ }
266
+ /**
267
+ * Creates a Secret resource
268
+ * @param spec - Secret specification
269
+ * @returns Created Secret ApiObject
270
+ *
271
+ * @example
272
+ * ```typescript
273
+ * rutter.addSecret({
274
+ * name: 'app-secrets',
275
+ * type: 'Opaque',
276
+ * data: {
277
+ * username: 'YWRtaW4=',
278
+ * password: 'MWYyZDFlMmU2N2Rm'
279
+ * }
280
+ * });
281
+ * ```
282
+ *
283
+ * @since 1.0.0
284
+ */
285
+ addSecret(spec) {
286
+ return this.coreResources.addSecret(spec);
287
+ }
288
+ /**
289
+ * Creates a ServiceAccount resource
290
+ * @param spec - ServiceAccount specification
291
+ * @returns Created ServiceAccount ApiObject
292
+ *
293
+ * @example
294
+ * ```typescript
295
+ * rutter.addServiceAccount({
296
+ * name: 'app-service-account',
297
+ * automountServiceAccountToken: false
298
+ * });
299
+ * ```
300
+ *
301
+ * @since 1.0.0
302
+ */
303
+ addServiceAccount(spec) {
304
+ return this.coreResources.addServiceAccount(spec);
305
+ }
306
+ // Storage Resources
307
+ /**
308
+ * Creates a PersistentVolume resource
309
+ * @param spec - PersistentVolume specification
310
+ * @returns Created PersistentVolume ApiObject
311
+ *
312
+ * @example
313
+ * ```typescript
314
+ * rutter.addPersistentVolume({
315
+ * name: 'data-pv',
316
+ * capacity: '10Gi',
317
+ * accessModes: ['ReadWriteOnce'],
318
+ * storageClassName: 'fast-ssd'
319
+ * });
320
+ * ```
321
+ *
322
+ * @since 1.0.0
323
+ */
324
+ addPersistentVolume(spec) {
325
+ return this.storageResources.addPersistentVolume(spec);
326
+ }
327
+ /**
328
+ * Creates a PersistentVolumeClaim resource
329
+ * @param spec - PersistentVolumeClaim specification
330
+ * @returns Created PersistentVolumeClaim ApiObject
331
+ *
332
+ * @example
333
+ * ```typescript
334
+ * rutter.addPersistentVolumeClaim({
335
+ * name: 'data-pvc',
336
+ * size: '10Gi',
337
+ * accessModes: ['ReadWriteOnce'],
338
+ * storageClassName: 'fast-ssd'
339
+ * });
340
+ * ```
341
+ *
342
+ * @since 1.0.0
343
+ */
344
+ addPersistentVolumeClaim(spec) {
345
+ return this.storageResources.addPersistentVolumeClaim(spec);
346
+ }
347
+ /**
348
+ * Creates a StorageClass resource
349
+ * @param spec - StorageClass specification
350
+ * @returns Created StorageClass ApiObject
351
+ *
352
+ * @example
353
+ * ```typescript
354
+ * rutter.addStorageClass({
355
+ * name: 'fast-ssd',
356
+ * provisioner: 'kubernetes.io/aws-ebs',
357
+ * parameters: {
358
+ * type: 'gp3',
359
+ * encrypted: 'true'
360
+ * }
361
+ * });
362
+ * ```
363
+ *
364
+ * @since 1.0.0
365
+ */
366
+ addStorageClass(spec) {
367
+ return this.storageResources.addStorageClass(spec);
368
+ }
369
+ // AWS Resources
370
+ /**
371
+ * Creates an AWS EBS StorageClass
372
+ * @param spec - EBS StorageClass specification
373
+ * @returns Created StorageClass ApiObject
374
+ *
375
+ * @example
376
+ * ```typescript
377
+ * rutter.addAWSEBSStorageClass({
378
+ * name: 'fast-ebs',
379
+ * volumeType: 'gp3',
380
+ * encrypted: true,
381
+ * allowVolumeExpansion: true
382
+ * });
383
+ * ```
384
+ *
385
+ * @since 1.0.0
386
+ */
387
+ addAWSEBSStorageClass(spec) {
388
+ return this.awsResources.addEBSStorageClass(spec);
389
+ }
390
+ /**
391
+ * Creates an AWS EFS StorageClass
392
+ * @param spec - EFS StorageClass specification
393
+ * @returns Created StorageClass ApiObject
394
+ *
395
+ * @example
396
+ * ```typescript
397
+ * rutter.addAWSEFSStorageClass({
398
+ * name: 'efs-storage',
399
+ * fileSystemId: 'fs-12345678',
400
+ * directoryPerms: '0755'
401
+ * });
402
+ * ```
403
+ *
404
+ * @since 1.0.0
405
+ */
406
+ addAWSEFSStorageClass(spec) {
407
+ return this.awsResources.addEFSStorageClass(spec);
408
+ }
409
+ /**
410
+ * Creates an AWS IRSA ServiceAccount
411
+ * @param spec - IRSA ServiceAccount specification
412
+ * @returns Created ServiceAccount ApiObject
413
+ *
414
+ * @example
415
+ * ```typescript
416
+ * rutter.addAWSIRSAServiceAccount({
417
+ * name: 'aws-service-account',
418
+ * roleArn: 'arn:aws:iam::123456789012:role/MyRole'
419
+ * });
420
+ * ```
421
+ *
422
+ * @since 1.0.0
423
+ */
424
+ addAWSIRSAServiceAccount(spec) {
425
+ return this.awsResources.addIRSAServiceAccount(spec);
426
+ }
427
+ /**
428
+ * Creates an AWS ALB Ingress
429
+ * @param spec - ALB Ingress specification
430
+ * @returns Created Ingress ApiObject
431
+ *
432
+ * @example
433
+ * ```typescript
434
+ * rutter.addAWSALBIngress({
435
+ * name: 'web-ingress',
436
+ * rules: [{
437
+ * paths: [{
438
+ * path: '/',
439
+ * pathType: 'Prefix',
440
+ * backend: { service: { name: 'web-service', port: { number: 80 } } }
441
+ * }]
442
+ * }],
443
+ * scheme: 'internet-facing'
444
+ * });
445
+ * ```
446
+ *
447
+ * @since 1.0.0
448
+ */
449
+ addAWSALBIngress(spec) {
450
+ return this.awsResources.addALBIngress(spec);
451
+ }
452
+ // Azure Cloud Resources
453
+ /**
454
+ * Creates an Azure Disk StorageClass
455
+ * @param spec - Azure Disk StorageClass specification
456
+ * @returns Created StorageClass ApiObject
457
+ *
458
+ * @since 2.4.0
459
+ */
460
+ addAzureDiskStorageClass(spec) {
461
+ return this.azureResources.addAzureDiskStorageClass(spec);
462
+ }
463
+ /**
464
+ * Creates an Azure File StorageClass
465
+ * @param spec - Azure File StorageClass specification
466
+ * @returns Created StorageClass ApiObject
467
+ *
468
+ * @since 2.4.0
469
+ */
470
+ addAzureFileStorageClass(spec) {
471
+ return this.azureResources.addAzureFileStorageClass(spec);
472
+ }
473
+ /**
474
+ * Creates an Azure Application Gateway Ingress
475
+ * @param spec - AGIC Ingress specification
476
+ * @returns Created Ingress ApiObject
477
+ *
478
+ * @since 2.4.0
479
+ */
480
+ addAzureApplicationGatewayIngress(spec) {
481
+ return this.azureResources.addApplicationGatewayIngress(spec);
482
+ }
483
+ /**
484
+ * Creates an Azure Key Vault SecretProviderClass
485
+ * @param spec - Azure Key Vault SecretProviderClass specification
486
+ * @returns Created SecretProviderClass ApiObject
487
+ *
488
+ * @since 2.4.0
489
+ */
490
+ addAzureKeyVaultSecretProviderClass(spec) {
491
+ return this.azureResources.addAzureKeyVaultSecretProviderClass(spec);
492
+ }
493
+ /**
494
+ * Creates an Azure Container Registry ServiceAccount
495
+ * @param spec - Azure ACR ServiceAccount specification
496
+ * @returns Created ServiceAccount ApiObject
497
+ *
498
+ * @since 2.4.0
499
+ */
500
+ addAzureACRServiceAccount(spec) {
501
+ return this.azureResources.addAzureACRServiceAccount(spec);
502
+ }
503
+ // GCP Cloud Resources
504
+ /**
505
+ * Creates a GCP Persistent Disk StorageClass
506
+ * @param spec - GCP PD StorageClass specification
507
+ * @returns Created StorageClass ApiObject
508
+ *
509
+ * @since 2.4.0
510
+ */
511
+ addGCPPersistentDiskStorageClass(spec) {
512
+ return this.gcpResources.addPersistentDiskStorageClass(spec);
513
+ }
514
+ /**
515
+ * Creates a GCP Filestore StorageClass
516
+ * @param spec - GCP Filestore StorageClass specification
517
+ * @returns Created StorageClass ApiObject
518
+ *
519
+ * @since 2.4.0
520
+ */
521
+ addGCPFilestoreStorageClass(spec) {
522
+ return this.gcpResources.addFilestoreStorageClass(spec);
523
+ }
524
+ /**
525
+ * Creates a GCE Ingress with Google Cloud Load Balancer
526
+ * @param spec - GCE Ingress specification
527
+ * @returns Created Ingress ApiObject
528
+ *
529
+ * @since 2.4.0
530
+ */
531
+ addGCPGCEIngress(spec) {
532
+ return this.gcpResources.addGCEIngress(spec);
533
+ }
534
+ /**
535
+ * Creates a ServiceAccount with Workload Identity annotations
536
+ * @param spec - Workload Identity ServiceAccount specification
537
+ * @returns Created ServiceAccount ApiObject
538
+ *
539
+ * @since 2.4.0
540
+ */
541
+ addGCPWorkloadIdentityServiceAccount(spec) {
542
+ return this.gcpResources.addWorkloadIdentityServiceAccount(spec);
543
+ }
544
+ // Utility methods
545
+ /**
546
+ * Adds a custom resource definition (CRD) YAML
547
+ * @param yaml - CRD YAML content
548
+ * @param id - Unique identifier for the CRD
549
+ *
550
+ * @since 1.0.0
551
+ */
552
+ addCrd(yaml, id = 'crd') {
553
+ this.assets.push({ id, yaml, target: 'crds' });
554
+ }
555
+ /**
556
+ * Gets chart metadata
557
+ * @returns Chart metadata
558
+ *
559
+ * @since 1.0.0
560
+ */
561
+ getMeta() {
562
+ return { ...this.meta };
563
+ }
564
+ /**
565
+ * Gets default values
566
+ * @returns Default values object
567
+ *
568
+ * @since 1.0.0
569
+ */
570
+ getDefaultValues() {
571
+ return { ...this.defaultValues };
572
+ }
573
+ /**
574
+ * Gets environment-specific values
575
+ * @returns Environment values object
576
+ *
577
+ * @since 1.0.0
578
+ */
579
+ getEnvValues() {
580
+ return { ...this.envValues };
581
+ }
582
+ /**
583
+ * Gets all assets (CRDs, etc.)
584
+ * @returns Array of assets
585
+ *
586
+ * @since 1.0.0
587
+ */
588
+ getAssets() {
589
+ return [...this.assets];
590
+ }
591
+ /**
592
+ * Converts the chart to SynthAsset array for HelmChartWriter
593
+ * @returns Array of synthesized assets
594
+ *
595
+ * @since 2.4.0
596
+ */
597
+ toSynthArray() {
598
+ // Use cdk8s Testing.synth to obtain manifest objects
599
+ const manifestObjs = Testing.synth(this.chart);
600
+ // Enforce common labels best-practice on all rendered objects
601
+ const enriched = manifestObjs.map((obj) => {
602
+ if (obj && typeof obj === 'object') {
603
+ const o = obj;
604
+ o.metadata = o.metadata ?? {};
605
+ o.metadata.labels = o.metadata.labels ?? {};
606
+ const labels = o.metadata.labels;
607
+ const defaults = {
608
+ 'helm.sh/chart': '{{ .Chart.Name }}-{{ .Chart.Version }}',
609
+ 'app.kubernetes.io/name': include(Rutter.HELPER_NAME),
610
+ 'app.kubernetes.io/instance': helm.releaseName,
611
+ 'app.kubernetes.io/version': helm.chartVersion,
612
+ 'app.kubernetes.io/managed-by': '{{ .Release.Service }}',
613
+ 'app.kubernetes.io/part-of': helm.chartName,
614
+ };
615
+ for (const [k, v] of Object.entries(defaults)) {
616
+ if (!(k in labels)) {
617
+ // eslint-disable-next-line security/detect-object-injection -- Safe: controlled label assignment
618
+ labels[k] = v;
619
+ }
620
+ }
621
+ }
622
+ return obj;
623
+ });
624
+ // Convert to SynthAsset format
625
+ const synthAssets = [];
626
+ // Add main manifests
627
+ if (enriched.length > 0) {
628
+ const combinedYaml = enriched
629
+ .map((obj) => YAML.stringify(obj).trim())
630
+ .filter(Boolean)
631
+ .join('\n---\n');
632
+ synthAssets.push({
633
+ id: 'manifests',
634
+ yaml: combinedYaml,
635
+ });
636
+ }
637
+ // Add custom assets (CRDs, etc.)
638
+ for (const asset of this.assets) {
639
+ synthAssets.push({
640
+ id: asset.id,
641
+ yaml: asset.yaml,
642
+ target: asset.target,
643
+ });
644
+ }
645
+ return synthAssets;
646
+ }
647
+ /**
648
+ * Writes the Helm chart to the specified output directory
649
+ * @param outDir - Output directory path
650
+ *
651
+ * @since 1.0.0
652
+ */
653
+ write(outDir) {
654
+ HelmChartWriter.write({
655
+ outDir,
656
+ meta: this.meta,
657
+ defaultValues: this.defaultValues,
658
+ envValues: this.envValues,
659
+ assets: this.toSynthArray(),
660
+ });
661
+ }
662
+ }
663
+ // Constants for labels
664
+ Rutter.HELPER_NAME = 'chart.name';
665
+ //# sourceMappingURL=rutter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rutter.js","sourceRoot":"","sources":["../../src/lib/rutter.ts"],"names":[],"mappings":"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"}