@gherkle/runner 0.1.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 (59) hide show
  1. package/README.md +482 -0
  2. package/bin/gherkle-runner.js +111 -0
  3. package/dist/__tests__/agent-executor-selection.test.d.ts +15 -0
  4. package/dist/__tests__/agent-executor-selection.test.d.ts.map +1 -0
  5. package/dist/__tests__/agent-executor-selection.test.js +192 -0
  6. package/dist/__tests__/agent-executor-selection.test.js.map +1 -0
  7. package/dist/__tests__/envelope-mapper.test.d.ts +17 -0
  8. package/dist/__tests__/envelope-mapper.test.d.ts.map +1 -0
  9. package/dist/__tests__/envelope-mapper.test.js +217 -0
  10. package/dist/__tests__/envelope-mapper.test.js.map +1 -0
  11. package/dist/__tests__/gherkin-parser.test.d.ts +2 -0
  12. package/dist/__tests__/gherkin-parser.test.d.ts.map +1 -0
  13. package/dist/__tests__/gherkin-parser.test.js +375 -0
  14. package/dist/__tests__/gherkin-parser.test.js.map +1 -0
  15. package/dist/__tests__/integration-fork.test.d.ts +16 -0
  16. package/dist/__tests__/integration-fork.test.d.ts.map +1 -0
  17. package/dist/__tests__/integration-fork.test.js +141 -0
  18. package/dist/__tests__/integration-fork.test.js.map +1 -0
  19. package/dist/__tests__/tmpdir-materialization.test.d.ts +18 -0
  20. package/dist/__tests__/tmpdir-materialization.test.d.ts.map +1 -0
  21. package/dist/__tests__/tmpdir-materialization.test.js +177 -0
  22. package/dist/__tests__/tmpdir-materialization.test.js.map +1 -0
  23. package/dist/agent.d.ts +71 -0
  24. package/dist/agent.d.ts.map +1 -0
  25. package/dist/agent.js +312 -0
  26. package/dist/agent.js.map +1 -0
  27. package/dist/config.d.ts +31 -0
  28. package/dist/config.d.ts.map +1 -0
  29. package/dist/config.js +165 -0
  30. package/dist/config.js.map +1 -0
  31. package/dist/frameworks/cucumber-subprocess.d.ts +129 -0
  32. package/dist/frameworks/cucumber-subprocess.d.ts.map +1 -0
  33. package/dist/frameworks/cucumber-subprocess.js +469 -0
  34. package/dist/frameworks/cucumber-subprocess.js.map +1 -0
  35. package/dist/frameworks/playwright.d.ts +22 -0
  36. package/dist/frameworks/playwright.d.ts.map +1 -0
  37. package/dist/frameworks/playwright.js +234 -0
  38. package/dist/frameworks/playwright.js.map +1 -0
  39. package/dist/gherkin-parser.d.ts +22 -0
  40. package/dist/gherkin-parser.d.ts.map +1 -0
  41. package/dist/gherkin-parser.js +148 -0
  42. package/dist/gherkin-parser.js.map +1 -0
  43. package/dist/index.d.ts +10 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +31 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/step-registry.d.ts +30 -0
  48. package/dist/step-registry.d.ts.map +1 -0
  49. package/dist/step-registry.js +160 -0
  50. package/dist/step-registry.js.map +1 -0
  51. package/dist/types.d.ts +117 -0
  52. package/dist/types.d.ts.map +1 -0
  53. package/dist/types.js +6 -0
  54. package/dist/types.js.map +1 -0
  55. package/dist/workers/cucumber-worker.d.ts +29 -0
  56. package/dist/workers/cucumber-worker.d.ts.map +1 -0
  57. package/dist/workers/cucumber-worker.js +191 -0
  58. package/dist/workers/cucumber-worker.js.map +1 -0
  59. package/package.json +74 -0
@@ -0,0 +1,234 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.PlaywrightExecutor = void 0;
37
+ const playwright_core_1 = require("playwright-core");
38
+ const path = __importStar(require("path"));
39
+ const fs = __importStar(require("fs"));
40
+ const gherkin_parser_1 = require("../gherkin-parser");
41
+ const step_registry_1 = require("../step-registry");
42
+ class PlaywrightExecutor {
43
+ config;
44
+ registry;
45
+ browser = null;
46
+ constructor(config) {
47
+ this.config = config;
48
+ this.registry = new step_registry_1.StepRegistry();
49
+ }
50
+ async execute(feature, testConfig, callbacks) {
51
+ const parsed = (0, gherkin_parser_1.parseGherkinContent)(feature.content);
52
+ const results = [];
53
+ console.log(` 📄 Running: ${feature.name || parsed.name}`);
54
+ console.log(` Scenarios: ${parsed.scenarios.length}`);
55
+ const stepDefsPath = testConfig.stepDefinitionsPath || this.config.stepDefinitionsPath;
56
+ await this.registry.loadFromDirectory(stepDefsPath);
57
+ try {
58
+ this.browser = await this.launchBrowser();
59
+ for (const scenario of parsed.scenarios) {
60
+ const scenarioId = `${feature.id}-${scenario.line}`;
61
+ const result = await this.executeScenario(feature, parsed, scenario, scenarioId, callbacks);
62
+ results.push(result);
63
+ }
64
+ }
65
+ finally {
66
+ if (this.browser) {
67
+ await this.browser.close().catch(() => { });
68
+ this.browser = null;
69
+ }
70
+ }
71
+ return results;
72
+ }
73
+ async launchBrowser() {
74
+ const browserName = this.config.browsers[0] || "chromium";
75
+ const launcher = this.getBrowserLauncher(browserName);
76
+ return launcher.launch({ headless: this.config.headless });
77
+ }
78
+ getBrowserLauncher(name) {
79
+ switch (name) {
80
+ case "firefox":
81
+ return playwright_core_1.firefox;
82
+ case "webkit":
83
+ return playwright_core_1.webkit;
84
+ default:
85
+ return playwright_core_1.chromium;
86
+ }
87
+ }
88
+ async executeScenario(feature, parsed, scenario, scenarioId, callbacks) {
89
+ const startTime = Date.now();
90
+ const steps = [];
91
+ const artifacts = [];
92
+ let scenarioStatus = "passed";
93
+ let scenarioError;
94
+ let skipRemaining = false;
95
+ callbacks.onScenarioStart(scenarioId, scenario.name);
96
+ const context = await this.browser.newContext({
97
+ baseURL: this.config.baseUrl,
98
+ });
99
+ const page = await context.newPage();
100
+ const stepContext = {
101
+ page,
102
+ context,
103
+ baseUrl: this.config.baseUrl,
104
+ env: this.config.env,
105
+ };
106
+ try {
107
+ const allSteps = [
108
+ ...(parsed.background || []),
109
+ ...scenario.steps,
110
+ ];
111
+ for (const step of allSteps) {
112
+ if (skipRemaining) {
113
+ const skippedResult = {
114
+ keyword: step.keyword,
115
+ text: step.text,
116
+ status: "skipped",
117
+ };
118
+ steps.push(skippedResult);
119
+ callbacks.onStepComplete(scenarioId, skippedResult);
120
+ continue;
121
+ }
122
+ const stepResult = await this.executeStep(step, stepContext);
123
+ steps.push(stepResult);
124
+ callbacks.onStepComplete(scenarioId, stepResult);
125
+ if (stepResult.status === "failed") {
126
+ scenarioStatus = "failed";
127
+ scenarioError = {
128
+ message: stepResult.error || "Step failed",
129
+ };
130
+ skipRemaining = true;
131
+ const screenshotArtifact = await this.captureScreenshot(page, feature.id, scenarioId, step.text);
132
+ if (screenshotArtifact) {
133
+ artifacts.push(screenshotArtifact);
134
+ }
135
+ }
136
+ }
137
+ }
138
+ catch (err) {
139
+ const error = err instanceof Error ? err : new Error(String(err));
140
+ scenarioStatus = "failed";
141
+ scenarioError = {
142
+ message: error.message,
143
+ stack: error.stack,
144
+ };
145
+ }
146
+ finally {
147
+ await page.close().catch(() => { });
148
+ await context.close().catch(() => { });
149
+ }
150
+ const durationMs = Date.now() - startTime;
151
+ callbacks.onScenarioComplete(scenarioId, scenarioStatus, durationMs, scenarioError?.message);
152
+ return {
153
+ scenarioId,
154
+ scenarioName: scenario.name,
155
+ featureId: feature.id,
156
+ status: scenarioStatus,
157
+ durationMs,
158
+ steps,
159
+ error: scenarioError,
160
+ artifacts: artifacts.length > 0 ? artifacts : undefined,
161
+ };
162
+ }
163
+ async executeStep(step, stepContext) {
164
+ const startTime = Date.now();
165
+ const match = this.registry.findMatch(step.keyword, step.text);
166
+ if (!match) {
167
+ console.log(` ⚠ ${step.keyword} ${step.text} (no step definition)`);
168
+ return {
169
+ keyword: step.keyword,
170
+ text: step.text,
171
+ status: "pending",
172
+ durationMs: Date.now() - startTime,
173
+ error: `No matching step definition for: ${step.keyword} ${step.text}`,
174
+ };
175
+ }
176
+ stepContext.dataTable = step.dataTable;
177
+ stepContext.docString = step.docString;
178
+ try {
179
+ console.log(` ✓ ${step.keyword} ${step.text}`);
180
+ await Promise.race([
181
+ match.definition.fn(stepContext, ...match.args),
182
+ this.createStepTimeout(),
183
+ ]);
184
+ return {
185
+ keyword: step.keyword,
186
+ text: step.text,
187
+ status: "passed",
188
+ durationMs: Date.now() - startTime,
189
+ };
190
+ }
191
+ catch (err) {
192
+ const error = err instanceof Error ? err : new Error(String(err));
193
+ console.log(` ✗ ${step.keyword} ${step.text} — ${error.message}`);
194
+ return {
195
+ keyword: step.keyword,
196
+ text: step.text,
197
+ status: "failed",
198
+ durationMs: Date.now() - startTime,
199
+ error: error.message,
200
+ };
201
+ }
202
+ }
203
+ createStepTimeout() {
204
+ return new Promise((_, reject) => {
205
+ setTimeout(() => {
206
+ reject(new Error(`Step timed out after ${this.config.stepTimeout}ms`));
207
+ }, this.config.stepTimeout);
208
+ });
209
+ }
210
+ async captureScreenshot(page, featureId, scenarioId, stepName) {
211
+ if (this.config.screenshots === "never")
212
+ return null;
213
+ try {
214
+ const artifactsDir = path.resolve(process.cwd(), ".gherkle-artifacts");
215
+ if (!fs.existsSync(artifactsDir)) {
216
+ fs.mkdirSync(artifactsDir, { recursive: true });
217
+ }
218
+ const filename = `${featureId}-${scenarioId}-${Date.now()}.png`;
219
+ const screenshotPath = path.join(artifactsDir, filename);
220
+ await page.screenshot({ path: screenshotPath, fullPage: true });
221
+ return {
222
+ type: "screenshot",
223
+ name: filename,
224
+ path: screenshotPath,
225
+ stepName,
226
+ };
227
+ }
228
+ catch {
229
+ return null;
230
+ }
231
+ }
232
+ }
233
+ exports.PlaywrightExecutor = PlaywrightExecutor;
234
+ //# sourceMappingURL=playwright.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playwright.js","sourceRoot":"","sources":["../../src/frameworks/playwright.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export interface ParsedStep {
2
+ keyword: "Given" | "When" | "Then" | "And" | "But";
3
+ text: string;
4
+ dataTable?: string[][];
5
+ docString?: string;
6
+ line: number;
7
+ }
8
+ export interface ParsedScenario {
9
+ name: string;
10
+ line: number;
11
+ tags: string[];
12
+ steps: ParsedStep[];
13
+ }
14
+ export interface ParsedFeature {
15
+ name: string;
16
+ description: string;
17
+ tags: string[];
18
+ background: ParsedStep[] | null;
19
+ scenarios: ParsedScenario[];
20
+ }
21
+ export declare function parseGherkinContent(content: string): ParsedFeature;
22
+ //# sourceMappingURL=gherkin-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gherkin-parser.d.ts","sourceRoot":"","sources":["../src/gherkin-parser.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IAChC,SAAS,EAAE,cAAc,EAAE,CAAC;CAC7B;AAwED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CA2DlE"}
@@ -0,0 +1,148 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.parseGherkinContent = parseGherkinContent;
37
+ const Gherkin = __importStar(require("@cucumber/gherkin"));
38
+ const Messages = __importStar(require("@cucumber/messages"));
39
+ function normalizeKeyword(keyword) {
40
+ const trimmed = keyword.trim();
41
+ const map = {
42
+ Given: "Given",
43
+ When: "When",
44
+ Then: "Then",
45
+ And: "And",
46
+ But: "But",
47
+ };
48
+ return map[trimmed] || "Given";
49
+ }
50
+ function extractDataTable(dt) {
51
+ if (!dt)
52
+ return undefined;
53
+ return dt.rows.map((row) => row.cells.map((cell) => cell.value));
54
+ }
55
+ function extractDocString(ds) {
56
+ if (!ds)
57
+ return undefined;
58
+ return ds.content;
59
+ }
60
+ function expandScenarioOutline(outline, background) {
61
+ const scenarios = [];
62
+ const tags = (outline.tags || []).map((t) => t.name);
63
+ for (const examples of outline.examples || []) {
64
+ if (!examples.tableHeader || !examples.tableBody)
65
+ continue;
66
+ const headers = examples.tableHeader.cells.map((c) => c.value);
67
+ for (const row of examples.tableBody) {
68
+ const values = row.cells.map((c) => c.value);
69
+ const substitutions = new Map();
70
+ headers.forEach((h, i) => substitutions.set(`<${h}>`, values[i]));
71
+ const expandedSteps = (outline.steps || []).map((step) => {
72
+ let text = step.text;
73
+ for (const [placeholder, value] of substitutions) {
74
+ text = text.split(placeholder).join(value);
75
+ }
76
+ return {
77
+ keyword: normalizeKeyword(step.keyword),
78
+ text,
79
+ dataTable: extractDataTable(step.dataTable),
80
+ docString: extractDocString(step.docString),
81
+ line: step.location.line,
82
+ };
83
+ });
84
+ const exampleLabel = values.join(", ");
85
+ scenarios.push({
86
+ name: `${outline.name} (${exampleLabel})`,
87
+ line: row.location.line,
88
+ tags: [...tags, ...(examples.tags || []).map((t) => t.name)],
89
+ steps: expandedSteps,
90
+ });
91
+ }
92
+ }
93
+ return scenarios;
94
+ }
95
+ function parseGherkinContent(content) {
96
+ const uuidFn = Messages.IdGenerator.uuid();
97
+ const builder = new Gherkin.AstBuilder(uuidFn);
98
+ const matcher = new Gherkin.GherkinClassicTokenMatcher();
99
+ const parser = new Gherkin.Parser(builder, matcher);
100
+ const gherkinDocument = parser.parse(content);
101
+ const feature = gherkinDocument.feature;
102
+ if (!feature) {
103
+ throw new Error("No Feature found in Gherkin content");
104
+ }
105
+ let background = null;
106
+ const scenarios = [];
107
+ for (const child of feature.children || []) {
108
+ if (child.background) {
109
+ background = (child.background.steps || []).map((step) => ({
110
+ keyword: normalizeKeyword(step.keyword),
111
+ text: step.text,
112
+ dataTable: extractDataTable(step.dataTable),
113
+ docString: extractDocString(step.docString),
114
+ line: step.location.line,
115
+ }));
116
+ }
117
+ if (child.scenario) {
118
+ const scenario = child.scenario;
119
+ if (scenario.examples && scenario.examples.length > 0) {
120
+ scenarios.push(...expandScenarioOutline(scenario, background));
121
+ }
122
+ else {
123
+ const tags = (scenario.tags || []).map((t) => t.name);
124
+ const steps = (scenario.steps || []).map((step) => ({
125
+ keyword: normalizeKeyword(step.keyword),
126
+ text: step.text,
127
+ dataTable: extractDataTable(step.dataTable),
128
+ docString: extractDocString(step.docString),
129
+ line: step.location.line,
130
+ }));
131
+ scenarios.push({
132
+ name: scenario.name,
133
+ line: scenario.location.line,
134
+ tags,
135
+ steps,
136
+ });
137
+ }
138
+ }
139
+ }
140
+ return {
141
+ name: feature.name,
142
+ description: feature.description || "",
143
+ tags: (feature.tags || []).map((t) => t.name),
144
+ background,
145
+ scenarios,
146
+ };
147
+ }
148
+ //# sourceMappingURL=gherkin-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gherkin-parser.js","sourceRoot":"","sources":["../src/gherkin-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @gherkle/runner - Test Runner Agent for Gherkle
3
+ *
4
+ * This package provides a CLI tool and agent that connects to Gherkle
5
+ * to execute Gherkin feature files on your local machine or CI/CD environment.
6
+ */
7
+ export { GherkleAgent } from "./agent";
8
+ export { AgentConfig, loadConfig, generateSampleConfig } from "./config";
9
+ export * from "./types";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACzE,cAAc,SAAS,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ /**
3
+ * @gherkle/runner - Test Runner Agent for Gherkle
4
+ *
5
+ * This package provides a CLI tool and agent that connects to Gherkle
6
+ * to execute Gherkin feature files on your local machine or CI/CD environment.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
20
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
21
+ };
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.generateSampleConfig = exports.loadConfig = exports.GherkleAgent = void 0;
24
+ var agent_1 = require("./agent");
25
+ Object.defineProperty(exports, "GherkleAgent", { enumerable: true, get: function () { return agent_1.GherkleAgent; } });
26
+ var config_1 = require("./config");
27
+ Object.defineProperty(exports, "loadConfig", { enumerable: true, get: function () { return config_1.loadConfig; } });
28
+ Object.defineProperty(exports, "generateSampleConfig", { enumerable: true, get: function () { return config_1.generateSampleConfig; } });
29
+ __exportStar(require("./types"), exports);
30
+ // CLI is handled by bin/gherkle-runner.js
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;AAEH,iCAAuC;AAA9B,qGAAA,YAAY,OAAA;AACrB,mCAAyE;AAAnD,oGAAA,UAAU,OAAA;AAAE,8GAAA,oBAAoB,OAAA;AACtD,0CAAwB;AAExB,0CAA0C"}
@@ -0,0 +1,30 @@
1
+ import { Page, BrowserContext } from "playwright-core";
2
+ export interface StepDefinition {
3
+ keyword: "Given" | "When" | "Then";
4
+ pattern: RegExp;
5
+ fn: StepFunction;
6
+ source: string;
7
+ }
8
+ export type StepFunction = (context: StepContext, ...args: string[]) => Promise<void>;
9
+ export interface StepContext {
10
+ page: Page;
11
+ context: BrowserContext;
12
+ baseUrl?: string;
13
+ env: Record<string, string>;
14
+ dataTable?: string[][];
15
+ docString?: string;
16
+ }
17
+ export declare class StepRegistry {
18
+ private steps;
19
+ register(keyword: "Given" | "When" | "Then", pattern: RegExp, fn: StepFunction, source?: string): void;
20
+ findMatch(keyword: string, text: string): {
21
+ definition: StepDefinition;
22
+ args: string[];
23
+ } | null;
24
+ private resolveKeyword;
25
+ get count(): number;
26
+ loadFromDirectory(dirPath: string): Promise<void>;
27
+ private findStepFiles;
28
+ private loadStepFile;
29
+ }
30
+ //# sourceMappingURL=step-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-registry.d.ts","sourceRoot":"","sources":["../src/step-registry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEvD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,YAAY,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,YAAY,GAAG,CACzB,OAAO,EAAE,WAAW,EACpB,GAAG,IAAI,EAAE,MAAM,EAAE,KACd,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,cAAc,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAwB;IAErC,QAAQ,CACN,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,EAClC,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,YAAY,EAChB,MAAM,SAAW,GAChB,IAAI;IAIP,SAAS,CACP,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACX;QAAE,UAAU,EAAE,cAAc,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI;IA8BxD,OAAO,CAAC,cAAc;IAgBtB,IAAI,KAAK,IAAI,MAAM,CAElB;IAEK,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBvD,OAAO,CAAC,aAAa;YAwBP,YAAY;CAyC3B"}