gherkin-ai 2.2.0 → 2.4.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 (95) hide show
  1. package/README.md +7 -3
  2. package/dist/commands/autopilot.d.ts.map +1 -1
  3. package/dist/commands/autopilot.js +5 -0
  4. package/dist/commands/autopilot.js.map +1 -1
  5. package/dist/commands/create.d.ts +2 -0
  6. package/dist/commands/create.d.ts.map +1 -1
  7. package/dist/commands/create.js +50 -0
  8. package/dist/commands/create.js.map +1 -1
  9. package/dist/commands/diff.d.ts.map +1 -1
  10. package/dist/commands/diff.js +23 -2
  11. package/dist/commands/diff.js.map +1 -1
  12. package/dist/commands/evaluate.d.ts +6 -0
  13. package/dist/commands/evaluate.d.ts.map +1 -0
  14. package/dist/commands/evaluate.js +80 -0
  15. package/dist/commands/evaluate.js.map +1 -0
  16. package/dist/commands/generate.d.ts.map +1 -1
  17. package/dist/commands/generate.js +7 -0
  18. package/dist/commands/generate.js.map +1 -1
  19. package/dist/commands/verify.d.ts.map +1 -1
  20. package/dist/commands/verify.js +20 -1
  21. package/dist/commands/verify.js.map +1 -1
  22. package/dist/core/agent-adapter.d.ts +1 -0
  23. package/dist/core/agent-adapter.d.ts.map +1 -1
  24. package/dist/core/agent-adapter.js +20 -9
  25. package/dist/core/agent-adapter.js.map +1 -1
  26. package/dist/core/context-extractor.d.ts +9 -0
  27. package/dist/core/context-extractor.d.ts.map +1 -0
  28. package/dist/core/context-extractor.js +60 -0
  29. package/dist/core/context-extractor.js.map +1 -0
  30. package/dist/core/gherkin-parser.d.ts.map +1 -1
  31. package/dist/core/gherkin-parser.js +4 -2
  32. package/dist/core/gherkin-parser.js.map +1 -1
  33. package/dist/core/step-indexer.d.ts +19 -0
  34. package/dist/core/step-indexer.d.ts.map +1 -0
  35. package/dist/core/step-indexer.js +86 -0
  36. package/dist/core/step-indexer.js.map +1 -0
  37. package/dist/core/syntax-validator.d.ts +6 -0
  38. package/dist/core/syntax-validator.d.ts.map +1 -0
  39. package/dist/core/syntax-validator.js +37 -0
  40. package/dist/core/syntax-validator.js.map +1 -0
  41. package/dist/generators/preset-csharp-dotnet.d.ts +6 -0
  42. package/dist/generators/preset-csharp-dotnet.d.ts.map +1 -0
  43. package/dist/generators/preset-csharp-dotnet.js +38 -0
  44. package/dist/generators/preset-csharp-dotnet.js.map +1 -0
  45. package/dist/generators/preset-flutter.d.ts +6 -0
  46. package/dist/generators/preset-flutter.d.ts.map +1 -0
  47. package/dist/generators/preset-flutter.js +33 -0
  48. package/dist/generators/preset-flutter.js.map +1 -0
  49. package/dist/generators/preset-go.d.ts +6 -0
  50. package/dist/generators/preset-go.d.ts.map +1 -0
  51. package/dist/generators/preset-go.js +57 -0
  52. package/dist/generators/preset-go.js.map +1 -0
  53. package/dist/generators/preset-node-nestjs.d.ts +6 -0
  54. package/dist/generators/preset-node-nestjs.d.ts.map +1 -0
  55. package/dist/generators/preset-node-nestjs.js +52 -0
  56. package/dist/generators/preset-node-nestjs.js.map +1 -0
  57. package/dist/generators/preset-php-laravel.d.ts +6 -0
  58. package/dist/generators/preset-php-laravel.d.ts.map +1 -0
  59. package/dist/generators/preset-php-laravel.js +49 -0
  60. package/dist/generators/preset-php-laravel.js.map +1 -0
  61. package/dist/generators/preset-python-fastapi.d.ts +6 -0
  62. package/dist/generators/preset-python-fastapi.d.ts.map +1 -0
  63. package/dist/generators/preset-python-fastapi.js +38 -0
  64. package/dist/generators/preset-python-fastapi.js.map +1 -0
  65. package/dist/generators/preset-ruby-rails.d.ts +6 -0
  66. package/dist/generators/preset-ruby-rails.d.ts.map +1 -0
  67. package/dist/generators/preset-ruby-rails.js +28 -0
  68. package/dist/generators/preset-ruby-rails.js.map +1 -0
  69. package/dist/generators/preset-rust-axum.d.ts +6 -0
  70. package/dist/generators/preset-rust-axum.d.ts.map +1 -0
  71. package/dist/generators/preset-rust-axum.js +40 -0
  72. package/dist/generators/preset-rust-axum.js.map +1 -0
  73. package/dist/generators/presets.d.ts +7 -0
  74. package/dist/generators/presets.d.ts.map +1 -0
  75. package/dist/generators/presets.js +52 -0
  76. package/dist/generators/presets.js.map +1 -0
  77. package/dist/generators/prompt-templates/base.d.ts +4 -0
  78. package/dist/generators/prompt-templates/base.d.ts.map +1 -1
  79. package/dist/generators/prompt-templates/base.js.map +1 -1
  80. package/dist/generators/prompts.d.ts.map +1 -1
  81. package/dist/generators/prompts.js +42 -1
  82. package/dist/generators/prompts.js.map +1 -1
  83. package/dist/index.js +12 -0
  84. package/dist/index.js.map +1 -1
  85. package/dist/ui/public/assets/favicon.svg +8 -0
  86. package/dist/ui/public/assets/logo.svg +1 -0
  87. package/dist/ui/public/index.html +501 -0
  88. package/dist/ui/server.d.ts.map +1 -1
  89. package/dist/ui/server.js +107 -0
  90. package/dist/ui/server.js.map +1 -1
  91. package/docs/COMMANDS.md +73 -0
  92. package/docs/ai-skills.md +42 -0
  93. package/docs/ast-step-indexer.md +47 -0
  94. package/docs/headless-mode.md +74 -0
  95. package/package.json +5 -3
@@ -0,0 +1,60 @@
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.ContextExtractor = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const logger_1 = require("../utils/logger");
10
+ class ContextExtractor {
11
+ extract(workspaceRoot) {
12
+ const context = {
13
+ dataModels: [],
14
+ domSelectors: []
15
+ };
16
+ try {
17
+ // 1. Prisma Schema (Data Models)
18
+ const prismaPath = path_1.default.join(workspaceRoot, 'prisma', 'schema.prisma');
19
+ if (fs_1.default.existsSync(prismaPath)) {
20
+ const prismaContent = fs_1.default.readFileSync(prismaPath, 'utf8');
21
+ const models = prismaContent.match(/model\s+(\w+)\s+{([^}]+)}/g) || [];
22
+ // Keep it concise for prompt injection (limit 5 models)
23
+ context.dataModels = models.slice(0, 5).map(m => m.substring(0, 300) + (m.length > 300 ? '...' : ''));
24
+ }
25
+ // 2. DOM Selectors (Playwright/Cypress Page Objects)
26
+ const e2eDir = path_1.default.join(workspaceRoot, 'e2e');
27
+ if (fs_1.default.existsSync(e2eDir)) {
28
+ this.findSelectors(e2eDir, context.domSelectors);
29
+ }
30
+ }
31
+ catch (e) {
32
+ logger_1.logger.error(`Context extraction error: ${e.message}`);
33
+ }
34
+ return context;
35
+ }
36
+ findSelectors(dir, selectors) {
37
+ if (selectors.length > 20)
38
+ return; // limit
39
+ const files = fs_1.default.readdirSync(dir);
40
+ for (const file of files) {
41
+ const fullPath = path_1.default.join(dir, file);
42
+ const stat = fs_1.default.statSync(fullPath);
43
+ if (stat.isDirectory()) {
44
+ this.findSelectors(fullPath, selectors);
45
+ }
46
+ else if (fullPath.endsWith('.ts') || fullPath.endsWith('.js')) {
47
+ const content = fs_1.default.readFileSync(fullPath, 'utf8');
48
+ // Look for common selector patterns: data-testid, data-test
49
+ const matches = [...content.matchAll(/data-test(?:id)?=['"]([^'"]+)['"]/g)];
50
+ matches.forEach(m => {
51
+ const val = m[1];
52
+ if (!selectors.includes(val))
53
+ selectors.push(val);
54
+ });
55
+ }
56
+ }
57
+ }
58
+ }
59
+ exports.ContextExtractor = ContextExtractor;
60
+ //# sourceMappingURL=context-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-extractor.js","sourceRoot":"","sources":["../../src/core/context-extractor.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,4CAAyC;AAOzC,MAAa,gBAAgB;IACpB,OAAO,CAAC,aAAqB;QAClC,MAAM,OAAO,GAAe;YAC1B,UAAU,EAAE,EAAE;YACd,YAAY,EAAE,EAAE;SACjB,CAAC;QAEF,IAAI,CAAC;YACH,iCAAiC;YACjC,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;YACvE,IAAI,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC9B,MAAM,aAAa,GAAG,YAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;gBAC1D,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,4BAA4B,CAAC,IAAI,EAAE,CAAC;gBACvE,wDAAwD;gBACxD,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACxG,CAAC;YAED,qDAAqD;YACrD,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;YAC/C,IAAI,YAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,eAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,aAAa,CAAC,GAAW,EAAE,SAAmB;QACpD,IAAI,SAAS,CAAC,MAAM,GAAG,EAAE;YAAE,OAAO,CAAC,QAAQ;QAC3C,MAAM,KAAK,GAAG,YAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACnC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACvB,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YAC1C,CAAC;iBAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChE,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAClD,4DAA4D;gBAC5D,MAAM,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,oCAAoC,CAAC,CAAC,CAAC;gBAC5E,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;oBAClB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBACjB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;wBAAE,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACpD,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAhDD,4CAgDC"}
@@ -1 +1 @@
1
- {"version":3,"file":"gherkin-parser.d.ts","sourceRoot":"","sources":["../../src/core/gherkin-parser.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,cAAc,EAAE;QACd,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,MAAM,EAAE,WAAW,EAAE,CAAC;KACvB,CAAC;CACH;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CAgJnE"}
1
+ {"version":3,"file":"gherkin-parser.d.ts","sourceRoot":"","sources":["../../src/core/gherkin-parser.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,cAAc,EAAE;QACd,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,MAAM,EAAE,WAAW,EAAE,CAAC;KACvB,CAAC;CACH;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CAmJnE"}
@@ -119,8 +119,10 @@ function parseGherkinText(gherkinText) {
119
119
  fieldsMap.set(fieldName, { name: fieldName, type, validations: [] });
120
120
  }
121
121
  const existing = fieldsMap.get(fieldName);
122
- st.tags.forEach(tag => {
123
- if (tag.startsWith('@validate:') && !existing.validations.includes(tag)) {
122
+ // Extract inline tags from step text
123
+ const inlineTags = st.text.match(/@[\w:(),]+/g) || [];
124
+ inlineTags.forEach(tag => {
125
+ if (!existing.validations.includes(tag)) {
124
126
  existing.validations.push(tag);
125
127
  }
126
128
  });
@@ -1 +1 @@
1
- {"version":3,"file":"gherkin-parser.js","sourceRoot":"","sources":["../../src/core/gherkin-parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gherkin-parser.js","sourceRoot":"","sources":["../../src/core/gherkin-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export interface ExtractedStep {
2
+ keyword: string;
3
+ pattern: string;
4
+ filePath: string;
5
+ }
6
+ export interface IStepParser {
7
+ parse(workspaceRoot: string): ExtractedStep[];
8
+ }
9
+ export declare class TypeScriptStepParser implements IStepParser {
10
+ parse(workspaceRoot: string): ExtractedStep[];
11
+ }
12
+ export declare class RegexStepParser implements IStepParser {
13
+ parse(workspaceRoot: string): ExtractedStep[];
14
+ }
15
+ export declare class StepIndexer {
16
+ private parsers;
17
+ getAvailableSteps(workspaceRoot: string): ExtractedStep[];
18
+ }
19
+ //# sourceMappingURL=step-indexer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-indexer.d.ts","sourceRoot":"","sources":["../../src/core/step-indexer.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,aAAa,EAAE,MAAM,GAAG,aAAa,EAAE,CAAC;CAC/C;AAED,qBAAa,oBAAqB,YAAW,WAAW;IAC/C,KAAK,CAAC,aAAa,EAAE,MAAM,GAAG,aAAa,EAAE;CAqDrD;AAED,qBAAa,eAAgB,YAAW,WAAW;IAC1C,KAAK,CAAC,aAAa,EAAE,MAAM,GAAG,aAAa,EAAE;CAKrD;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAGb;IAEK,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,aAAa,EAAE;CAYjE"}
@@ -0,0 +1,86 @@
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.StepIndexer = exports.RegexStepParser = exports.TypeScriptStepParser = void 0;
7
+ const ts_morph_1 = require("ts-morph");
8
+ const path_1 = __importDefault(require("path"));
9
+ const logger_1 = require("../utils/logger");
10
+ class TypeScriptStepParser {
11
+ parse(workspaceRoot) {
12
+ const steps = [];
13
+ const project = new ts_morph_1.Project();
14
+ // Look in common TS/JS E2E directories
15
+ const searchGlobs = [
16
+ path_1.default.join(workspaceRoot, 'cypress/support/**/*.ts'),
17
+ path_1.default.join(workspaceRoot, 'cypress/support/**/*.js'),
18
+ path_1.default.join(workspaceRoot, 'e2e/steps/**/*.ts'),
19
+ path_1.default.join(workspaceRoot, 'tests/steps/**/*.ts'),
20
+ path_1.default.join(workspaceRoot, 'features/step_definitions/**/*.ts')
21
+ ];
22
+ project.addSourceFilesAtPaths(searchGlobs);
23
+ const sourceFiles = project.getSourceFiles();
24
+ for (const sf of sourceFiles) {
25
+ // Find all call expressions like Given('...', () => {})
26
+ const callExpressions = sf.getDescendantsOfKind(ts_morph_1.SyntaxKind.CallExpression);
27
+ for (const callExpr of callExpressions) {
28
+ const expression = callExpr.getExpression();
29
+ const funcName = expression.getText();
30
+ if (['Given', 'When', 'Then', 'step', 'dado', 'cuando', 'entonces'].includes(funcName)) {
31
+ const args = callExpr.getArguments();
32
+ if (args.length > 0) {
33
+ const firstArg = args[0];
34
+ let pattern = '';
35
+ // If it's a string literal: Given("I login", ...)
36
+ if (firstArg.getKindName() === 'StringLiteral' || firstArg.getKindName() === 'NoSubstitutionTemplateLiteral') {
37
+ pattern = firstArg.getText().replace(/^['"`]/, '').replace(/['"`]$/, '');
38
+ }
39
+ // If it's a regex: Given(/^I login$/, ...)
40
+ else if (firstArg.getKindName() === 'RegularExpressionLiteral') {
41
+ pattern = firstArg.getText();
42
+ }
43
+ if (pattern) {
44
+ steps.push({
45
+ keyword: funcName,
46
+ pattern,
47
+ filePath: sf.getFilePath()
48
+ });
49
+ }
50
+ }
51
+ }
52
+ }
53
+ }
54
+ return steps;
55
+ }
56
+ }
57
+ exports.TypeScriptStepParser = TypeScriptStepParser;
58
+ class RegexStepParser {
59
+ parse(workspaceRoot) {
60
+ // A fallback parser for languages without AST support yet (Python, Java, etc.)
61
+ // Searches text for @given('...') or @When("...")
62
+ return [];
63
+ }
64
+ }
65
+ exports.RegexStepParser = RegexStepParser;
66
+ class StepIndexer {
67
+ parsers = [
68
+ new TypeScriptStepParser(),
69
+ new RegexStepParser() // Fallback
70
+ ];
71
+ getAvailableSteps(workspaceRoot) {
72
+ const allSteps = [];
73
+ for (const parser of this.parsers) {
74
+ try {
75
+ const parsed = parser.parse(workspaceRoot);
76
+ allSteps.push(...parsed);
77
+ }
78
+ catch (e) {
79
+ logger_1.logger.error(`Error parsing steps: ${e.message}`);
80
+ }
81
+ }
82
+ return allSteps;
83
+ }
84
+ }
85
+ exports.StepIndexer = StepIndexer;
86
+ //# sourceMappingURL=step-indexer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-indexer.js","sourceRoot":"","sources":["../../src/core/step-indexer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Validates TypeScript syntax in-memory before writing to disk.
3
+ * Returns true if valid, false if syntax errors exist.
4
+ */
5
+ export declare function validateTypeScriptSyntax(filename: string, content: string): boolean;
6
+ //# sourceMappingURL=syntax-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syntax-validator.d.ts","sourceRoot":"","sources":["../../src/core/syntax-validator.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAyBnF"}
@@ -0,0 +1,37 @@
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.validateTypeScriptSyntax = validateTypeScriptSyntax;
7
+ const ts_morph_1 = require("ts-morph");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ /**
10
+ * Validates TypeScript syntax in-memory before writing to disk.
11
+ * Returns true if valid, false if syntax errors exist.
12
+ */
13
+ function validateTypeScriptSyntax(filename, content) {
14
+ if (!filename.endsWith('.ts') && !filename.endsWith('.tsx')) {
15
+ return true; // We only validate TS files for now
16
+ }
17
+ try {
18
+ const project = new ts_morph_1.Project({ useInMemoryFileSystem: true });
19
+ const sourceFile = project.createSourceFile(filename, content);
20
+ // Check syntactic diagnostics (fast) rather than semantic (slow, requires full project)
21
+ const diagnostics = sourceFile.getPreEmitDiagnostics();
22
+ const errors = diagnostics.filter(d => d.getCategory() === 1); // Error category
23
+ if (errors.length > 0) {
24
+ console.log(chalk_1.default.yellow(` ⚠️ Pre-validation failed for ${filename}:`));
25
+ for (const diag of errors.slice(0, 3)) {
26
+ console.log(chalk_1.default.yellow(` - ${diag.getMessageText()}`));
27
+ }
28
+ return false;
29
+ }
30
+ return true;
31
+ }
32
+ catch (err) {
33
+ console.log(chalk_1.default.yellow(` ⚠️ Pre-validation exception for ${filename}: ${err.message}`));
34
+ return false;
35
+ }
36
+ }
37
+ //# sourceMappingURL=syntax-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syntax-validator.js","sourceRoot":"","sources":["../../src/core/syntax-validator.ts"],"names":[],"mappings":";;;;;AAOA,4DAyBC;AAhCD,uCAAmC;AACnC,kDAA0B;AAE1B;;;GAGG;AACH,SAAgB,wBAAwB,CAAC,QAAgB,EAAE,OAAe;IACxE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5D,OAAO,IAAI,CAAC,CAAC,oCAAoC;IACnD,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,kBAAO,CAAC,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,MAAM,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAE/D,wFAAwF;QACxF,MAAM,WAAW,GAAG,UAAU,CAAC,qBAAqB,EAAE,CAAC;QACvD,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,iBAAiB;QAEhF,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,mCAAmC,QAAQ,GAAG,CAAC,CAAC,CAAC;YAC1E,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBACtC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC;YAChE,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,sCAAsC,QAAQ,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC5F,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { ParsedFeature } from '../core/gherkin-parser';
2
+ export declare function generateCsharpDotnetPreset(parsed: ParsedFeature): {
3
+ filename: string;
4
+ content: string;
5
+ }[];
6
+ //# sourceMappingURL=preset-csharp-dotnet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preset-csharp-dotnet.d.ts","sourceRoot":"","sources":["../../src/generators/preset-csharp-dotnet.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,aAAa,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,CAgCzG"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ /* ==========================================================================
3
+ gherkin-ai-cli - C# .NET & SpecFlow Preset Generator
4
+ ========================================================================== */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.generateCsharpDotnetPreset = generateCsharpDotnetPreset;
7
+ function generateCsharpDotnetPreset(parsed) {
8
+ const className = parsed.featureName.replace(/[^a-zA-Z0-9]/g, '') + 'StepDefinitions';
9
+ const stepDefCode = `// SpecFlow Step Definitions for ${parsed.featureName}
10
+ using System;
11
+ using TechTalk.SpecFlow;
12
+
13
+ namespace Tests.Steps
14
+ {
15
+ [Binding]
16
+ public class ${className}
17
+ {
18
+ ${parsed.scenarios.map(sc => `
19
+ // Scenario: ${sc.name}
20
+ ${sc.steps.map(st => `
21
+ [${st.keyword.trim()}("${st.text.replace(/"/g, '""')}")]
22
+ public void ${st.keyword.trim()}${st.text.replace(/[^a-zA-Z0-9]/g, '')}()
23
+ {
24
+ // TODO: Implement step
25
+ }
26
+ `).join('')}
27
+ `).join('')}
28
+ }
29
+ }
30
+ `;
31
+ return [
32
+ {
33
+ filename: `${className}.cs`,
34
+ content: stepDefCode
35
+ }
36
+ ];
37
+ }
38
+ //# sourceMappingURL=preset-csharp-dotnet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preset-csharp-dotnet.js","sourceRoot":"","sources":["../../src/generators/preset-csharp-dotnet.ts"],"names":[],"mappings":";AAAA;;gFAEgF;;AAIhF,gEAgCC;AAhCD,SAAgB,0BAA0B,CAAC,MAAqB;IAC9D,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,GAAG,iBAAiB,CAAC;IAEtF,MAAM,WAAW,GAAG,oCAAoC,MAAM,CAAC,WAAW;;;;;;;mBAOzD,SAAS;;EAE1B,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;uBACN,EAAE,CAAC,IAAI;EAC5B,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;WACV,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;sBACtC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC;;;;CAI7E,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;CACV,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;;;CAGV,CAAC;IAEA,OAAO;QACL;YACE,QAAQ,EAAE,GAAG,SAAS,KAAK;YAC3B,OAAO,EAAE,WAAW;SACrB;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { ParsedFeature } from '../core/gherkin-parser';
2
+ export declare function generateFlutterPreset(parsed: ParsedFeature): {
3
+ filename: string;
4
+ content: string;
5
+ }[];
6
+ //# sourceMappingURL=preset-flutter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preset-flutter.d.ts","sourceRoot":"","sources":["../../src/generators/preset-flutter.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,CA2BpG"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ /* ==========================================================================
3
+ gherkin-ai-cli - Flutter (Dart) Preset Generator
4
+ ========================================================================== */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.generateFlutterPreset = generateFlutterPreset;
7
+ function generateFlutterPreset(parsed) {
8
+ const moduleName = parsed.featureName.toLowerCase().replace(/[^a-z0-9]/g, '_');
9
+ const stepDefCode = `// flutter_test Step Definitions for ${parsed.featureName}
10
+ import 'package:flutter_test/flutter_test.dart';
11
+
12
+ void main() {
13
+ group('${parsed.featureName.replace(/'/g, "\\'")}', () {
14
+
15
+ ${parsed.scenarios.map(sc => `
16
+ testWidgets('${sc.name.replace(/'/g, "\\'")}', (WidgetTester tester) async {
17
+ ${sc.steps.map(st => `
18
+ // ${st.keyword.trim()} ${st.text}
19
+ // TODO: Implement step
20
+ `).join('')}
21
+ });
22
+ `).join('')}
23
+ });
24
+ }
25
+ `;
26
+ return [
27
+ {
28
+ filename: `test/${moduleName}_test.dart`,
29
+ content: stepDefCode
30
+ }
31
+ ];
32
+ }
33
+ //# sourceMappingURL=preset-flutter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preset-flutter.js","sourceRoot":"","sources":["../../src/generators/preset-flutter.ts"],"names":[],"mappings":";AAAA;;gFAEgF;;AAIhF,sDA2BC;AA3BD,SAAgB,qBAAqB,CAAC,MAAqB;IACzD,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IAE/E,MAAM,WAAW,GAAG,wCAAwC,MAAM,CAAC,WAAW;;;;WAIrE,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;;EAEhD,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;mBACV,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;EAC7C,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;WACV,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI;;CAEtC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;;CAEV,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;;;CAGV,CAAC;IAEA,OAAO;QACL;YACE,QAAQ,EAAE,QAAQ,UAAU,YAAY;YACxC,OAAO,EAAE,WAAW;SACrB;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { ParsedFeature } from '../core/gherkin-parser';
2
+ export declare function generateGoPreset(parsed: ParsedFeature): {
3
+ filename: string;
4
+ content: string;
5
+ }[];
6
+ //# sourceMappingURL=preset-go.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preset-go.d.ts","sourceRoot":"","sources":["../../src/generators/preset-go.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,CAmD/F"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ /* ==========================================================================
3
+ gherkin-ai-cli - Go & Godog Preset Generator
4
+ ========================================================================== */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.generateGoPreset = generateGoPreset;
7
+ function generateGoPreset(parsed) {
8
+ const packageName = parsed.featureName.toLowerCase().replace(/[^a-z0-9]/g, '');
9
+ const stepDefCode = `// Godog Step Definitions for ${parsed.featureName}
10
+ package ${packageName || 'bddtests'}
11
+
12
+ import (
13
+ "context"
14
+ "testing"
15
+ "github.com/cucumber/godog"
16
+ )
17
+
18
+ ${parsed.scenarios.map(sc => `
19
+ // Scenario: ${sc.name}
20
+ ${sc.steps.map(st => `
21
+ func ${st.text.toLowerCase().replace(/[^a-z0-9]/g, '')}(ctx context.Context) (context.Context, error) {
22
+ // TODO: Implement step
23
+ return ctx, godog.ErrPending
24
+ }
25
+ `).join('')}
26
+ `).join('')}
27
+
28
+ func InitializeScenario(ctx *godog.ScenarioContext) {
29
+ ${parsed.scenarios.map(sc => `
30
+ // ${sc.name}
31
+ ${sc.steps.map(st => ` ctx.Step(\`^${st.text.replace(/"/g, '\\"')}$\`, ${st.text.toLowerCase().replace(/[^a-z0-9]/g, '')})`).join('\n')}
32
+ `).join('\n')}
33
+ }
34
+
35
+ func TestFeatures(t *testing.T) {
36
+ suite := godog.TestSuite{
37
+ ScenarioInitializer: InitializeScenario,
38
+ Options: &godog.Options{
39
+ Format: "pretty",
40
+ Paths: []string{"features"},
41
+ TestingT: t,
42
+ },
43
+ }
44
+
45
+ if suite.Run() != 0 {
46
+ t.Fatal("non-zero status returned, failed to run feature tests")
47
+ }
48
+ }
49
+ `;
50
+ return [
51
+ {
52
+ filename: `${packageName}_test.go`,
53
+ content: stepDefCode
54
+ }
55
+ ];
56
+ }
57
+ //# sourceMappingURL=preset-go.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preset-go.js","sourceRoot":"","sources":["../../src/generators/preset-go.ts"],"names":[],"mappings":";AAAA;;gFAEgF;;AAIhF,4CAmDC;AAnDD,SAAgB,gBAAgB,CAAC,MAAqB;IACpD,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAE/E,MAAM,WAAW,GAAG,iCAAiC,MAAM,CAAC,WAAW;UAC/D,WAAW,IAAI,UAAU;;;;;;;;EAQjC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;eACd,EAAE,CAAC,IAAI;EACpB,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;OACd,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;;;;CAIrD,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;CACV,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;;;EAGT,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;SACpB,EAAE,CAAC,IAAI;EACd,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;CACzI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;CAiBZ,CAAC;IAEA,OAAO;QACL;YACE,QAAQ,EAAE,GAAG,WAAW,UAAU;YAClC,OAAO,EAAE,WAAW;SACrB;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { ParsedFeature } from '../core/gherkin-parser';
2
+ export declare function generateNodeNestJsPreset(parsed: ParsedFeature): {
3
+ filename: string;
4
+ content: string;
5
+ }[];
6
+ //# sourceMappingURL=preset-node-nestjs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preset-node-nestjs.d.ts","sourceRoot":"","sources":["../../src/generators/preset-node-nestjs.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,aAAa,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,CA8CvG"}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ /* ==========================================================================
3
+ gherkin-ai-cli - NestJS (cucumber-js) Preset Generator
4
+ ========================================================================== */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.generateNodeNestJsPreset = generateNodeNestJsPreset;
7
+ function generateNodeNestJsPreset(parsed) {
8
+ const className = parsed.featureName.replace(/[^a-zA-Z0-9]/g, '');
9
+ const moduleName = parsed.featureName.toLowerCase().replace(/[^a-z0-9]/g, '-');
10
+ const stepDefCode = `// cucumber-js Step Definitions for NestJS - ${parsed.featureName}
11
+ import { Given, When, Then, Before, After } from '@cucumber/cucumber';
12
+ import { Test, TestingModule } from '@nestjs/testing';
13
+ import { INestApplication } from '@nestjs/common';
14
+ import * as request from 'supertest';
15
+ // import { AppModule } from '../../src/app.module';
16
+
17
+ let app: INestApplication;
18
+ let res: request.Response;
19
+
20
+ Before(async () => {
21
+ /*
22
+ const moduleFixture: TestingModule = await Test.createTestingModule({
23
+ imports: [AppModule],
24
+ }).compile();
25
+
26
+ app = moduleFixture.createNestApplication();
27
+ await app.init();
28
+ */
29
+ });
30
+
31
+ After(async () => {
32
+ // await app.close();
33
+ });
34
+
35
+ ${parsed.scenarios.map(sc => `
36
+ // Scenario: ${sc.name}
37
+ ${sc.steps.map(st => `
38
+ ${st.keyword.trim()}('${st.text.replace(/'/g, "\\'")}', async function () {
39
+ // TODO: Implement step
40
+ return 'pending';
41
+ });
42
+ `).join('')}
43
+ `).join('')}
44
+ `;
45
+ return [
46
+ {
47
+ filename: `test/steps/${moduleName}.steps.ts`,
48
+ content: stepDefCode
49
+ }
50
+ ];
51
+ }
52
+ //# sourceMappingURL=preset-node-nestjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preset-node-nestjs.js","sourceRoot":"","sources":["../../src/generators/preset-node-nestjs.ts"],"names":[],"mappings":";AAAA;;gFAEgF;;AAIhF,4DA8CC;AA9CD,SAAgB,wBAAwB,CAAC,MAAqB;IAC5D,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IAClE,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IAE/E,MAAM,WAAW,GAAG,gDAAgD,MAAM,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;EAyBtF,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;eACd,EAAE,CAAC,IAAI;EACpB,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;EACnB,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;;;;CAInD,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;CACV,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;CACV,CAAC;IAEA,OAAO;QACL;YACE,QAAQ,EAAE,cAAc,UAAU,WAAW;YAC7C,OAAO,EAAE,WAAW;SACrB;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { ParsedFeature } from '../core/gherkin-parser';
2
+ export declare function generatePhpLaravelPreset(parsed: ParsedFeature): {
3
+ filename: string;
4
+ content: string;
5
+ }[];
6
+ //# sourceMappingURL=preset-php-laravel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preset-php-laravel.d.ts","sourceRoot":"","sources":["../../src/generators/preset-php-laravel.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,aAAa,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,CA2CvG"}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ /* ==========================================================================
3
+ gherkin-ai-cli - PHP Laravel & Behat Preset Generator
4
+ ========================================================================== */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.generatePhpLaravelPreset = generatePhpLaravelPreset;
7
+ function generatePhpLaravelPreset(parsed) {
8
+ const className = parsed.featureName.replace(/[^a-zA-Z0-9]/g, '') + 'Context';
9
+ const stepDefCode = `<?php
10
+ // Behat Context for ${parsed.featureName}
11
+
12
+ namespace Tests\\Behat;
13
+
14
+ use Behat\\Behat\\Context\\Context;
15
+ use Tests\\TestCase;
16
+
17
+ class ${className} extends TestCase implements Context
18
+ {
19
+ /**
20
+ * Initializes context.
21
+ * Every scenario gets its own context instance.
22
+ */
23
+ public function __construct()
24
+ {
25
+ parent::setUp();
26
+ }
27
+
28
+ ${parsed.scenarios.map(sc => `
29
+ // Scenario: ${sc.name}
30
+ ${sc.steps.map(st => `
31
+ /**
32
+ * @${st.keyword.trim()} ${st.text.replace(/'/g, "\\'")}
33
+ */
34
+ public function step${st.text.replace(/[^a-zA-Z0-9]/g, '')}()
35
+ {
36
+ // TODO: Implement step
37
+ }
38
+ `).join('')}
39
+ `).join('')}
40
+ }
41
+ `;
42
+ return [
43
+ {
44
+ filename: `${className}.php`,
45
+ content: stepDefCode
46
+ }
47
+ ];
48
+ }
49
+ //# sourceMappingURL=preset-php-laravel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preset-php-laravel.js","sourceRoot":"","sources":["../../src/generators/preset-php-laravel.ts"],"names":[],"mappings":";AAAA;;gFAEgF;;AAIhF,4DA2CC;AA3CD,SAAgB,wBAAwB,CAAC,MAAqB;IAC5D,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC;IAE9E,MAAM,WAAW,GAAG;uBACC,MAAM,CAAC,WAAW;;;;;;;QAOjC,SAAS;;;;;;;;;;;EAWf,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;mBACV,EAAE,CAAC,IAAI;EACxB,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;;UAEX,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;;0BAEjC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC;;;;CAI7D,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;CACV,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;;CAEV,CAAC;IAEA,OAAO;QACL;YACE,QAAQ,EAAE,GAAG,SAAS,MAAM;YAC5B,OAAO,EAAE,WAAW;SACrB;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { ParsedFeature } from '../core/gherkin-parser';
2
+ export declare function generatePythonFastApiPreset(parsed: ParsedFeature): {
3
+ filename: string;
4
+ content: string;
5
+ }[];
6
+ //# sourceMappingURL=preset-python-fastapi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preset-python-fastapi.d.ts","sourceRoot":"","sources":["../../src/generators/preset-python-fastapi.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,aAAa,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,CAgC1G"}