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.
- package/.github/workflows/ci.yml +61 -0
- package/README.md +45 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +28 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/list.d.ts +4 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +35 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/run.d.ts +9 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +76 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/services/kubernetes.service.d.ts +20 -0
- package/dist/services/kubernetes.service.d.ts.map +1 -0
- package/dist/services/kubernetes.service.js +278 -0
- package/dist/services/kubernetes.service.js.map +1 -0
- package/dist/services/script.service.d.ts +8 -0
- package/dist/services/script.service.d.ts.map +1 -0
- package/dist/services/script.service.js +82 -0
- package/dist/services/script.service.js.map +1 -0
- package/dist/types/config.types.d.ts +26 -0
- package/dist/types/config.types.d.ts.map +1 -0
- package/dist/types/config.types.js +3 -0
- package/dist/types/config.types.js.map +1 -0
- package/dist/types/kubernetes.types.d.ts +9 -0
- package/dist/types/kubernetes.types.d.ts.map +1 -0
- package/dist/types/kubernetes.types.js +3 -0
- package/dist/types/kubernetes.types.js.map +1 -0
- package/dist/types/script.types.d.ts +11 -0
- package/dist/types/script.types.d.ts.map +1 -0
- package/dist/types/script.types.js +3 -0
- package/dist/types/script.types.js.map +1 -0
- package/dist/types/testRunManifest.types.d.ts +43 -0
- package/dist/types/testRunManifest.types.d.ts.map +1 -0
- package/dist/types/testRunManifest.types.js +3 -0
- package/dist/types/testRunManifest.types.js.map +1 -0
- package/dist/utils/configLoader.d.ts +30 -0
- package/dist/utils/configLoader.d.ts.map +1 -0
- package/dist/utils/configLoader.js +63 -0
- package/dist/utils/configLoader.js.map +1 -0
- package/dist/utils/env.d.ts +17 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/env.js +111 -0
- package/dist/utils/env.js.map +1 -0
- package/dist/utils/logger.d.ts +4 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +16 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/table.util.d.ts +10 -0
- package/dist/utils/table.util.d.ts.map +1 -0
- package/dist/utils/table.util.js +24 -0
- package/dist/utils/table.util.js.map +1 -0
- package/dist/utils/testRunManifestBuilder.d.ts +5 -0
- package/dist/utils/testRunManifestBuilder.d.ts.map +1 -0
- package/dist/utils/testRunManifestBuilder.js +89 -0
- package/dist/utils/testRunManifestBuilder.js.map +1 -0
- package/package.json +44 -0
- package/src/cli.ts +31 -0
- package/src/commands/list.ts +29 -0
- package/src/commands/run.ts +52 -0
- package/src/services/kubernetes.service.ts +238 -0
- package/src/services/script.service.ts +79 -0
- package/src/types/config.types.ts +25 -0
- package/src/types/kubernetes.types.ts +9 -0
- package/src/types/script.types.ts +8 -0
- package/src/types/testRunManifest.types.ts +42 -0
- package/src/utils/configLoader.ts +63 -0
- package/src/utils/env.ts +90 -0
- package/src/utils/logger.ts +17 -0
- package/src/utils/table.util.ts +23 -0
- package/src/utils/testRunManifestBuilder.ts +102 -0
- package/test/integration/env.test.ts +33 -0
- package/test/integration/kubernetes.service.test.ts +70 -0
- package/test/integration/script.service.test.ts +64 -0
- package/test/jest.config.integration.js +20 -0
- package/test/jest.config.unit.js +14 -0
- package/test/samples/data_sample_1.csv +4 -0
- package/test/samples/k6_script_sample_1.js +9 -0
- package/test/samples/k6_script_sample_2.js +18 -0
- package/test/unit/configLoader.test.ts +53 -0
- package/test/unit/env.test.ts +1029 -0
- package/test/unit/kubernetes.service.test.ts +197 -0
- package/test/unit/script.service.test.ts +112 -0
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"config.types.js","sourceRoot":"","sources":["../../src/types/config.types.ts"],"names":[],"mappings":""}
|
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|