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,73 @@
1
+ /**
2
+ * @fileoverview Security utilities for input validation and sanitization
3
+ * Focused on CLI tool security concerns: path traversal, injection prevention
4
+ * @since 2.2.0
5
+ */
6
+ /**
7
+ * Security utilities for input validation and sanitization
8
+ * Focused on CLI tool security concerns: path traversal, injection prevention
9
+ *
10
+ * @since 2.2.0
11
+ */
12
+ export declare class SecurityUtils {
13
+ /**
14
+ * Validates and sanitizes file paths to prevent path traversal attacks
15
+ * @param inputPath - The path to validate
16
+ * @param allowedBasePath - The base path that the input should be within
17
+ * @returns Sanitized path if valid
18
+ * @throws Error if path is invalid or contains traversal sequences
19
+ *
20
+ * @since 2.2.0
21
+ */
22
+ static validatePath(inputPath: string, allowedBasePath: string): string;
23
+ /**
24
+ * Sanitizes log messages to prevent log injection attacks
25
+ * @param message - The message to sanitize
26
+ * @returns Sanitized message with control characters removed
27
+ *
28
+ * @since 2.2.0
29
+ */
30
+ static sanitizeLogMessage(message: string): string;
31
+ /**
32
+ * Sanitizes environment names to prevent path traversal (CWE-22)
33
+ * @param env - Environment name to sanitize
34
+ * @returns Sanitized environment name
35
+ * @throws Error if environment name is invalid
36
+ *
37
+ * @since 2.2.0
38
+ */
39
+ static sanitizeEnvironmentName(env: string): string;
40
+ /**
41
+ * Validates TypeScript file extensions for dynamic imports
42
+ * @param filePath - The file path to validate
43
+ * @returns True if the file has a valid TypeScript extension
44
+ *
45
+ * @since 2.2.0
46
+ */
47
+ static isValidTypeScriptFile(filePath: string): boolean;
48
+ /**
49
+ * Validates Helm template path syntax
50
+ * @param templatePath - The template path to validate
51
+ * @returns True if the path is valid for Helm templates
52
+ *
53
+ * @since 2.2.0
54
+ */
55
+ static isValidHelmTemplatePath(templatePath: string): boolean;
56
+ /**
57
+ * Validates chart names according to Helm conventions
58
+ * @param chartName - Chart name to validate
59
+ * @returns True if chart name follows Helm naming rules
60
+ *
61
+ * @since 2.2.0
62
+ */
63
+ static isValidChartName(chartName: string): boolean;
64
+ /**
65
+ * Validates subchart names according to Helm conventions
66
+ * @param subchartName - Subchart name to validate
67
+ * @returns True if subchart name is valid
68
+ *
69
+ * @since 2.2.0
70
+ */
71
+ static isValidSubchartName(subchartName: string): boolean;
72
+ }
73
+ //# sourceMappingURL=security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/lib/security.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;;;GAKG;AACH,qBAAa,aAAa;IACxB;;;;;;;;OAQG;IACH,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM;IA2BvE;;;;;;OAMG;IACH,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAgBlD;;;;;;;OAOG;IACH,MAAM,CAAC,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAmBnD;;;;;;OAMG;IACH,MAAM,CAAC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAMvD;;;;;;OAMG;IACH,MAAM,CAAC,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;IAU7D;;;;;;OAMG;IACH,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAWnD;;;;;;OAMG;IACH,MAAM,CAAC,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;CAG1D"}
@@ -0,0 +1,138 @@
1
+ /**
2
+ * @fileoverview Security utilities for input validation and sanitization
3
+ * Focused on CLI tool security concerns: path traversal, injection prevention
4
+ * @since 2.2.0
5
+ */
6
+ import * as path from 'path';
7
+ /**
8
+ * Security utilities for input validation and sanitization
9
+ * Focused on CLI tool security concerns: path traversal, injection prevention
10
+ *
11
+ * @since 2.2.0
12
+ */
13
+ export class SecurityUtils {
14
+ /**
15
+ * Validates and sanitizes file paths to prevent path traversal attacks
16
+ * @param inputPath - The path to validate
17
+ * @param allowedBasePath - The base path that the input should be within
18
+ * @returns Sanitized path if valid
19
+ * @throws Error if path is invalid or contains traversal sequences
20
+ *
21
+ * @since 2.2.0
22
+ */
23
+ static validatePath(inputPath, allowedBasePath) {
24
+ if (!inputPath || typeof inputPath !== 'string') {
25
+ throw new Error('Invalid path: path must be a non-empty string');
26
+ }
27
+ // Check for path traversal sequences
28
+ if (inputPath.includes('../') ||
29
+ inputPath.includes('..\\') ||
30
+ inputPath.includes('%2e%2e%2f') ||
31
+ inputPath.includes('%2e%2e%5c')) {
32
+ throw new Error('Invalid path: path traversal sequences detected');
33
+ }
34
+ // Resolve and normalize paths
35
+ const resolvedInput = path.resolve(inputPath);
36
+ const resolvedBase = path.resolve(allowedBasePath);
37
+ // Ensure the resolved path is within the allowed base path
38
+ if (!resolvedInput.startsWith(resolvedBase + path.sep) && resolvedInput !== resolvedBase) {
39
+ throw new Error(`Invalid path: path must be within ${resolvedBase}`);
40
+ }
41
+ return resolvedInput;
42
+ }
43
+ /**
44
+ * Sanitizes log messages to prevent log injection attacks
45
+ * @param message - The message to sanitize
46
+ * @returns Sanitized message with control characters removed
47
+ *
48
+ * @since 2.2.0
49
+ */
50
+ static sanitizeLogMessage(message) {
51
+ if (typeof message !== 'string') {
52
+ return String(message);
53
+ }
54
+ // Remove control characters (ASCII 0-31 and 127) and normalize line endings
55
+ return (message
56
+ // eslint-disable-next-line no-control-regex -- Intentionally removing control characters for security
57
+ .replace(/[\x00-\x1F\x7F]/g, '') // Remove control characters
58
+ .replace(/\r\n/g, ' ') // Replace CRLF with space
59
+ .replace(/[\r\n]/g, ' ') // Replace remaining CR/LF with space
60
+ .trim());
61
+ }
62
+ /**
63
+ * Sanitizes environment names to prevent path traversal (CWE-22)
64
+ * @param env - Environment name to sanitize
65
+ * @returns Sanitized environment name
66
+ * @throws Error if environment name is invalid
67
+ *
68
+ * @since 2.2.0
69
+ */
70
+ static sanitizeEnvironmentName(env) {
71
+ if (!env || typeof env !== 'string') {
72
+ throw new Error('Environment name must be a non-empty string');
73
+ }
74
+ // Allow only alphanumeric, hyphens, and underscores
75
+ const sanitized = env.replace(/[^a-zA-Z0-9-_]/g, '');
76
+ if (sanitized !== env) {
77
+ throw new Error(`Invalid environment name: ${this.sanitizeLogMessage(env)}`);
78
+ }
79
+ if (sanitized.length === 0 || sanitized.length > 63) {
80
+ throw new Error('Environment name must be 1-63 characters long');
81
+ }
82
+ return sanitized;
83
+ }
84
+ /**
85
+ * Validates TypeScript file extensions for dynamic imports
86
+ * @param filePath - The file path to validate
87
+ * @returns True if the file has a valid TypeScript extension
88
+ *
89
+ * @since 2.2.0
90
+ */
91
+ static isValidTypeScriptFile(filePath) {
92
+ const allowedExtensions = ['.ts', '.tsx'];
93
+ const ext = path.extname(filePath);
94
+ return allowedExtensions.includes(ext);
95
+ }
96
+ /**
97
+ * Validates Helm template path syntax
98
+ * @param templatePath - The template path to validate
99
+ * @returns True if the path is valid for Helm templates
100
+ *
101
+ * @since 2.2.0
102
+ */
103
+ static isValidHelmTemplatePath(templatePath) {
104
+ if (!templatePath || typeof templatePath !== 'string') {
105
+ return false;
106
+ }
107
+ // Basic validation for dot notation and no special characters that could break Helm
108
+ const helmPathRegex = /^[a-zA-Z][a-zA-Z0-9._-]*$/;
109
+ return helmPathRegex.test(templatePath);
110
+ }
111
+ /**
112
+ * Validates chart names according to Helm conventions
113
+ * @param chartName - Chart name to validate
114
+ * @returns True if chart name follows Helm naming rules
115
+ *
116
+ * @since 2.2.0
117
+ */
118
+ static isValidChartName(chartName) {
119
+ if (!chartName || typeof chartName !== 'string') {
120
+ return false;
121
+ }
122
+ // Helm chart name validation (RFC 1123 subdomain) - safe regex
123
+ // eslint-disable-next-line security/detect-unsafe-regex -- Simple character class regex is safe
124
+ const chartNameRegex = /^[a-z0-9]([-a-z0-9]*[a-z0-9])?$/;
125
+ return chartNameRegex.test(chartName) && chartName.length <= 63;
126
+ }
127
+ /**
128
+ * Validates subchart names according to Helm conventions
129
+ * @param subchartName - Subchart name to validate
130
+ * @returns True if subchart name is valid
131
+ *
132
+ * @since 2.2.0
133
+ */
134
+ static isValidSubchartName(subchartName) {
135
+ return this.isValidChartName(subchartName);
136
+ }
137
+ }
138
+ //# sourceMappingURL=security.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/lib/security.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,27 @@
1
- import type { UmbrellaRutter, UmbrellaRutterProps } from './UmbrellaRutter.js';
1
+ /**
2
+ * @fileoverview Umbrella chart utilities for managing multiple subcharts as a single unit
3
+ * @since 0.2.0
4
+ */
5
+ import type { UmbrellaRutter, UmbrellaRutterProps } from './umbrellaRutter.js';
2
6
  /**
3
7
  * Create an umbrella chart from multiple Rutter instances
8
+ *
9
+ * @param props - Umbrella chart configuration
10
+ * @returns UmbrellaRutter instance for managing subcharts
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const umbrella = createUmbrella({
15
+ * meta: { name: 'my-umbrella', version: '1.0.0' },
16
+ * subcharts: [
17
+ * { name: 'frontend', rutter: frontendChart },
18
+ * { name: 'backend', rutter: backendChart }
19
+ * ]
20
+ * });
21
+ * ```
22
+ *
23
+ * @since 0.2.0
4
24
  */
5
25
  export declare function createUmbrella(props: UmbrellaRutterProps): UmbrellaRutter;
6
- export type { UmbrellaRutterProps, SubchartSpec } from './UmbrellaRutter.js';
26
+ export type { UmbrellaRutterProps, SubchartSpec } from './umbrellaRutter.js';
7
27
  //# sourceMappingURL=umbrella.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"umbrella.d.ts","sourceRoot":"","sources":["../../src/lib/umbrella.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG/E;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,cAAc,CAEzE;AAGD,YAAY,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"umbrella.d.ts","sourceRoot":"","sources":["../../src/lib/umbrella.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG/E;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,cAAc,CAEzE;AAGD,YAAY,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC"}
@@ -1,6 +1,26 @@
1
- import { UmbrellaRutter as UmbrellaRutterClass } from './UmbrellaRutter.js';
1
+ /**
2
+ * @fileoverview Umbrella chart utilities for managing multiple subcharts as a single unit
3
+ * @since 0.2.0
4
+ */
5
+ import { UmbrellaRutter as UmbrellaRutterClass } from './umbrellaRutter.js';
2
6
  /**
3
7
  * Create an umbrella chart from multiple Rutter instances
8
+ *
9
+ * @param props - Umbrella chart configuration
10
+ * @returns UmbrellaRutter instance for managing subcharts
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const umbrella = createUmbrella({
15
+ * meta: { name: 'my-umbrella', version: '1.0.0' },
16
+ * subcharts: [
17
+ * { name: 'frontend', rutter: frontendChart },
18
+ * { name: 'backend', rutter: backendChart }
19
+ * ]
20
+ * });
21
+ * ```
22
+ *
23
+ * @since 0.2.0
4
24
  */
5
25
  export function createUmbrella(props) {
6
26
  return new UmbrellaRutterClass(props);
@@ -1 +1 @@
1
- {"version":3,"file":"umbrella.js","sourceRoot":"","sources":["../../src/lib/umbrella.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,IAAI,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE5E;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAA0B;IACvD,OAAO,IAAI,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACxC,CAAC"}
1
+ {"version":3,"file":"umbrella.js","sourceRoot":"","sources":["../../src/lib/umbrella.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,cAAc,IAAI,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE5E;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,cAAc,CAAC,KAA0B;IACvD,OAAO,IAAI,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * @fileoverview UmbrellaRutter class for managing Helm umbrella charts with multiple subcharts
3
+ * @since 0.2.0
4
+ */
5
+ import type { Rutter } from './rutter.js';
6
+ import type { HelmChartMeta } from './helmChartWriter.js';
7
+ /**
8
+ * Configuration for a subchart within an umbrella chart
9
+ *
10
+ * @since 0.2.0
11
+ */
12
+ export interface SubchartSpec {
13
+ /** Name of the subchart */
14
+ name: string;
15
+ /** Rutter instance that generates the subchart */
16
+ rutter: Rutter;
17
+ /** Version of the subchart (optional) */
18
+ version?: string;
19
+ /** Helm condition for enabling/disabling the subchart */
20
+ condition?: string;
21
+ /** Tags for grouping subcharts */
22
+ tags?: string[];
23
+ /** Repository URL for the subchart */
24
+ repository?: string;
25
+ }
26
+ /**
27
+ * Configuration properties for UmbrellaRutter
28
+ *
29
+ * @since 0.2.0
30
+ */
31
+ export interface UmbrellaRutterProps {
32
+ /** Metadata for the umbrella chart */
33
+ meta: HelmChartMeta;
34
+ /** Array of subchart specifications */
35
+ subcharts: SubchartSpec[];
36
+ /** Default values for the umbrella chart */
37
+ defaultValues?: Record<string, unknown>;
38
+ /** Environment-specific values */
39
+ envValues?: Record<string, Record<string, unknown>>;
40
+ }
41
+ /**
42
+ * UmbrellaRutter manages multiple Rutter instances as subcharts
43
+ * to create Helm umbrella charts with dependencies.
44
+ *
45
+ * @example
46
+ * ```typescript
47
+ * const umbrella = new UmbrellaRutter({
48
+ * meta: { name: 'my-app', version: '1.0.0' },
49
+ * subcharts: [
50
+ * { name: 'frontend', rutter: frontendChart },
51
+ * { name: 'backend', rutter: backendChart }
52
+ * ]
53
+ * });
54
+ *
55
+ * umbrella.write('./charts/my-app');
56
+ * ```
57
+ *
58
+ * @since 0.2.0
59
+ */
60
+ export declare class UmbrellaRutter {
61
+ private readonly props;
62
+ /**
63
+ * Creates a new UmbrellaRutter instance
64
+ *
65
+ * @param props - Configuration properties for the umbrella chart
66
+ * @throws {Error} If chart metadata is invalid
67
+ *
68
+ * @since 0.2.0
69
+ */
70
+ constructor(props: UmbrellaRutterProps);
71
+ private validateMetadata;
72
+ /**
73
+ * Write the umbrella chart with all subcharts to the output directory
74
+ *
75
+ * Creates the complete umbrella chart structure including:
76
+ * - Parent Chart.yaml with dependencies
77
+ * - Parent values.yaml with global and subchart values
78
+ * - Individual subchart directories under charts/
79
+ * - NOTES.txt template
80
+ *
81
+ * @param outDir - Output directory path for the umbrella chart
82
+ * @throws {Error} If output directory path is invalid
83
+ *
84
+ * @example
85
+ * ```typescript
86
+ * umbrella.write('./dist/my-umbrella-chart');
87
+ * ```
88
+ *
89
+ * @since 0.2.0
90
+ */
91
+ write(outDir: string): void;
92
+ private writeParentChart;
93
+ private writeParentValues;
94
+ private deepMerge;
95
+ private generateNotesTemplate;
96
+ }
97
+ //# sourceMappingURL=umbrellaRutter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"umbrellaRutter.d.ts","sourceRoot":"","sources":["../../src/lib/umbrellaRutter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kCAAkC;IAClC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,sCAAsC;IACtC,IAAI,EAAE,aAAa,CAAC;IACpB,uCAAuC;IACvC,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,4CAA4C;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACrD;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAsB;IAE5C;;;;;;;OAOG;gBACS,KAAK,EAAE,mBAAmB;IAMtC,OAAO,CAAC,gBAAgB;IAcxB;;;;;;;;;;;;;;;;;;OAkBG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAoC3B,OAAO,CAAC,gBAAgB;IA4BxB,OAAO,CAAC,iBAAiB;IAgCzB,OAAO,CAAC,SAAS;IAqBjB,OAAO,CAAC,qBAAqB;CAe9B"}
@@ -1,11 +1,39 @@
1
+ /**
2
+ * @fileoverview UmbrellaRutter class for managing Helm umbrella charts with multiple subcharts
3
+ * @since 0.2.0
4
+ */
1
5
  import { writeFileSync, mkdirSync } from 'fs';
2
6
  import { join } from 'path';
3
7
  import YAML from 'yaml';
8
+ import { SecurityUtils } from './security.js';
4
9
  /**
5
10
  * UmbrellaRutter manages multiple Rutter instances as subcharts
6
11
  * to create Helm umbrella charts with dependencies.
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * const umbrella = new UmbrellaRutter({
16
+ * meta: { name: 'my-app', version: '1.0.0' },
17
+ * subcharts: [
18
+ * { name: 'frontend', rutter: frontendChart },
19
+ * { name: 'backend', rutter: backendChart }
20
+ * ]
21
+ * });
22
+ *
23
+ * umbrella.write('./charts/my-app');
24
+ * ```
25
+ *
26
+ * @since 0.2.0
7
27
  */
8
28
  export class UmbrellaRutter {
29
+ /**
30
+ * Creates a new UmbrellaRutter instance
31
+ *
32
+ * @param props - Configuration properties for the umbrella chart
33
+ * @throws {Error} If chart metadata is invalid
34
+ *
35
+ * @since 0.2.0
36
+ */
9
37
  constructor(props) {
10
38
  // Validate chart metadata
11
39
  this.validateMetadata(props.meta);
@@ -25,34 +53,50 @@ export class UmbrellaRutter {
25
53
  }
26
54
  /**
27
55
  * Write the umbrella chart with all subcharts to the output directory
56
+ *
57
+ * Creates the complete umbrella chart structure including:
58
+ * - Parent Chart.yaml with dependencies
59
+ * - Parent values.yaml with global and subchart values
60
+ * - Individual subchart directories under charts/
61
+ * - NOTES.txt template
62
+ *
63
+ * @param outDir - Output directory path for the umbrella chart
64
+ * @throws {Error} If output directory path is invalid
65
+ *
66
+ * @example
67
+ * ```typescript
68
+ * umbrella.write('./dist/my-umbrella-chart');
69
+ * ```
70
+ *
71
+ * @since 0.2.0
28
72
  */
29
73
  write(outDir) {
30
- // Sanitize paths to prevent directory traversal
31
- const path = require('path');
32
- const sanitizedOutDir = path.normalize(path.resolve(outDir));
33
- const cwd = process.cwd();
34
- if (!sanitizedOutDir.startsWith(cwd)) {
35
- throw new Error('Output directory must be within current working directory');
36
- }
74
+ // Validate output directory path
75
+ const validatedOutDir = SecurityUtils.validatePath(outDir, process.cwd());
37
76
  // Create output directory structure
38
77
  // eslint-disable-next-line security/detect-non-literal-fs-filename -- CLI tool needs dynamic paths
39
- mkdirSync(sanitizedOutDir, { recursive: true });
78
+ mkdirSync(validatedOutDir, { recursive: true });
40
79
  // eslint-disable-next-line security/detect-non-literal-fs-filename -- CLI tool needs dynamic paths
41
- mkdirSync(join(sanitizedOutDir, 'charts'), { recursive: true });
80
+ mkdirSync(join(validatedOutDir, 'charts'), { recursive: true });
42
81
  // Write each subchart to charts/ directory
43
82
  for (const subchart of this.props.subcharts) {
44
- const subchartDir = join(sanitizedOutDir, 'charts', subchart.name);
83
+ // Validate subchart name using centralized validation
84
+ if (!SecurityUtils.isValidSubchartName(subchart.name)) {
85
+ throw new Error(`Invalid subchart name: ${SecurityUtils.sanitizeLogMessage(subchart.name)}`);
86
+ }
87
+ const sanitizedName = subchart.name; // Already validated by SecurityUtils
88
+ const subchartDir = join(validatedOutDir, 'charts', sanitizedName);
45
89
  subchart.rutter.write(subchartDir);
46
90
  }
47
91
  // Generate parent Chart.yaml with dependencies
48
- this.writeParentChart(sanitizedOutDir);
92
+ this.writeParentChart(validatedOutDir);
49
93
  // Generate parent values.yaml
50
- this.writeParentValues(sanitizedOutDir);
94
+ this.writeParentValues(validatedOutDir);
51
95
  // Generate empty templates directory (umbrella charts typically don't have templates)
52
96
  // eslint-disable-next-line security/detect-non-literal-fs-filename -- CLI tool needs dynamic paths
53
- mkdirSync(join(sanitizedOutDir, 'templates'), { recursive: true });
97
+ mkdirSync(join(validatedOutDir, 'templates'), { recursive: true });
54
98
  // eslint-disable-next-line security/detect-non-literal-fs-filename -- CLI tool needs dynamic paths
55
- writeFileSync(join(sanitizedOutDir, 'templates', 'NOTES.txt'), this.generateNotesTemplate());
99
+ writeFileSync(join(validatedOutDir, 'templates', 'NOTES.txt'), this.generateNotesTemplate());
56
100
  }
57
101
  writeParentChart(outDir) {
58
102
  const chartYaml = {
@@ -66,13 +110,16 @@ export class UmbrellaRutter {
66
110
  home: this.props.meta.home,
67
111
  sources: this.props.meta.sources,
68
112
  maintainers: this.props.meta.maintainers,
69
- dependencies: this.props.subcharts.map((subchart) => ({
70
- name: subchart.name,
71
- version: subchart.version || '0.1.0',
72
- repository: subchart.repository || `file://./charts/${subchart.name}`,
73
- condition: subchart.condition,
74
- tags: subchart.tags,
75
- })),
113
+ dependencies: this.props.subcharts.map((subchart) => {
114
+ // Subchart name already validated in write() method
115
+ return {
116
+ name: subchart.name,
117
+ version: subchart.version || '0.1.0',
118
+ repository: subchart.repository || `file://./charts/${subchart.name}`,
119
+ ...(subchart.condition && { condition: subchart.condition }),
120
+ ...(subchart.tags && { tags: subchart.tags }),
121
+ };
122
+ }),
76
123
  };
77
124
  // eslint-disable-next-line security/detect-non-literal-fs-filename -- CLI tool needs dynamic paths
78
125
  writeFileSync(join(outDir, 'Chart.yaml'), YAML.stringify(chartYaml));
@@ -97,9 +144,11 @@ export class UmbrellaRutter {
97
144
  // Write environment-specific values files
98
145
  if (this.props.envValues) {
99
146
  for (const [env, envVals] of Object.entries(this.props.envValues)) {
147
+ // Use centralized environment name sanitization
148
+ const sanitizedEnv = SecurityUtils.sanitizeEnvironmentName(env);
100
149
  const envValues = this.deepMerge(values, envVals);
101
150
  // eslint-disable-next-line security/detect-non-literal-fs-filename -- CLI tool needs dynamic paths
102
- writeFileSync(join(outDir, `values-${env}.yaml`), YAML.stringify(envValues));
151
+ writeFileSync(join(outDir, `values-${sanitizedEnv}.yaml`), YAML.stringify(envValues));
103
152
  }
104
153
  }
105
154
  }
@@ -135,4 +184,4 @@ ${this.props.subcharts.map((s) => ` - charts/${s.name}/README.md`).join('\n')}
135
184
  `;
136
185
  }
137
186
  }
138
- //# sourceMappingURL=UmbrellaRutter.js.map
187
+ //# sourceMappingURL=umbrellaRutter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"umbrellaRutter.js","sourceRoot":"","sources":["../../src/lib/umbrellaRutter.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "timonel",
3
3
  "type": "module",
4
- "version": "2.2.0",
4
+ "version": "2.4.0",
5
5
  "description": "Timonel: programmatic Helm chart generator using cdk8s (TypeScript)",
6
6
  "bin": {
7
7
  "timonel": "dist/cli.js",
@@ -80,6 +80,7 @@
80
80
  },
81
81
  "dependencies": {
82
82
  "cdk8s": "^2.70.11",
83
+ "constructs": "^10.4.2",
83
84
  "ts-node": "^10.9.2",
84
85
  "yaml": "^2.8.1"
85
86
  },
@@ -1,69 +0,0 @@
1
- export interface HelmChartMeta {
2
- name: string;
3
- version: string;
4
- description?: string;
5
- appVersion?: string;
6
- type?: 'application' | 'library';
7
- kubeVersion?: string;
8
- keywords?: string[];
9
- home?: string;
10
- sources?: string[];
11
- maintainers?: {
12
- name: string;
13
- email?: string;
14
- url?: string;
15
- }[];
16
- icon?: string;
17
- dependencies?: Array<{
18
- name: string;
19
- version: string;
20
- repository: string;
21
- alias?: string;
22
- condition?: string | string[];
23
- tags?: string[];
24
- importValues?: unknown;
25
- }>;
26
- }
27
- export interface EnvValuesMap {
28
- [env: string]: Record<string, unknown>;
29
- }
30
- export interface SynthAsset {
31
- /** filename or logical id */
32
- id: string;
33
- /** YAML string, may contain multiple docs separated by --- */
34
- yaml: string;
35
- /** target directory inside chart: templates (default) or crds */
36
- target?: 'templates' | 'crds';
37
- /** if true, don't split this asset into multiple files even if it contains multiple docs */
38
- singleFile?: boolean;
39
- }
40
- export interface HelmChartWriteOptions {
41
- outDir: string;
42
- meta: HelmChartMeta;
43
- defaultValues?: Record<string, unknown> | undefined;
44
- envValues?: EnvValuesMap | undefined;
45
- /**
46
- * Kubernetes manifests to place under templates/
47
- * Accepts one or multiple documents per SynthAsset.
48
- */
49
- assets: SynthAsset[];
50
- /**
51
- * Optional Helm helpers content for templates/_helpers.tpl.
52
- * If a string is provided, it's written verbatim.
53
- * If an array is provided, each item becomes a named Helm template
54
- * block as: {{- define "<name>" -}} ... {{- end }}
55
- */
56
- helpersTpl?: string | HelperDefinition[];
57
- /** Optional NOTES.txt content under templates/ */
58
- notesTpl?: string;
59
- /** Optional values.schema.json object */
60
- valuesSchema?: Record<string, unknown>;
61
- }
62
- export interface HelperDefinition {
63
- name: string;
64
- body: string;
65
- }
66
- export declare class HelmChartWriter {
67
- static write(opts: HelmChartWriteOptions): void;
68
- }
69
- //# sourceMappingURL=HelmChartWriter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"HelmChartWriter.d.ts","sourceRoot":"","sources":["../../src/lib/HelmChartWriter.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,KAAK,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAC9B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,YAAY;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,UAAU;IACzB,6BAA6B;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,MAAM,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAC9B,4FAA4F;IAC5F,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,aAAa,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IACpD,SAAS,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IACrC;;;OAGG;IACH,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAAC;IACzC,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,eAAe;IAC1B,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,qBAAqB;CA4GzC"}