k6ctl 1.0.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 (86) hide show
  1. package/.github/workflows/ci.yml +61 -0
  2. package/README.md +45 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +28 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/list.d.ts +4 -0
  8. package/dist/commands/list.d.ts.map +1 -0
  9. package/dist/commands/list.js +35 -0
  10. package/dist/commands/list.js.map +1 -0
  11. package/dist/commands/run.d.ts +9 -0
  12. package/dist/commands/run.d.ts.map +1 -0
  13. package/dist/commands/run.js +76 -0
  14. package/dist/commands/run.js.map +1 -0
  15. package/dist/services/kubernetes.service.d.ts +20 -0
  16. package/dist/services/kubernetes.service.d.ts.map +1 -0
  17. package/dist/services/kubernetes.service.js +278 -0
  18. package/dist/services/kubernetes.service.js.map +1 -0
  19. package/dist/services/script.service.d.ts +8 -0
  20. package/dist/services/script.service.d.ts.map +1 -0
  21. package/dist/services/script.service.js +82 -0
  22. package/dist/services/script.service.js.map +1 -0
  23. package/dist/types/config.types.d.ts +26 -0
  24. package/dist/types/config.types.d.ts.map +1 -0
  25. package/dist/types/config.types.js +3 -0
  26. package/dist/types/config.types.js.map +1 -0
  27. package/dist/types/kubernetes.types.d.ts +9 -0
  28. package/dist/types/kubernetes.types.d.ts.map +1 -0
  29. package/dist/types/kubernetes.types.js +3 -0
  30. package/dist/types/kubernetes.types.js.map +1 -0
  31. package/dist/types/script.types.d.ts +11 -0
  32. package/dist/types/script.types.d.ts.map +1 -0
  33. package/dist/types/script.types.js +3 -0
  34. package/dist/types/script.types.js.map +1 -0
  35. package/dist/types/testRunManifest.types.d.ts +43 -0
  36. package/dist/types/testRunManifest.types.d.ts.map +1 -0
  37. package/dist/types/testRunManifest.types.js +3 -0
  38. package/dist/types/testRunManifest.types.js.map +1 -0
  39. package/dist/utils/configLoader.d.ts +30 -0
  40. package/dist/utils/configLoader.d.ts.map +1 -0
  41. package/dist/utils/configLoader.js +63 -0
  42. package/dist/utils/configLoader.js.map +1 -0
  43. package/dist/utils/env.d.ts +17 -0
  44. package/dist/utils/env.d.ts.map +1 -0
  45. package/dist/utils/env.js +111 -0
  46. package/dist/utils/env.js.map +1 -0
  47. package/dist/utils/logger.d.ts +4 -0
  48. package/dist/utils/logger.d.ts.map +1 -0
  49. package/dist/utils/logger.js +16 -0
  50. package/dist/utils/logger.js.map +1 -0
  51. package/dist/utils/table.util.d.ts +10 -0
  52. package/dist/utils/table.util.d.ts.map +1 -0
  53. package/dist/utils/table.util.js +24 -0
  54. package/dist/utils/table.util.js.map +1 -0
  55. package/dist/utils/testRunManifestBuilder.d.ts +5 -0
  56. package/dist/utils/testRunManifestBuilder.d.ts.map +1 -0
  57. package/dist/utils/testRunManifestBuilder.js +89 -0
  58. package/dist/utils/testRunManifestBuilder.js.map +1 -0
  59. package/package.json +44 -0
  60. package/src/cli.ts +31 -0
  61. package/src/commands/list.ts +29 -0
  62. package/src/commands/run.ts +52 -0
  63. package/src/services/kubernetes.service.ts +238 -0
  64. package/src/services/script.service.ts +79 -0
  65. package/src/types/config.types.ts +25 -0
  66. package/src/types/kubernetes.types.ts +9 -0
  67. package/src/types/script.types.ts +8 -0
  68. package/src/types/testRunManifest.types.ts +42 -0
  69. package/src/utils/configLoader.ts +63 -0
  70. package/src/utils/env.ts +90 -0
  71. package/src/utils/logger.ts +17 -0
  72. package/src/utils/table.util.ts +23 -0
  73. package/src/utils/testRunManifestBuilder.ts +102 -0
  74. package/test/integration/env.test.ts +33 -0
  75. package/test/integration/kubernetes.service.test.ts +70 -0
  76. package/test/integration/script.service.test.ts +64 -0
  77. package/test/jest.config.integration.js +20 -0
  78. package/test/jest.config.unit.js +14 -0
  79. package/test/samples/data_sample_1.csv +4 -0
  80. package/test/samples/k6_script_sample_1.js +9 -0
  81. package/test/samples/k6_script_sample_2.js +18 -0
  82. package/test/unit/configLoader.test.ts +53 -0
  83. package/test/unit/env.test.ts +1029 -0
  84. package/test/unit/kubernetes.service.test.ts +197 -0
  85. package/test/unit/script.service.test.ts +112 -0
  86. package/tsconfig.json +20 -0
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ScriptService = void 0;
7
+ exports.createDefaultScriptService = createDefaultScriptService;
8
+ const child_process_1 = require("child_process");
9
+ const fs_1 = require("fs");
10
+ const node_path_1 = require("node:path");
11
+ const util_1 = require("util");
12
+ const logger_1 = __importDefault(require("../utils/logger"));
13
+ const defaultExecAsync = (0, util_1.promisify)(child_process_1.exec);
14
+ class ScriptService {
15
+ execCmd;
16
+ constructor(execCmd = defaultExecAsync) {
17
+ this.execCmd = execCmd;
18
+ }
19
+ async archiveTest(scriptPath, outputDirectory) {
20
+ // Check if the script file exists
21
+ if (!(0, fs_1.existsSync)(scriptPath))
22
+ throw new Error(`Script file not found at path: ${scriptPath}`);
23
+ if (outputDirectory) {
24
+ // Check if the output directory exists
25
+ if (!(0, fs_1.existsSync)(outputDirectory)) {
26
+ throw new Error(`Output directory does not exist at path: ${outputDirectory}`);
27
+ }
28
+ }
29
+ // Check if k6 is installed
30
+ try {
31
+ await this.execCmd('k6 version');
32
+ }
33
+ catch {
34
+ throw new Error('k6 is not installed. Please install k6 to archive scripts.');
35
+ }
36
+ // Archive the script using k6
37
+ try {
38
+ // Get the script name without extension to use as prefix for the archive file
39
+ const scriptName = (0, node_path_1.parse)(scriptPath).name;
40
+ const sanitizedScriptName = sanitizeText(scriptName);
41
+ const archiveOutput = (0, node_path_1.join)(outputDirectory ?? '.', `archive-${sanitizedScriptName}-${Date.now()}.tar`);
42
+ const archiveCommand = `k6 archive -v -O ${archiveOutput} ${scriptPath}`;
43
+ logger_1.default.debug(`Archiving script with command: ${archiveCommand}`);
44
+ const { stdout, stderr } = await this.execCmd(archiveCommand);
45
+ logger_1.default.debug(`Standard Output: ${stdout}`);
46
+ logger_1.default.debug(`Standard Error: ${stderr}`);
47
+ // Check if the file was created successfully
48
+ if (!(0, fs_1.existsSync)(archiveOutput)) {
49
+ throw new Error(`Failed to create archive: ${stderr}`);
50
+ }
51
+ logger_1.default.info(`Archive created successfully at: ${archiveOutput}`);
52
+ return {
53
+ archivePath: archiveOutput,
54
+ archiveFilename: (0, node_path_1.basename)(archiveOutput),
55
+ scriptPath: scriptPath,
56
+ scriptFilename: (0, node_path_1.basename)(scriptPath),
57
+ };
58
+ }
59
+ catch (error) {
60
+ const errorMessage = error.message ?? 'Unknown error';
61
+ throw new Error(`Failed to archive the script: ${errorMessage}`);
62
+ }
63
+ }
64
+ }
65
+ exports.ScriptService = ScriptService;
66
+ function createDefaultScriptService() {
67
+ return new ScriptService();
68
+ }
69
+ // ---------------------------------------------------------------------------
70
+ // Private helpers
71
+ // ---------------------------------------------------------------------------
72
+ function sanitizeText(text) {
73
+ let sanitized = text.toLowerCase();
74
+ sanitized = sanitized.replace(/_/g, '-');
75
+ sanitized = sanitized.replace(/[^a-z0-9.-]/g, '-');
76
+ sanitized = sanitized.replace(/^[^a-z0-9]+|[^a-z0-9]+$/g, '');
77
+ sanitized = sanitized.replace(/[-]+/g, '-');
78
+ sanitized = sanitized.replace(/[.]+/g, '-');
79
+ sanitized = sanitized.replace(/^[.-]+|[.-]+$/g, '');
80
+ return sanitized;
81
+ }
82
+ //# sourceMappingURL=script.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script.service.js","sourceRoot":"","sources":["../../src/services/script.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export interface K6Config {
2
+ namespace?: string;
3
+ parallelism?: number;
4
+ arguments?: string[] | undefined;
5
+ cleanup?: boolean;
6
+ quiet?: boolean;
7
+ separate?: boolean;
8
+ runner?: {
9
+ image?: string;
10
+ resources?: {
11
+ limits: {
12
+ cpu: string;
13
+ memory: string;
14
+ };
15
+ requests: {
16
+ cpu: string;
17
+ memory: string;
18
+ };
19
+ };
20
+ };
21
+ prometheus?: {
22
+ serverUrl: string;
23
+ trendStats?: string[];
24
+ };
25
+ }
26
+ //# sourceMappingURL=config.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.types.d.ts","sourceRoot":"","sources":["../../src/types/config.types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE;YACV,MAAM,EAAE;gBACN,GAAG,EAAE,MAAM,CAAC;gBACZ,MAAM,EAAE,MAAM,CAAC;aAChB,CAAC;YACF,QAAQ,EAAE;gBACR,GAAG,EAAE,MAAM,CAAC;gBACZ,MAAM,EAAE,MAAM,CAAC;aAChB,CAAC;SACH,CAAC;KACH,CAAA;IACD,UAAU,CAAC,EAAE;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;KACvB,CAAA;CACF"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=config.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.types.js","sourceRoot":"","sources":["../../src/types/config.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ export interface ArchivedFile {
2
+ archivePath: string;
3
+ archiveFilename: string;
4
+ }
5
+ export interface ConfigMapResult {
6
+ namespace: string;
7
+ configMapName: string;
8
+ }
9
+ //# sourceMappingURL=kubernetes.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kubernetes.types.d.ts","sourceRoot":"","sources":["../../src/types/kubernetes.types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=kubernetes.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kubernetes.types.js","sourceRoot":"","sources":["../../src/types/kubernetes.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ export interface ArchiveResult {
2
+ archivePath: string;
3
+ archiveFilename: string;
4
+ scriptPath: string;
5
+ scriptFilename: string;
6
+ }
7
+ export type ExecFn = (cmd: string) => Promise<{
8
+ stdout: string;
9
+ stderr: string;
10
+ }>;
11
+ //# sourceMappingURL=script.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script.types.d.ts","sourceRoot":"","sources":["../../src/types/script.types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=script.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script.types.js","sourceRoot":"","sources":["../../src/types/script.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,43 @@
1
+ export interface TestRunManifest {
2
+ apiVersion: string;
3
+ kind: string;
4
+ metadata: {
5
+ name: string;
6
+ namespace: string;
7
+ };
8
+ spec: {
9
+ parallelism?: number;
10
+ arguments?: string;
11
+ quiet?: string;
12
+ cleanup?: string;
13
+ separate?: boolean;
14
+ runner?: {
15
+ image?: string;
16
+ env?: Array<{
17
+ name: string;
18
+ value: string;
19
+ }>;
20
+ resources?: {
21
+ limits: {
22
+ cpu: string;
23
+ memory: string;
24
+ };
25
+ requests: {
26
+ cpu: string;
27
+ memory: string;
28
+ };
29
+ };
30
+ };
31
+ script: {
32
+ configMap?: {
33
+ name: string;
34
+ file: string;
35
+ };
36
+ volumeClaim?: {
37
+ name: string;
38
+ file: string;
39
+ };
40
+ };
41
+ };
42
+ }
43
+ //# sourceMappingURL=testRunManifest.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testRunManifest.types.d.ts","sourceRoot":"","sources":["../../src/types/testRunManifest.types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,IAAI,EAAE;QACJ,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,MAAM,CAAC,EAAE;YACP,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,GAAG,CAAC,EAAE,KAAK,CAAC;gBACV,IAAI,EAAE,MAAM,CAAC;gBACb,KAAK,EAAE,MAAM,CAAC;aACf,CAAC,CAAC;YACH,SAAS,CAAC,EAAE;gBACV,MAAM,EAAE;oBACN,GAAG,EAAE,MAAM,CAAA;oBACX,MAAM,EAAE,MAAM,CAAA;iBACf,CAAA;gBACD,QAAQ,EAAE;oBACR,GAAG,EAAE,MAAM,CAAA;oBACX,MAAM,EAAE,MAAM,CAAA;iBACf,CAAA;aACF,CAAA;SACF,CAAC;QACF,MAAM,EAAE;YACN,SAAS,CAAC,EAAE;gBACV,IAAI,EAAE,MAAM,CAAC;gBACb,IAAI,EAAE,MAAM,CAAC;aACd,CAAC;YACF,WAAW,CAAC,EAAE;gBACZ,IAAI,EAAE,MAAM,CAAC;gBACb,IAAI,EAAE,MAAM,CAAC;aACd,CAAA;SACF,CAAC;KACH,CAAC;CACH"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=testRunManifest.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testRunManifest.types.js","sourceRoot":"","sources":["../../src/types/testRunManifest.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,30 @@
1
+ import { z } from "zod";
2
+ declare const K6ConfigSchema: z.ZodObject<{
3
+ namespace: z.ZodDefault<z.ZodString>;
4
+ parallelism: z.ZodDefault<z.ZodNumber>;
5
+ arguments: z.ZodOptional<z.ZodArray<z.ZodString>>;
6
+ cleanup: z.ZodDefault<z.ZodBoolean>;
7
+ quiet: z.ZodDefault<z.ZodBoolean>;
8
+ separate: z.ZodDefault<z.ZodBoolean>;
9
+ runner: z.ZodDefault<z.ZodObject<{
10
+ image: z.ZodString;
11
+ resources: z.ZodOptional<z.ZodObject<{
12
+ limits: z.ZodObject<{
13
+ cpu: z.ZodString;
14
+ memory: z.ZodString;
15
+ }, z.core.$strip>;
16
+ requests: z.ZodObject<{
17
+ cpu: z.ZodString;
18
+ memory: z.ZodString;
19
+ }, z.core.$strip>;
20
+ }, z.core.$strip>>;
21
+ }, z.core.$strip>>;
22
+ prometheus: z.ZodOptional<z.ZodObject<{
23
+ serverUrl: z.ZodString;
24
+ trendStats: z.ZodDefault<z.ZodArray<z.ZodString>>;
25
+ }, z.core.$strip>>;
26
+ }, z.core.$strip>;
27
+ export type K6ConfigParsed = z.infer<typeof K6ConfigSchema>;
28
+ export declare function loadK6Config(path?: string): K6ConfigParsed;
29
+ export {};
30
+ //# sourceMappingURL=configLoader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configLoader.d.ts","sourceRoot":"","sources":["../../src/utils/configLoader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAiCxB,QAAA,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;iBAWlB,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAE5D,wBAAgB,YAAY,CAAC,IAAI,SAAsB,GAAG,cAAc,CAcvE"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.loadK6Config = loadK6Config;
7
+ const zod_1 = require("zod");
8
+ const node_fs_1 = require("node:fs");
9
+ const logger_1 = __importDefault(require("./logger"));
10
+ const BASE_IMAGE = "grafana/k6:latest";
11
+ const DEFAULT_NAMESPACE = "default";
12
+ const DEFAULT_CONFIG_PATH = "k6ctl.config.json";
13
+ const PROMETHEUS_DEFAULT_TREND_STATS = ["avg", "p(95)", "p(99)", "min", "max"];
14
+ const ResourcesSchema = zod_1.z.object({
15
+ limits: zod_1.z.object({
16
+ cpu: zod_1.z.string(),
17
+ memory: zod_1.z.string(),
18
+ }),
19
+ requests: zod_1.z.object({
20
+ cpu: zod_1.z.string(),
21
+ memory: zod_1.z.string(),
22
+ }),
23
+ });
24
+ const RunnerSchema = zod_1.z
25
+ .object({
26
+ image: zod_1.z.string(),
27
+ resources: ResourcesSchema.optional(),
28
+ })
29
+ .default({ image: BASE_IMAGE });
30
+ const PrometheusSchema = zod_1.z
31
+ .object({
32
+ serverUrl: zod_1.z.string(),
33
+ trendStats: zod_1.z.array(zod_1.z.string()).default(PROMETHEUS_DEFAULT_TREND_STATS),
34
+ });
35
+ const K6ConfigSchema = zod_1.z.object({
36
+ namespace: zod_1.z.string().default(DEFAULT_NAMESPACE),
37
+ parallelism: zod_1.z.number().int().positive().default(1),
38
+ arguments: zod_1.z
39
+ .array(zod_1.z.string())
40
+ .optional(),
41
+ cleanup: zod_1.z.boolean().default(false),
42
+ quiet: zod_1.z.boolean().default(true),
43
+ separate: zod_1.z.boolean().default(false),
44
+ runner: RunnerSchema,
45
+ prometheus: PrometheusSchema.optional(),
46
+ });
47
+ function loadK6Config(path = DEFAULT_CONFIG_PATH) {
48
+ if (!(0, node_fs_1.existsSync)(path)) {
49
+ logger_1.default.warn(`Config file '${path}' doesn't exist, using default values.`);
50
+ return K6ConfigSchema.parse({});
51
+ }
52
+ const raw = (0, node_fs_1.readFileSync)(path, "utf-8");
53
+ let obj;
54
+ try {
55
+ obj = JSON.parse(raw);
56
+ }
57
+ catch (e) {
58
+ throw new Error(`Config file '${path}' exists but is not valid JSON: ${e.message}`);
59
+ }
60
+ logger_1.default.info(`Loaded config from '${path}'`);
61
+ return K6ConfigSchema.parse(obj);
62
+ }
63
+ //# sourceMappingURL=configLoader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configLoader.js","sourceRoot":"","sources":["../../src/utils/configLoader.ts"],"names":[],"mappings":";;;;;AAgDA,oCAcC;AA9DD,6BAAwB;AACxB,qCAAmD;AACnD,sDAA8B;AAE9B,MAAM,UAAU,GAAG,mBAAmB,CAAC;AACvC,MAAM,iBAAiB,GAAG,SAAS,CAAC;AACpC,MAAM,mBAAmB,GAAG,mBAAmB,CAAC;AAChD,MAAM,8BAA8B,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAE/E,MAAM,eAAe,GAAG,OAAC,CAAC,MAAM,CAAC;IAC7B,MAAM,EAAE,OAAC,CAAC,MAAM,CAAC;QACb,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE;QACf,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE;KACrB,CAAC;IACF,QAAQ,EAAE,OAAC,CAAC,MAAM,CAAC;QACf,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE;QACf,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE;KACrB,CAAC;CACL,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,OAAC;KACjB,MAAM,CAAC;IACJ,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE;IACjB,SAAS,EAAE,eAAe,CAAC,QAAQ,EAAE;CACxC,CAAC;KACD,OAAO,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;AAEpC,MAAM,gBAAgB,GAAG,OAAC;KACrB,MAAM,CAAC;IACJ,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE;IACrB,UAAU,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,8BAA8B,CAAC;CAC1E,CAAC,CAAC;AAEP,MAAM,cAAc,GAAG,OAAC,CAAC,MAAM,CAAC;IAC5B,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC;IAChD,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACnD,SAAS,EAAE,OAAC;SACP,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;IACf,OAAO,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACnC,KAAK,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAChC,QAAQ,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACpC,MAAM,EAAE,YAAY;IACpB,UAAU,EAAE,gBAAgB,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAC;AAIH,SAAgB,YAAY,CAAC,IAAI,GAAG,mBAAmB;IACnD,IAAI,CAAC,IAAA,oBAAU,EAAC,IAAI,CAAC,EAAE,CAAC;QACpB,gBAAM,CAAC,IAAI,CAAC,gBAAgB,IAAI,wCAAwC,CAAC,CAAC;QAC1E,OAAO,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC;IACD,MAAM,GAAG,GAAG,IAAA,sBAAY,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACxC,IAAI,GAAY,CAAC;IACjB,IAAI,CAAC;QACD,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,mCAAoC,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;IACnG,CAAC;IACD,gBAAM,CAAC,IAAI,CAAC,uBAAuB,IAAI,GAAG,CAAC,CAAC;IAC5C,OAAO,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACrC,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Configura tus patrones de validación aquí
3
+ */
4
+ declare const DEFAULT_RULES: {
5
+ keyPattern: RegExp;
6
+ valuePattern: RegExp;
7
+ };
8
+ type Rules = typeof DEFAULT_RULES;
9
+ /**
10
+ * Lee y valida un archivo .env
11
+ * @param envFilePath - Ruta del archivo .env a cargar
12
+ * @param rules - Reglas de validación personalizadas (opcional)
13
+ * @returns Objeto con las variables de entorno validadas
14
+ */
15
+ export declare function loadAndValidateEnv(envFilePath?: string, rules?: Rules): Record<string, string>;
16
+ export {};
17
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,QAAA,MAAM,aAAa;;;CAMlB,CAAC;AAEF,KAAK,KAAK,GAAG,OAAO,aAAa,CAAC;AAElC;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,GAAE,MAAe,EAC5B,KAAK,GAAE,KAAqB,GAC3B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA8DxB"}
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.loadAndValidateEnv = loadAndValidateEnv;
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ const dotenv_1 = require("dotenv");
43
+ const logger_1 = __importDefault(require("./logger"));
44
+ /**
45
+ * Configura tus patrones de validación aquí
46
+ */
47
+ const DEFAULT_RULES = {
48
+ // Valida nombres tipo ENV clásico: MAYUSCULAS_NUMEROS_GUIONBAJO
49
+ keyPattern: /^[A-Z][A-Z0-9_]*$/,
50
+ // Valores permitidos: ASCII imprimible (no control chars). Permite espacios.
51
+ valuePattern: /^[\x20-\x7E]*$/,
52
+ };
53
+ /**
54
+ * Lee y valida un archivo .env
55
+ * @param envFilePath - Ruta del archivo .env a cargar
56
+ * @param rules - Reglas de validación personalizadas (opcional)
57
+ * @returns Objeto con las variables de entorno validadas
58
+ */
59
+ function loadAndValidateEnv(envFilePath = ".env", rules = DEFAULT_RULES) {
60
+ const errors = [];
61
+ const result = {};
62
+ // Validar que el archivo existe
63
+ const absolutePath = path.isAbsolute(envFilePath)
64
+ ? envFilePath
65
+ : path.resolve(process.cwd(), envFilePath);
66
+ if (!fs.existsSync(absolutePath)) {
67
+ throw new Error(`Archivo .env no encontrado: ${absolutePath}`);
68
+ }
69
+ logger_1.default.debug(`Loading .env file from: ${absolutePath}`);
70
+ // Leer el archivo .env
71
+ let fileContent;
72
+ try {
73
+ fileContent = fs.readFileSync(absolutePath, "utf-8");
74
+ }
75
+ catch (error) {
76
+ throw new Error(`Error al leer el archivo .env: ${error instanceof Error ? error.message : String(error)}`);
77
+ }
78
+ // Parsear el contenido del archivo .env
79
+ let envVars;
80
+ try {
81
+ envVars = (0, dotenv_1.parse)(fileContent);
82
+ }
83
+ catch (error) {
84
+ throw new Error(`Error al parsear el archivo .env: ${error instanceof Error ? error.message : String(error)}`);
85
+ }
86
+ // Validar cada variable
87
+ for (const [key, val] of Object.entries(envVars)) {
88
+ // Validar nombre de la variable
89
+ if (!rules.keyPattern.test(key)) {
90
+ errors.push(`Nombre inválido: "${key}" (no cumple el patrón ${rules.keyPattern})`);
91
+ continue;
92
+ }
93
+ // Validar que el valor no esté vacío
94
+ if (val == null || val === "") {
95
+ errors.push(`Variable "${key}" no tiene valor`);
96
+ continue;
97
+ }
98
+ // Validar caracteres del valor
99
+ if (!rules.valuePattern.test(val)) {
100
+ errors.push(`Valor inválido en "${key}" (contiene caracteres no permitidos)`);
101
+ continue;
102
+ }
103
+ result[key] = val;
104
+ }
105
+ if (errors.length > 0) {
106
+ throw new Error("Errores en variables de ambiente:\n" + errors.map(e => `- ${e}`).join("\n"));
107
+ }
108
+ logger_1.default.info(`Loaded ${Object.keys(result).length} environment variable(s) from '${absolutePath}'`);
109
+ return result;
110
+ }
111
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ declare const logger: import("winston").Logger;
2
+ export declare function setLogLevel(level: string): void;
3
+ export default logger;
4
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAMA,QAAA,MAAM,MAAM,0BAIV,CAAC;AAEH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED,eAAe,MAAM,CAAC"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setLogLevel = setLogLevel;
4
+ const winston_1 = require("winston");
5
+ const { combine, colorize, printf, timestamp } = winston_1.format;
6
+ const logFormat = printf(({ level, message }) => `${level}: ${message}`);
7
+ const logger = (0, winston_1.createLogger)({
8
+ level: process.env.LOG_LEVEL ?? 'info',
9
+ format: combine(colorize(), logFormat),
10
+ transports: [new winston_1.transports.Console()],
11
+ });
12
+ function setLogLevel(level) {
13
+ logger.level = level;
14
+ }
15
+ exports.default = logger;
16
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":";;AAYA,kCAEC;AAdD,qCAA2D;AAE3D,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,gBAAM,CAAC;AAExD,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,KAAK,OAAO,EAAE,CAAC,CAAC;AAEzE,MAAM,MAAM,GAAG,IAAA,sBAAY,EAAC;IAC1B,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM;IACtC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,SAAS,CAAC;IACtC,UAAU,EAAE,CAAC,IAAI,oBAAU,CAAC,OAAO,EAAE,CAAC;CACvC,CAAC,CAAC;AAEH,SAAgB,WAAW,CAAC,KAAa;IACvC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;AACvB,CAAC;AAED,kBAAe,MAAM,CAAC"}
@@ -0,0 +1,10 @@
1
+ type TablePrinterOptions<T> = {
2
+ title?: string;
3
+ headers: string[];
4
+ items: T[];
5
+ toRows: (item: T) => Array<(string | number)[]>;
6
+ footer?: string;
7
+ };
8
+ export declare function printTableGeneric<T>(opts: TablePrinterOptions<T>): void;
9
+ export {};
10
+ //# sourceMappingURL=table.util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.util.d.ts","sourceRoot":"","sources":["../../src/utils/table.util.ts"],"names":[],"mappings":"AAEA,KAAK,mBAAmB,CAAC,CAAC,IAAI;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,IAAI,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI,CAYvE"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.printTableGeneric = printTableGeneric;
7
+ const cli_table3_1 = __importDefault(require("cli-table3"));
8
+ function printTableGeneric(opts) {
9
+ const table = new cli_table3_1.default({
10
+ head: opts.headers,
11
+ wordWrap: true,
12
+ });
13
+ for (const item of opts.items) {
14
+ const rows = opts.toRows(item);
15
+ for (const row of rows)
16
+ table.push(row);
17
+ }
18
+ if (opts.title)
19
+ console.log(opts.title);
20
+ console.log(table.toString());
21
+ if (opts.footer)
22
+ console.log(opts.footer);
23
+ }
24
+ //# sourceMappingURL=table.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.util.js","sourceRoot":"","sources":["../../src/utils/table.util.ts"],"names":[],"mappings":";;;;;AAUA,8CAYC;AAtBD,4DAA+B;AAU/B,SAAgB,iBAAiB,CAAI,IAA4B;IAC7D,MAAM,KAAK,GAAG,IAAI,oBAAK,CAAC;QACpB,IAAI,EAAE,IAAI,CAAC,OAAO;QAClB,QAAQ,EAAE,IAAI;KACjB,CAAC,CAAC;IACH,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC/B,KAAK,MAAM,GAAG,IAAI,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,IAAI,CAAC,KAAK;QAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC9B,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { ArchivedFile, ConfigMapResult } from '../types/kubernetes.types';
2
+ import { K6Config } from '../types/config.types';
3
+ import { TestRunManifest } from '../types/testRunManifest.types';
4
+ export declare function buildTestRunManifest(configMapResult: ConfigMapResult, archiveOutput: ArchivedFile, cfg: K6Config, envFromLoader?: Record<string, string>): TestRunManifest;
5
+ //# sourceMappingURL=testRunManifestBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testRunManifestBuilder.d.ts","sourceRoot":"","sources":["../../src/utils/testRunManifestBuilder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAajE,wBAAgB,oBAAoB,CAChC,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,YAAY,EAC3B,GAAG,EAAE,QAAQ,EACb,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACvC,eAAe,CAoCjB"}