k6-cucumber-steps 1.2.26 → 2.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 (116) hide show
  1. package/README.md +190 -177
  2. package/dist/cli.d.ts +3 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +72 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/commands/init.command.d.ts +4 -0
  7. package/dist/commands/init.command.d.ts.map +1 -0
  8. package/dist/commands/init.command.js +30 -0
  9. package/dist/commands/init.command.js.map +1 -0
  10. package/dist/generators/feature.parser.d.ts +12 -0
  11. package/dist/generators/feature.parser.d.ts.map +1 -0
  12. package/dist/generators/feature.parser.js +208 -0
  13. package/dist/generators/feature.parser.js.map +1 -0
  14. package/dist/generators/k6-script.generator.d.ts +11 -0
  15. package/dist/generators/k6-script.generator.d.ts.map +1 -0
  16. package/dist/generators/k6-script.generator.js +233 -0
  17. package/dist/generators/k6-script.generator.js.map +1 -0
  18. package/dist/generators/project.generator.d.ts +14 -0
  19. package/dist/generators/project.generator.d.ts.map +1 -0
  20. package/dist/generators/project.generator.js +497 -0
  21. package/dist/generators/project.generator.js.map +1 -0
  22. package/dist/index.d.ts +24 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +53 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/runners/k6.runner.d.ts +19 -0
  27. package/dist/runners/k6.runner.d.ts.map +1 -0
  28. package/dist/runners/k6.runner.js +127 -0
  29. package/dist/runners/k6.runner.js.map +1 -0
  30. package/dist/step-registry.d.ts +14 -0
  31. package/dist/step-registry.d.ts.map +1 -0
  32. package/dist/step-registry.js +36 -0
  33. package/dist/step-registry.js.map +1 -0
  34. package/dist/types/index.d.ts +35 -0
  35. package/dist/types/index.d.ts.map +1 -0
  36. package/dist/types/index.js +3 -0
  37. package/dist/types/index.js.map +1 -0
  38. package/package.json +40 -62
  39. package/LICENSE +0 -21
  40. package/bin/k6-cucumber-steps.js +0 -171
  41. package/docs/data/search.json +0 -1
  42. package/docs/fonts/Inconsolata-Regular.ttf +0 -0
  43. package/docs/fonts/OpenSans-Regular.ttf +0 -0
  44. package/docs/fonts/WorkSans-Bold.ttf +0 -0
  45. package/docs/global.html +0 -36
  46. package/docs/index.html +0 -91
  47. package/docs/k6-cucumber-steps/1.2.8/data/search.json +0 -1
  48. package/docs/k6-cucumber-steps/1.2.8/fonts/Inconsolata-Regular.ttf +0 -0
  49. package/docs/k6-cucumber-steps/1.2.8/fonts/OpenSans-Regular.ttf +0 -0
  50. package/docs/k6-cucumber-steps/1.2.8/fonts/WorkSans-Bold.ttf +0 -0
  51. package/docs/k6-cucumber-steps/1.2.8/global.html +0 -3
  52. package/docs/k6-cucumber-steps/1.2.8/helpers_generateHeaders.js.html +0 -38
  53. package/docs/k6-cucumber-steps/1.2.8/helpers_resolveBody.js.html +0 -65
  54. package/docs/k6-cucumber-steps/1.2.8/index.html +0 -91
  55. package/docs/k6-cucumber-steps/1.2.8/module-generateHeaders.html +0 -3
  56. package/docs/k6-cucumber-steps/1.2.8/module-resolveBody.html +0 -3
  57. package/docs/k6-cucumber-steps/1.2.8/scripts/core.js +0 -726
  58. package/docs/k6-cucumber-steps/1.2.8/scripts/core.min.js +0 -23
  59. package/docs/k6-cucumber-steps/1.2.8/scripts/resize.js +0 -90
  60. package/docs/k6-cucumber-steps/1.2.8/scripts/search.js +0 -265
  61. package/docs/k6-cucumber-steps/1.2.8/scripts/search.min.js +0 -6
  62. package/docs/k6-cucumber-steps/1.2.8/scripts/third-party/Apache-License-2.0.txt +0 -202
  63. package/docs/k6-cucumber-steps/1.2.8/scripts/third-party/fuse.js +0 -9
  64. package/docs/k6-cucumber-steps/1.2.8/scripts/third-party/hljs-line-num-original.js +0 -369
  65. package/docs/k6-cucumber-steps/1.2.8/scripts/third-party/hljs-line-num.js +0 -1
  66. package/docs/k6-cucumber-steps/1.2.8/scripts/third-party/hljs-original.js +0 -5171
  67. package/docs/k6-cucumber-steps/1.2.8/scripts/third-party/hljs.js +0 -1
  68. package/docs/k6-cucumber-steps/1.2.8/scripts/third-party/popper.js +0 -5
  69. package/docs/k6-cucumber-steps/1.2.8/scripts/third-party/tippy.js +0 -1
  70. package/docs/k6-cucumber-steps/1.2.8/scripts/third-party/tocbot.js +0 -672
  71. package/docs/k6-cucumber-steps/1.2.8/scripts/third-party/tocbot.min.js +0 -1
  72. package/docs/k6-cucumber-steps/1.2.8/styles/clean-jsdoc-theme-base.css +0 -1159
  73. package/docs/k6-cucumber-steps/1.2.8/styles/clean-jsdoc-theme-dark.css +0 -412
  74. package/docs/k6-cucumber-steps/1.2.8/styles/clean-jsdoc-theme-light.css +0 -482
  75. package/docs/k6-cucumber-steps/1.2.8/styles/clean-jsdoc-theme-scrollbar.css +0 -30
  76. package/docs/k6-cucumber-steps/1.2.8/styles/clean-jsdoc-theme-without-scrollbar.min.css +0 -1
  77. package/docs/k6-cucumber-steps/1.2.8/styles/clean-jsdoc-theme.min.css +0 -1
  78. package/docs/k6-cucumber-steps/1.2.8/utils_k6Runner.js.html +0 -95
  79. package/docs/load_test_steps.js.html +0 -664
  80. package/docs/scripts/core.js +0 -726
  81. package/docs/scripts/core.min.js +0 -23
  82. package/docs/scripts/resize.js +0 -90
  83. package/docs/scripts/search.js +0 -265
  84. package/docs/scripts/search.min.js +0 -6
  85. package/docs/scripts/third-party/Apache-License-2.0.txt +0 -202
  86. package/docs/scripts/third-party/fuse.js +0 -9
  87. package/docs/scripts/third-party/hljs-line-num-original.js +0 -369
  88. package/docs/scripts/third-party/hljs-line-num.js +0 -1
  89. package/docs/scripts/third-party/hljs-original.js +0 -5171
  90. package/docs/scripts/third-party/hljs.js +0 -1
  91. package/docs/scripts/third-party/popper.js +0 -5
  92. package/docs/scripts/third-party/tippy.js +0 -1
  93. package/docs/scripts/third-party/tocbot.js +0 -672
  94. package/docs/scripts/third-party/tocbot.min.js +0 -1
  95. package/docs/styles/clean-jsdoc-theme-base.css +0 -1159
  96. package/docs/styles/clean-jsdoc-theme-dark.css +0 -412
  97. package/docs/styles/clean-jsdoc-theme-light.css +0 -482
  98. package/docs/styles/clean-jsdoc-theme-scrollbar.css +0 -30
  99. package/docs/styles/clean-jsdoc-theme-without-scrollbar.min.css +0 -1
  100. package/docs/styles/clean-jsdoc-theme.min.css +0 -1
  101. package/index.js +0 -1
  102. package/lib/helpers/buildK6Script.d.ts +0 -1
  103. package/lib/helpers/buildK6Script.js +0 -103
  104. package/lib/helpers/generateHeaders.d.ts +0 -5
  105. package/lib/helpers/generateHeaders.js +0 -48
  106. package/lib/helpers/resolveBody.d.ts +0 -2
  107. package/lib/helpers/resolveBody.js +0 -78
  108. package/lib/helpers/resolvePayloadPath.js +0 -25
  109. package/lib/helpers/runK6ScriptFromWorld.js +0 -26
  110. package/lib/utils/k6Runner.d.ts +0 -6
  111. package/lib/utils/k6Runner.js +0 -89
  112. package/scripts/cucumber.js +0 -18
  113. package/scripts/linkReports.js +0 -107
  114. package/step_definitions/load_test_steps.d.ts +0 -89
  115. package/step_definitions/load_test_steps.js +0 -689
  116. package/step_definitions/world.js +0 -41
@@ -0,0 +1,208 @@
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.FeatureParser = void 0;
40
+ const fs_1 = __importDefault(require("fs"));
41
+ const path_1 = __importDefault(require("path"));
42
+ const Gherkin = __importStar(require("@cucumber/gherkin"));
43
+ const Messages = __importStar(require("@cucumber/messages"));
44
+ class FeatureParser {
45
+ async loadAndParseFeatures(featuresPath) {
46
+ // Resolve path relative to the Current Working Directory
47
+ const resolvedPath = path_1.default.resolve(process.cwd(), featuresPath);
48
+ const featureFiles = [];
49
+ if (!fs_1.default.existsSync(resolvedPath)) {
50
+ throw new Error(`The path "${featuresPath}" does not exist at ${resolvedPath}`);
51
+ }
52
+ if (fs_1.default.statSync(resolvedPath).isDirectory()) {
53
+ const files = fs_1.default.readdirSync(resolvedPath);
54
+ for (const file of files) {
55
+ if (file.endsWith(".feature")) {
56
+ const fullPath = path_1.default.join(resolvedPath, file);
57
+ const content = fs_1.default.readFileSync(fullPath, "utf8");
58
+ featureFiles.push(this.parseFeature(content, fullPath));
59
+ }
60
+ }
61
+ }
62
+ else {
63
+ const content = fs_1.default.readFileSync(resolvedPath, "utf8");
64
+ featureFiles.push(this.parseFeature(content, resolvedPath));
65
+ }
66
+ return featureFiles;
67
+ }
68
+ parseFeature(content, filePath) {
69
+ try {
70
+ const uuidFn = Messages.IdGenerator.incrementing();
71
+ const builder = new Gherkin.AstBuilder(uuidFn);
72
+ const matcher = new Gherkin.GherkinClassicTokenMatcher();
73
+ const parser = new Gherkin.Parser(builder, matcher);
74
+ const gherkinDocument = parser.parse(content);
75
+ if (!gherkinDocument || !gherkinDocument.feature) {
76
+ throw new Error("No feature found in file.");
77
+ }
78
+ // 1. Capture Feature-level tags for inheritance
79
+ const featureTags = (gherkinDocument.feature.tags || []).map((tag) => tag.name.replace("@", ""));
80
+ // 2. Extract Background Steps (to be prepended to all scenarios)
81
+ const backgroundSteps = [];
82
+ const backgroundChild = gherkinDocument.feature.children.find((child) => child.background);
83
+ if (backgroundChild && backgroundChild.background) {
84
+ backgroundChild.background.steps.forEach((step) => {
85
+ backgroundSteps.push(this.mapGherkinStepToInternalStep(step));
86
+ });
87
+ }
88
+ const scenarios = [];
89
+ // 3. Process Children (Scenarios and Scenario Outlines)
90
+ if (gherkinDocument.feature.children) {
91
+ for (const child of gherkinDocument.feature.children) {
92
+ if (child.scenario) {
93
+ const scenario = child.scenario;
94
+ const combinedTags = [
95
+ ...featureTags,
96
+ ...(scenario.tags || []).map((tag) => tag.name.replace("@", "")),
97
+ ];
98
+ // 4. Handle Scenario Outlines (Examples)
99
+ if (scenario.examples && scenario.examples.length > 0) {
100
+ for (const exampleGroup of scenario.examples) {
101
+ const tableHeader = exampleGroup.tableHeader?.cells.map((c) => c.value) ||
102
+ [];
103
+ const tableBody = exampleGroup.tableBody || [];
104
+ tableBody.forEach((row, rowIndex) => {
105
+ const rowData = {};
106
+ row.cells.forEach((cell, cellIndex) => {
107
+ rowData[tableHeader[cellIndex]] = cell.value;
108
+ });
109
+ // Process steps: inject background + replace placeholders + map arguments
110
+ const scenarioSteps = scenario.steps.map((step) => {
111
+ let newText = step.text;
112
+ // Replace <placeholders>
113
+ Object.keys(rowData).forEach((key) => {
114
+ newText = newText.replace(new RegExp(`<${key}>`, "g"), rowData[key]);
115
+ });
116
+ return this.mapGherkinStepToInternalStep(step, newText);
117
+ });
118
+ scenarios.push({
119
+ name: `${scenario.name} (Row ${rowIndex + 1})`,
120
+ steps: [...backgroundSteps, ...scenarioSteps],
121
+ tags: combinedTags,
122
+ description: scenario.description || "",
123
+ });
124
+ });
125
+ }
126
+ }
127
+ else {
128
+ // 5. Handle Standard Scenarios
129
+ const scenarioSteps = scenario.steps.map((step) => this.mapGherkinStepToInternalStep(step));
130
+ scenarios.push({
131
+ name: scenario.name,
132
+ steps: [...backgroundSteps, ...scenarioSteps],
133
+ tags: combinedTags,
134
+ description: scenario.description || "",
135
+ });
136
+ }
137
+ }
138
+ }
139
+ }
140
+ return { path: filePath, content, scenarios };
141
+ }
142
+ catch (error) {
143
+ throw new Error(`Error parsing feature file ${filePath}: ${error.message}`);
144
+ }
145
+ }
146
+ /**
147
+ * Helper to map Gherkin AST steps to our internal Scenario Step format,
148
+ * specifically handling DataTables and DocStrings.
149
+ */
150
+ mapGherkinStepToInternalStep(gherkinStep, overrideText) {
151
+ let argument = null;
152
+ // Handle DataTables: Convert to Array of Objects
153
+ if (gherkinStep.dataTable) {
154
+ const rows = gherkinStep.dataTable.rows;
155
+ if (rows.length > 0) {
156
+ const header = rows[0].cells.map((c) => c.value);
157
+ argument = rows.slice(1).map((row) => {
158
+ const obj = {};
159
+ row.cells.forEach((cell, i) => {
160
+ obj[header[i]] = cell.value;
161
+ });
162
+ return obj;
163
+ });
164
+ }
165
+ }
166
+ // Handle DocStrings
167
+ else if (gherkinStep.docString) {
168
+ argument = gherkinStep.docString.content;
169
+ }
170
+ return {
171
+ keyword: gherkinStep.keyword.trim(),
172
+ text: overrideText || gherkinStep.text,
173
+ argument: argument,
174
+ };
175
+ }
176
+ loadScenarioMetadata(scenarios) {
177
+ return scenarios.map((scenario) => {
178
+ const metadata = {
179
+ scenarioName: scenario.name,
180
+ tags: scenario.tags,
181
+ };
182
+ for (const tag of scenario.tags) {
183
+ if (tag.startsWith("vus:")) {
184
+ metadata.vus = parseInt(tag.split(":")[1]);
185
+ }
186
+ else if (tag.startsWith("duration:")) {
187
+ metadata.duration = tag.split(":")[1];
188
+ }
189
+ else if (tag.startsWith("stages:")) {
190
+ metadata.stages = tag.split(":")[1];
191
+ }
192
+ else if (tag.startsWith("threshold:")) {
193
+ const split = tag.split(":")[1].split("=");
194
+ if (split.length === 2) {
195
+ metadata.thresholds = metadata.thresholds || {};
196
+ metadata.thresholds[split[0]] = split[1];
197
+ }
198
+ }
199
+ else if (tag.startsWith("group:")) {
200
+ metadata.group = tag.split(":")[1];
201
+ }
202
+ }
203
+ return metadata;
204
+ });
205
+ }
206
+ }
207
+ exports.FeatureParser = FeatureParser;
208
+ //# sourceMappingURL=feature.parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature.parser.js","sourceRoot":"","sources":["../../src/generators/feature.parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { Scenario, ScenarioMetadata, ProjectConfig } from "../types";
2
+ export declare class K6ScriptGenerator {
3
+ generateK6File(scenarios: Scenario[], metadata: ScenarioMetadata[], config: ProjectConfig): string;
4
+ private generateImports;
5
+ private generateOptions;
6
+ private isValidK6Metric;
7
+ private normalizeStepText;
8
+ private extractArguments;
9
+ private generateTestFunction;
10
+ }
11
+ //# sourceMappingURL=k6-script.generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"k6-script.generator.d.ts","sourceRoot":"","sources":["../../src/generators/k6-script.generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAErE,qBAAa,iBAAiB;IAC5B,cAAc,CACZ,SAAS,EAAE,QAAQ,EAAE,EACrB,QAAQ,EAAE,gBAAgB,EAAE,EAC5B,MAAM,EAAE,aAAa,GACpB,MAAM;IA8DT,OAAO,CAAC,eAAe;IAuBvB,OAAO,CAAC,eAAe;IAyDvB,OAAO,CAAC,eAAe;IAuBvB,OAAO,CAAC,iBAAiB;IAoBzB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,oBAAoB;CA6E7B"}
@@ -0,0 +1,233 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.K6ScriptGenerator = void 0;
4
+ class K6ScriptGenerator {
5
+ generateK6File(scenarios, metadata, config) {
6
+ const header = `
7
+ /**
8
+ * Generated k6 test script
9
+ */
10
+ globalThis.savedTokens = {};
11
+ globalThis.lastResponse = {};
12
+ `;
13
+ const imports = this.generateImports(config, metadata);
14
+ const options = this.generateOptions(metadata);
15
+ const testFunction = this.generateTestFunction(scenarios, metadata);
16
+ return `
17
+ ${header}
18
+ ${imports}
19
+
20
+ ${options}
21
+
22
+ export function setup() {
23
+ // We must return an object here to initialize the "data" channel
24
+ return { v: Date.now() };
25
+ }
26
+
27
+ ${testFunction}
28
+
29
+ export function teardown(tokensFromDefault) {
30
+ // Capture return value from default function
31
+ globalThis.exportedTokens = tokensFromDefault;
32
+ }
33
+ export function handleSummary(data) {
34
+ const reports = {
35
+ './reports/summary.html': htmlReport(data),
36
+ './reports/results.json': JSON.stringify(data),
37
+ stdout: textSummary(data, { indent: ' ', enableColors: true }),
38
+ };
39
+
40
+ console.log('--- Summary File Write Audit ---');
41
+
42
+ // Try to find tokens in teardown_data (the return value of default function)
43
+ let tokens = data.teardown_data || globalThis.exportedTokens || globalThis.savedTokens || {};
44
+
45
+ // If k6 nested it due to the async/await structure
46
+ if (data.setup_data && !Object.keys(tokens).length) {
47
+ tokens = data.setup_data;
48
+ }
49
+
50
+ const keys = Object.keys(tokens).filter(k => k.endsWith('.json'));
51
+ console.log('Tokens found:', keys.length > 0 ? keys.join(', ') : 'None');
52
+
53
+ for (const [path, tokenValue] of Object.entries(tokens)) {
54
+ if (path.endsWith('.json')) {
55
+ const fullPath = path.startsWith('./') ? path : \`./\${path}\`;
56
+ reports[fullPath] = JSON.stringify(typeof tokenValue === 'string' ? { access_token: tokenValue } : tokenValue, null, 2);
57
+ console.log(\`✅ Writing: \${fullPath}\`);
58
+ }
59
+ }
60
+
61
+ return reports;
62
+ }`;
63
+ }
64
+ generateImports(config, metadata) {
65
+ const ext = config.language === "ts" ? "ts" : "js";
66
+ const hasBrowser = metadata.some((m) => m.tags?.includes("browser"));
67
+ const baseImports = [
68
+ 'import http from "k6/http";',
69
+ 'import { check, sleep, group } from "k6";',
70
+ 'import { htmlReport } from "https://raw.githubusercontent.com/benc-uk/k6-reporter/main/dist/bundle.js";',
71
+ 'import { textSummary } from "https://jslib.k6.io/k6-summary/0.1.0/index.js";',
72
+ ];
73
+ if (hasBrowser) {
74
+ baseImports.push('import { browser } from "k6/browser";');
75
+ }
76
+ baseImports.push(`import * as steps from "../steps/sample.steps.${ext}";`);
77
+ return baseImports.join("\n");
78
+ }
79
+ generateOptions(metadata) {
80
+ let vus = 1;
81
+ let duration = "30s";
82
+ let stages = [];
83
+ let thresholds = {};
84
+ const hasBrowser = metadata.some((m) => m.tags?.includes("browser"));
85
+ for (const meta of metadata) {
86
+ if (meta.vus)
87
+ vus = Math.max(vus, meta.vus);
88
+ if (meta.duration)
89
+ duration = meta.duration;
90
+ if (meta.thresholds)
91
+ Object.assign(thresholds, meta.thresholds);
92
+ if (meta.stages) {
93
+ stages = meta.stages.split(",").map((s) => {
94
+ const [d, t] = s.split("-");
95
+ return { duration: d, target: parseInt(t) };
96
+ });
97
+ }
98
+ }
99
+ const formattedThresholds = {};
100
+ for (const [key, value] of Object.entries(thresholds)) {
101
+ if (this.isValidK6Metric(key)) {
102
+ formattedThresholds[key] = [value];
103
+ }
104
+ }
105
+ // Build the k6 options object
106
+ const k6Options = {};
107
+ if (stages.length > 0) {
108
+ k6Options.stages = stages;
109
+ }
110
+ else {
111
+ k6Options.vus = vus;
112
+ k6Options.duration = duration;
113
+ }
114
+ if (Object.keys(formattedThresholds).length > 0) {
115
+ k6Options.thresholds = formattedThresholds;
116
+ }
117
+ if (hasBrowser) {
118
+ k6Options.scenarios = {
119
+ default: {
120
+ executor: "shared-iterations",
121
+ options: {
122
+ browser: {
123
+ type: "chromium",
124
+ },
125
+ },
126
+ },
127
+ };
128
+ }
129
+ return `export const options = ${JSON.stringify(k6Options, null, 2)};`;
130
+ }
131
+ isValidK6Metric(metricName) {
132
+ const validMetrics = [
133
+ "http_req_duration",
134
+ "http_req_failed",
135
+ "http_req_connecting",
136
+ "http_req_tls_handshaking",
137
+ "http_req_waiting",
138
+ "http_req_receiving",
139
+ "data_sent",
140
+ "data_received",
141
+ "iteration_duration",
142
+ "iterations",
143
+ "vus",
144
+ "vus_max",
145
+ "browser_web_vital_lcp",
146
+ "browser_web_vital_fid",
147
+ "browser_web_vital_cls",
148
+ ];
149
+ return (validMetrics.includes(metricName) || /^[a-z][a-z0-9_]*$/.test(metricName));
150
+ }
151
+ normalizeStepText(text) {
152
+ // 1. Remove quotes and their contents
153
+ const noQuotes = text.replace(/"[^"]*"|'[^']*'/g, "").trim();
154
+ // 2. Remove non-alphanumeric characters (except spaces)
155
+ const cleanChars = noQuotes.replace(/[^a-zA-Z0-9\s]/g, "");
156
+ // 3. Split by whitespace and camelCase
157
+ // Using a simpler split regex to avoid double-backslash issues in TS templates
158
+ return cleanChars
159
+ .split(/\s+/)
160
+ .filter((word) => word.length > 0)
161
+ .map((word, i) => i === 0
162
+ ? word.toLowerCase()
163
+ : word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
164
+ .join("");
165
+ }
166
+ extractArguments(text) {
167
+ const stringMatches = text.match(/"([^"]*)"|'([^']*)'/g) || [];
168
+ const intMatches = text.match(/\b\d+\b/g) || [];
169
+ return [...stringMatches, ...intMatches].join(", ");
170
+ }
171
+ generateTestFunction(scenarios, metadata) {
172
+ const allStepCalls = scenarios
173
+ .map((scenario) => {
174
+ const isBrowser = scenario.tags?.includes("browser");
175
+ const stepLines = [
176
+ ` group(${JSON.stringify(scenario.name)}, function () {`,
177
+ ];
178
+ if (isBrowser) {
179
+ // Safety initialization
180
+ stepLines.push(` let context, page;`);
181
+ stepLines.push(` try {`);
182
+ stepLines.push(` context = browser.newContext();`);
183
+ stepLines.push(` if (!context) throw new Error("Browser Context could not be created.");`);
184
+ stepLines.push(` page = context.newPage();`);
185
+ stepLines.push(` (async () => {`);
186
+ stepLines.push(` try {`);
187
+ }
188
+ scenario.steps.forEach((step) => {
189
+ const name = this.normalizeStepText(step.text);
190
+ const args = this.extractArguments(step.text);
191
+ const callParams = [];
192
+ if (isBrowser)
193
+ callParams.push("page");
194
+ if (args && args.trim().length > 0)
195
+ callParams.push(args);
196
+ if (step.argument) {
197
+ callParams.push(JSON.stringify(step.argument));
198
+ }
199
+ const awaitPrefix = isBrowser ? "await " : "";
200
+ const indent = isBrowser ? " " : " ";
201
+ stepLines.push(`${indent}${awaitPrefix}steps.${name}(${callParams.join(", ")});`);
202
+ });
203
+ if (isBrowser) {
204
+ stepLines.push(` } catch (err) {`);
205
+ stepLines.push(` console.error('Step Execution Error: ' + err.message);`);
206
+ stepLines.push(` } finally {`);
207
+ stepLines.push(` if (page) page.close();`);
208
+ stepLines.push(` if (context) context.close();`);
209
+ stepLines.push(` }`);
210
+ // Close the async arrow function and the IIFE call
211
+ stepLines.push(` })();`);
212
+ stepLines.push(` } catch (e) {`);
213
+ stepLines.push(` console.error('Browser Initialization Failed: ' + e.message);`);
214
+ stepLines.push(` }`);
215
+ }
216
+ stepLines.push(` sleep(1);`);
217
+ stepLines.push(` });`);
218
+ return stepLines.join("\n");
219
+ })
220
+ .join("\n\n");
221
+ // The outer try/finally ensures globalThis.savedTokens is ALWAYS returned
222
+ // even if a group crashes.
223
+ return `export default function () {
224
+ try {
225
+ ${allStepCalls}
226
+ } finally {
227
+ return globalThis.savedTokens;
228
+ }
229
+ }`;
230
+ }
231
+ }
232
+ exports.K6ScriptGenerator = K6ScriptGenerator;
233
+ //# sourceMappingURL=k6-script.generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"k6-script.generator.js","sourceRoot":"","sources":["../../src/generators/k6-script.generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { ProjectConfig } from "../types";
2
+ export declare class ProjectGenerator {
3
+ generateProjectStructure(config: ProjectConfig, outputPath: string): void;
4
+ private createDirectory;
5
+ private generatePackageJson;
6
+ private generateReadme;
7
+ private generateAuthSampleFeature;
8
+ private generateSampleFeature;
9
+ private generateBrowserSampleFeature;
10
+ private generateSampleSteps;
11
+ private generateGitignore;
12
+ private generateTsConfig;
13
+ }
14
+ //# sourceMappingURL=project.generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.generator.d.ts","sourceRoot":"","sources":["../../src/generators/project.generator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,qBAAa,gBAAgB;IAC3B,wBAAwB,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IA8BzE,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,mBAAmB;IA0B3B,OAAO,CAAC,cAAc;IA+BtB,OAAO,CAAC,yBAAyB;IAkCjC,OAAO,CAAC,qBAAqB;IA8C7B,OAAO,CAAC,4BAA4B;IAgBpC,OAAO,CAAC,mBAAmB;IAqS3B,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,gBAAgB;CAoBzB"}