timonel 2.2.0 → 2.3.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.
- package/CHANGELOG.md +10 -0
- package/SECURITY.md +15 -8
- package/dist/cli.js +29 -31
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/HelmChartWriter.d.ts +185 -16
- package/dist/lib/HelmChartWriter.d.ts.map +1 -1
- package/dist/lib/HelmChartWriter.js +239 -45
- package/dist/lib/HelmChartWriter.js.map +1 -1
- package/dist/lib/Rutter.d.ts +1432 -78
- package/dist/lib/Rutter.d.ts.map +1 -1
- package/dist/lib/Rutter.js +734 -9
- package/dist/lib/Rutter.js.map +1 -1
- package/dist/lib/UmbrellaRutter.d.ts.map +1 -1
- package/dist/lib/UmbrellaRutter.js +28 -22
- package/dist/lib/UmbrellaRutter.js.map +1 -1
- package/dist/lib/helm.d.ts +200 -12
- package/dist/lib/helm.d.ts.map +1 -1
- package/dist/lib/helm.js +234 -13
- package/dist/lib/helm.js.map +1 -1
- package/dist/lib/security.d.ts +52 -0
- package/dist/lib/security.d.ts.map +1 -0
- package/dist/lib/security.js +117 -0
- package/dist/lib/security.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,14 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Helm chart writer for generating complete Helm chart structures
|
|
3
|
+
* @since 1.0.0
|
|
4
|
+
*/
|
|
1
5
|
import * as fs from 'fs';
|
|
2
6
|
import * as path from 'path';
|
|
3
7
|
import YAML from 'yaml';
|
|
8
|
+
import { SecurityUtils } from './security.js';
|
|
9
|
+
/**
|
|
10
|
+
* Helm chart writer for generating complete chart structures
|
|
11
|
+
*
|
|
12
|
+
* This class provides static methods to generate a complete Helm chart
|
|
13
|
+
* including Chart.yaml, values.yaml, templates, and auxiliary files.
|
|
14
|
+
*
|
|
15
|
+
* @class HelmChartWriter
|
|
16
|
+
* @since 1.0.0
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* HelmChartWriter.write({
|
|
21
|
+
* outDir: './dist/my-chart',
|
|
22
|
+
* meta: { name: 'my-app', version: '1.0.0' },
|
|
23
|
+
* assets: []
|
|
24
|
+
* });
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
4
27
|
export class HelmChartWriter {
|
|
28
|
+
/**
|
|
29
|
+
* Writes a complete Helm chart to the specified directory
|
|
30
|
+
*
|
|
31
|
+
* Creates the full directory structure and writes all necessary files
|
|
32
|
+
* for a valid Helm chart including Chart.yaml, values files, templates,
|
|
33
|
+
* and auxiliary files.
|
|
34
|
+
*
|
|
35
|
+
* @param {HelmChartWriteOptions} opts - Chart configuration options
|
|
36
|
+
* @throws {Error} If output directory path is invalid
|
|
37
|
+
* @throws {Error} If chart metadata is invalid
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```typescript
|
|
41
|
+
* HelmChartWriter.write({
|
|
42
|
+
* outDir: './charts/my-app',
|
|
43
|
+
* meta: {
|
|
44
|
+
* name: 'my-app',
|
|
45
|
+
* version: '1.0.0',
|
|
46
|
+
* description: 'My application'
|
|
47
|
+
* },
|
|
48
|
+
* defaultValues: { replicas: 3 },
|
|
49
|
+
* assets: []
|
|
50
|
+
* });
|
|
51
|
+
* ```
|
|
52
|
+
*
|
|
53
|
+
* @since 1.0.0
|
|
54
|
+
*/
|
|
5
55
|
static write(opts) {
|
|
6
56
|
const { outDir, meta, defaultValues = {}, envValues = {}, assets, helpersTpl, notesTpl, valuesSchema, } = opts;
|
|
7
|
-
//
|
|
57
|
+
// Validate output directory path
|
|
58
|
+
const validatedOutDir = SecurityUtils.validatePath(outDir, process.cwd());
|
|
59
|
+
// Create directory structure
|
|
60
|
+
this.createDirectories(validatedOutDir);
|
|
61
|
+
// Write chart files
|
|
62
|
+
this.writeChartYaml(validatedOutDir, meta);
|
|
63
|
+
this.writeValuesFiles(validatedOutDir, defaultValues, envValues);
|
|
64
|
+
this.writeAssets(validatedOutDir, assets);
|
|
65
|
+
this.writeHelpers(validatedOutDir, helpersTpl);
|
|
66
|
+
this.writeNotes(validatedOutDir, notesTpl);
|
|
67
|
+
this.writeSchema(validatedOutDir, valuesSchema);
|
|
68
|
+
this.writeHelmIgnore(validatedOutDir);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Creates the necessary directory structure for the chart
|
|
72
|
+
*
|
|
73
|
+
* @private
|
|
74
|
+
* @param {string} outDir - Output directory path
|
|
75
|
+
* @throws {Error} If directories cannot be created
|
|
76
|
+
* @since 1.0.0
|
|
77
|
+
*/
|
|
78
|
+
static createDirectories(outDir) {
|
|
8
79
|
// eslint-disable-next-line security/detect-non-literal-fs-filename -- Chart writer needs dynamic paths
|
|
9
80
|
fs.mkdirSync(path.join(outDir, 'templates'), { recursive: true });
|
|
10
81
|
// Create crds directory only if needed later
|
|
11
|
-
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Writes the Chart.yaml file with chart metadata
|
|
85
|
+
*
|
|
86
|
+
* @private
|
|
87
|
+
* @param {string} outDir - Output directory path
|
|
88
|
+
* @param {HelmChartMeta} meta - Chart metadata
|
|
89
|
+
* @throws {Error} If Chart.yaml cannot be written
|
|
90
|
+
* @since 1.0.0
|
|
91
|
+
*/
|
|
92
|
+
static writeChartYaml(outDir, meta) {
|
|
12
93
|
const chartYaml = YAML.stringify({
|
|
13
94
|
apiVersion: 'v2',
|
|
14
95
|
name: meta.name,
|
|
@@ -26,40 +107,97 @@ export class HelmChartWriter {
|
|
|
26
107
|
});
|
|
27
108
|
// eslint-disable-next-line security/detect-non-literal-fs-filename -- Chart writer needs dynamic paths
|
|
28
109
|
fs.writeFileSync(path.join(outDir, 'Chart.yaml'), chartYaml);
|
|
29
|
-
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Writes values.yaml and environment-specific values files
|
|
113
|
+
*
|
|
114
|
+
* @private
|
|
115
|
+
* @param {string} outDir - Output directory path
|
|
116
|
+
* @param {Record<string, unknown>} defaultValues - Default values
|
|
117
|
+
* @param {EnvValuesMap} envValues - Environment-specific values
|
|
118
|
+
* @throws {Error} If values files cannot be written
|
|
119
|
+
* @since 1.0.0
|
|
120
|
+
*/
|
|
121
|
+
static writeValuesFiles(outDir, defaultValues, envValues) {
|
|
30
122
|
// eslint-disable-next-line security/detect-non-literal-fs-filename -- Chart writer needs dynamic paths
|
|
31
123
|
fs.writeFileSync(path.join(outDir, 'values.yaml'), YAML.stringify(defaultValues));
|
|
32
124
|
for (const [env, values] of Object.entries(envValues)) {
|
|
125
|
+
// Use centralized environment name sanitization
|
|
126
|
+
const sanitizedEnv = SecurityUtils.sanitizeEnvironmentName(env);
|
|
33
127
|
// eslint-disable-next-line security/detect-non-literal-fs-filename -- Chart writer needs dynamic paths
|
|
34
|
-
fs.writeFileSync(path.join(outDir, `values-${
|
|
128
|
+
fs.writeFileSync(path.join(outDir, `values-${sanitizedEnv}.yaml`), YAML.stringify(values));
|
|
35
129
|
}
|
|
36
|
-
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Writes Kubernetes manifest assets to templates directory
|
|
133
|
+
*
|
|
134
|
+
* @private
|
|
135
|
+
* @param {string} outDir - Output directory path
|
|
136
|
+
* @param {SynthAsset[]} assets - Kubernetes manifests to write
|
|
137
|
+
* @since 1.0.0
|
|
138
|
+
*/
|
|
139
|
+
static writeAssets(outDir, assets) {
|
|
37
140
|
writeAssets(outDir, assets);
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
if (notesTpl) {
|
|
54
|
-
// eslint-disable-next-line security/detect-non-literal-fs-filename -- Chart writer needs dynamic paths
|
|
55
|
-
fs.writeFileSync(path.join(outDir, 'templates', 'NOTES.txt'), notesTpl.endsWith('\n') ? notesTpl : notesTpl + '\n');
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Writes Helm template helpers to _helpers.tpl file
|
|
144
|
+
*
|
|
145
|
+
* @private
|
|
146
|
+
* @param {string} outDir - Output directory path
|
|
147
|
+
* @param {string | HelperDefinition[]} [helpersTpl] - Helpers content
|
|
148
|
+
* @since 1.0.0
|
|
149
|
+
*/
|
|
150
|
+
static writeHelpers(outDir, helpersTpl) {
|
|
151
|
+
if (!helpersTpl)
|
|
152
|
+
return;
|
|
153
|
+
let content = '';
|
|
154
|
+
if (typeof helpersTpl === 'string') {
|
|
155
|
+
content = helpersTpl.endsWith('\n') ? helpersTpl : helpersTpl + '\n';
|
|
56
156
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
157
|
+
else if (Array.isArray(helpersTpl)) {
|
|
158
|
+
content = helpersTpl
|
|
159
|
+
.map((h) => [`{{- define "${h.name}" -}}`, h.body.trimEnd(), '{{- end }}', ''].join('\n'))
|
|
160
|
+
.join('\n');
|
|
61
161
|
}
|
|
62
|
-
//
|
|
162
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- Chart writer needs dynamic paths
|
|
163
|
+
fs.writeFileSync(path.join(outDir, 'templates', '_helpers.tpl'), content);
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Writes NOTES.txt file for post-install instructions
|
|
167
|
+
*
|
|
168
|
+
* @private
|
|
169
|
+
* @param {string} outDir - Output directory path
|
|
170
|
+
* @param {string} [notesTpl] - Notes content
|
|
171
|
+
* @since 1.0.0
|
|
172
|
+
*/
|
|
173
|
+
static writeNotes(outDir, notesTpl) {
|
|
174
|
+
if (!notesTpl)
|
|
175
|
+
return;
|
|
176
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- Chart writer needs dynamic paths
|
|
177
|
+
fs.writeFileSync(path.join(outDir, 'templates', 'NOTES.txt'), notesTpl.endsWith('\n') ? notesTpl : notesTpl + '\n');
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Writes values.schema.json for values validation
|
|
181
|
+
*
|
|
182
|
+
* @private
|
|
183
|
+
* @param {string} outDir - Output directory path
|
|
184
|
+
* @param {Record<string, unknown>} [valuesSchema] - JSON schema
|
|
185
|
+
* @since 1.0.0
|
|
186
|
+
*/
|
|
187
|
+
static writeSchema(outDir, valuesSchema) {
|
|
188
|
+
if (!valuesSchema)
|
|
189
|
+
return;
|
|
190
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- Chart writer needs dynamic paths
|
|
191
|
+
fs.writeFileSync(path.join(outDir, 'values.schema.json'), JSON.stringify(valuesSchema, null, 2) + '\n');
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Writes .helmignore file with common ignore patterns
|
|
195
|
+
*
|
|
196
|
+
* @private
|
|
197
|
+
* @param {string} outDir - Output directory path
|
|
198
|
+
* @since 1.0.0
|
|
199
|
+
*/
|
|
200
|
+
static writeHelmIgnore(outDir) {
|
|
63
201
|
const helmIgnorePath = path.join(outDir, '.helmignore');
|
|
64
202
|
// eslint-disable-next-line security/detect-non-literal-fs-filename -- Chart writer needs dynamic paths
|
|
65
203
|
if (!fs.existsSync(helmIgnorePath)) {
|
|
@@ -90,35 +228,91 @@ export class HelmChartWriter {
|
|
|
90
228
|
}
|
|
91
229
|
}
|
|
92
230
|
}
|
|
231
|
+
/**
|
|
232
|
+
* Splits YAML string into individual documents
|
|
233
|
+
*
|
|
234
|
+
* @private
|
|
235
|
+
* @param {string} yamlStr - YAML string with potential document separators
|
|
236
|
+
* @returns {string[]} Array of individual YAML documents
|
|
237
|
+
* @since 1.0.0
|
|
238
|
+
*/
|
|
93
239
|
function splitDocs(yamlStr) {
|
|
94
240
|
return yamlStr
|
|
95
241
|
.split(/^---\s*$/m)
|
|
96
242
|
.map((p) => p.trim())
|
|
97
243
|
.filter((p) => p.length);
|
|
98
244
|
}
|
|
245
|
+
/**
|
|
246
|
+
* Writes all synthesized assets to the chart directory
|
|
247
|
+
*
|
|
248
|
+
* @private
|
|
249
|
+
* @param {string} outDir - Output directory path
|
|
250
|
+
* @param {SynthAsset[]} assets - Assets to write
|
|
251
|
+
* @throws {Error} If asset ID contains invalid characters
|
|
252
|
+
* @since 1.0.0
|
|
253
|
+
*/
|
|
99
254
|
function writeAssets(outDir, assets) {
|
|
100
255
|
for (const asset of assets) {
|
|
256
|
+
// Sanitize asset ID to prevent path traversal
|
|
257
|
+
const sanitizedId = asset.id.replace(/[^a-zA-Z0-9-_]/g, '');
|
|
258
|
+
if (sanitizedId !== asset.id) {
|
|
259
|
+
throw new Error(`Invalid asset ID: ${SecurityUtils.sanitizeLogMessage(asset.id)}`);
|
|
260
|
+
}
|
|
261
|
+
const targetDir = getTargetDirectory(asset.target);
|
|
101
262
|
if (asset.singleFile) {
|
|
102
|
-
|
|
103
|
-
const filename = `${asset.id}.yaml`;
|
|
104
|
-
const dir = asset.target === 'crds' ? 'crds' : 'templates';
|
|
105
|
-
// eslint-disable-next-line security/detect-non-literal-fs-filename -- Chart writer needs dynamic paths
|
|
106
|
-
fs.mkdirSync(path.join(outDir, dir), { recursive: true });
|
|
107
|
-
// eslint-disable-next-line security/detect-non-literal-fs-filename -- Chart writer needs dynamic paths
|
|
108
|
-
fs.writeFileSync(path.join(outDir, dir, filename), asset.yaml + '\n');
|
|
263
|
+
writeSingleAssetFile(outDir, targetDir, sanitizedId, asset.yaml);
|
|
109
264
|
}
|
|
110
265
|
else {
|
|
111
|
-
|
|
112
|
-
const parts = splitDocs(asset.yaml);
|
|
113
|
-
parts.forEach((doc, index) => {
|
|
114
|
-
const filename = `${asset.id}${parts.length > 1 ? `-${index + 1}` : ''}.yaml`;
|
|
115
|
-
const dir = asset.target === 'crds' ? 'crds' : 'templates';
|
|
116
|
-
// eslint-disable-next-line security/detect-non-literal-fs-filename -- Chart writer needs dynamic paths
|
|
117
|
-
fs.mkdirSync(path.join(outDir, dir), { recursive: true });
|
|
118
|
-
// eslint-disable-next-line security/detect-non-literal-fs-filename -- Chart writer needs dynamic paths
|
|
119
|
-
fs.writeFileSync(path.join(outDir, dir, filename), doc + '\n');
|
|
120
|
-
});
|
|
266
|
+
writeMultipleAssetFiles(outDir, targetDir, sanitizedId, asset.yaml);
|
|
121
267
|
}
|
|
122
268
|
}
|
|
123
269
|
}
|
|
270
|
+
/**
|
|
271
|
+
* Gets the target directory for an asset
|
|
272
|
+
*
|
|
273
|
+
* @private
|
|
274
|
+
* @param {('templates' | 'crds')} [target] - Target directory type
|
|
275
|
+
* @returns {string} Directory name
|
|
276
|
+
* @since 1.0.0
|
|
277
|
+
*/
|
|
278
|
+
function getTargetDirectory(target) {
|
|
279
|
+
return target === 'crds' ? 'crds' : 'templates';
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Writes a single asset file without document splitting
|
|
283
|
+
*
|
|
284
|
+
* @private
|
|
285
|
+
* @param {string} outDir - Output directory path
|
|
286
|
+
* @param {string} targetDir - Target subdirectory
|
|
287
|
+
* @param {string} assetId - Asset identifier
|
|
288
|
+
* @param {string} yaml - YAML content
|
|
289
|
+
* @since 1.0.0
|
|
290
|
+
*/
|
|
291
|
+
function writeSingleAssetFile(outDir, targetDir, assetId, yaml) {
|
|
292
|
+
const filename = `${assetId}.yaml`;
|
|
293
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- Chart writer needs dynamic paths
|
|
294
|
+
fs.mkdirSync(path.join(outDir, targetDir), { recursive: true });
|
|
295
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- Chart writer needs dynamic paths
|
|
296
|
+
fs.writeFileSync(path.join(outDir, targetDir, filename), yaml + '\n');
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Writes multiple asset files by splitting YAML documents
|
|
300
|
+
*
|
|
301
|
+
* @private
|
|
302
|
+
* @param {string} outDir - Output directory path
|
|
303
|
+
* @param {string} targetDir - Target subdirectory
|
|
304
|
+
* @param {string} assetId - Asset identifier
|
|
305
|
+
* @param {string} yaml - YAML content with potential multiple documents
|
|
306
|
+
* @since 1.0.0
|
|
307
|
+
*/
|
|
308
|
+
function writeMultipleAssetFiles(outDir, targetDir, assetId, yaml) {
|
|
309
|
+
const parts = splitDocs(yaml);
|
|
310
|
+
parts.forEach((doc, index) => {
|
|
311
|
+
const filename = `${assetId}${parts.length > 1 ? `-${index + 1}` : ''}.yaml`;
|
|
312
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- Chart writer needs dynamic paths
|
|
313
|
+
fs.mkdirSync(path.join(outDir, targetDir), { recursive: true });
|
|
314
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- Chart writer needs dynamic paths
|
|
315
|
+
fs.writeFileSync(path.join(outDir, targetDir, filename), doc + '\n');
|
|
316
|
+
});
|
|
317
|
+
}
|
|
124
318
|
//# sourceMappingURL=HelmChartWriter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HelmChartWriter.js","sourceRoot":"","sources":["../../src/lib/HelmChartWriter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"HelmChartWriter.js","sourceRoot":"","sources":["../../src/lib/HelmChartWriter.ts"],"names":[],"mappings":"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"}
|