@lynxwall/cucumber-tsflow 4.1.7 → 5.0.3

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 (76) hide show
  1. package/README.md +245 -73
  2. package/bin/cucumber-tsflow +2 -1
  3. package/lib/behave.js +25 -2
  4. package/lib/cli/argv-parser.d.ts +24 -0
  5. package/lib/cli/argv-parser.js +117 -0
  6. package/lib/cli/index.d.ts +22 -0
  7. package/lib/cli/index.js +105 -0
  8. package/lib/cli/load-configuration.d.ts +20 -0
  9. package/lib/cli/load-configuration.js +98 -0
  10. package/lib/cli/run.d.ts +1 -0
  11. package/lib/cli/run.js +54 -0
  12. package/lib/cucumber/binding-decorator.js +75 -87
  13. package/lib/cucumber/binding-registry.d.ts +8 -0
  14. package/lib/cucumber/binding-registry.js +62 -11
  15. package/lib/cucumber/hook-decorators.d.ts +30 -12
  16. package/lib/cucumber/hook-decorators.js +54 -23
  17. package/lib/cucumber/managed-scenario-context.js +6 -3
  18. package/lib/cucumber/message-collector.d.ts +55 -0
  19. package/lib/cucumber/message-collector.js +143 -0
  20. package/lib/cucumber/step-definition-decorators.js +15 -8
  21. package/lib/cucumber/utils.d.ts +16 -0
  22. package/lib/cucumber/utils.js +88 -0
  23. package/lib/esnode.d.ts +0 -0
  24. package/lib/esnode.js +20 -0
  25. package/lib/{tsflow.d.ts → esvue.d.ts} +0 -0
  26. package/lib/esvue.js +52 -0
  27. package/lib/formatters/behave-json-formatter.d.ts +36 -5
  28. package/lib/formatters/behave-json-formatter.js +36 -12
  29. package/lib/formatters/tsflow-snippet-syntax.js +44 -14
  30. package/lib/gherkin/configuration.d.ts +30 -0
  31. package/lib/gherkin/configuration.js +37 -0
  32. package/lib/gherkin/gherkin-feature.d.ts +28 -0
  33. package/lib/gherkin/gherkin-feature.js +345 -0
  34. package/lib/gherkin/gherkin-manager.d.ts +29 -0
  35. package/lib/gherkin/gherkin-manager.js +123 -0
  36. package/lib/gherkin/models.d.ts +45 -0
  37. package/lib/{tsflow.js → gherkin/models.js} +2 -4
  38. package/lib/snippet.d.ts +1 -0
  39. package/lib/snippet.js +38 -0
  40. package/lib/transpilers/esbuild-transpiler.d.ts +4 -0
  41. package/lib/transpilers/esbuild-transpiler.js +31 -0
  42. package/lib/transpilers/esbuild.d.ts +12 -0
  43. package/lib/transpilers/esbuild.js +66 -0
  44. package/lib/transpilers/vue-sfc/compiler.d.ts +7 -0
  45. package/lib/transpilers/vue-sfc/compiler.js +32 -0
  46. package/lib/transpilers/vue-sfc/index.d.ts +25 -0
  47. package/lib/transpilers/vue-sfc/index.js +62 -0
  48. package/lib/transpilers/vue-sfc/main.d.ts +8 -0
  49. package/lib/transpilers/vue-sfc/main.js +266 -0
  50. package/lib/transpilers/vue-sfc/script.d.ts +5 -0
  51. package/lib/transpilers/vue-sfc/script.js +53 -0
  52. package/lib/transpilers/vue-sfc/template.d.ts +8 -0
  53. package/lib/transpilers/vue-sfc/template.js +113 -0
  54. package/lib/transpilers/vue-sfc/types.d.ts +55 -0
  55. package/lib/transpilers/vue-sfc/types.js +13 -0
  56. package/lib/transpilers/vue-sfc/utils/descriptorCache.d.ts +13 -0
  57. package/lib/transpilers/vue-sfc/utils/descriptorCache.js +67 -0
  58. package/lib/transpilers/vue-sfc/utils/error.d.ts +3 -0
  59. package/lib/transpilers/vue-sfc/utils/error.js +33 -0
  60. package/lib/transpilers/vue-sfc/utils/query.d.ts +13 -0
  61. package/lib/transpilers/vue-sfc/utils/query.js +46 -0
  62. package/lib/tsnode.js +7 -9
  63. package/lib/tsvue.d.ts +1 -7
  64. package/lib/tsvue.js +47 -27
  65. package/lib/types/step-binding-flags.d.ts +9 -1
  66. package/lib/types/step-binding-flags.js +10 -2
  67. package/lib/types/step-binding.d.ts +8 -2
  68. package/lib/types/step-binding.js +1 -1
  69. package/lib/utils/helpers.d.ts +6 -0
  70. package/lib/utils/helpers.js +28 -0
  71. package/lib/utils/logger.js +25 -2
  72. package/lib/utils/our-callsite.d.ts +1 -0
  73. package/lib/utils/our-callsite.js +33 -4
  74. package/lib/version.d.ts +1 -0
  75. package/lib/version.js +16 -0
  76. package/package.json +20 -9
@@ -1,23 +1,45 @@
1
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
2
+ if (k2 === undefined) k2 = k;
3
+ var desc = Object.getOwnPropertyDescriptor(m, k);
4
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
5
+ desc = { enumerable: true, get: function() { return m[k]; } };
6
+ }
7
+ Object.defineProperty(o, k2, desc);
8
+ }) : (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ o[k2] = m[k];
11
+ }));
12
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
13
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
14
+ }) : function(o, v) {
15
+ o["default"] = v;
16
+ });
17
+ var __importStar = (this && this.__importStar) || function (mod) {
18
+ if (mod && mod.__esModule) return mod;
19
+ var result = {};
20
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
21
+ __setModuleDefault(result, mod);
22
+ return result;
23
+ };
24
+ var __importDefault = (this && this.__importDefault) || function (mod) {
25
+ return (mod && mod.__esModule) ? mod : { "default": mod };
26
+ };
1
27
  (function (factory) {
2
28
  if (typeof module === "object" && typeof module.exports === "object") {
3
29
  var v = factory(require, exports);
4
30
  if (v !== undefined) module.exports = v;
5
31
  }
6
32
  else if (typeof define === "function" && define.amd) {
7
- define(["require", "exports", "@cucumber/cucumber/lib/formatter/json_formatter", "@cucumber/messages", "@cucumber/cucumber/lib/value_checker", "@cucumber/cucumber/lib/formatter/helpers"], factory);
33
+ define(["require", "exports", "@cucumber/cucumber/lib/formatter/helpers/index", "@cucumber/messages", "@cucumber/cucumber/lib/value_checker", "@cucumber/cucumber/lib/formatter/json_formatter"], factory);
8
34
  }
9
35
  })(function (require, exports) {
10
36
  "use strict";
11
37
  Object.defineProperty(exports, "__esModule", { value: true });
12
- const json_formatter_1 = require("@cucumber/cucumber/lib/formatter/json_formatter");
13
- const messages = require("@cucumber/messages");
38
+ const index_1 = require("@cucumber/cucumber/lib/formatter/helpers/index");
39
+ const messages = __importStar(require("@cucumber/messages"));
14
40
  const value_checker_1 = require("@cucumber/cucumber/lib/value_checker");
15
- const helpers_1 = require("@cucumber/cucumber/lib/formatter/helpers");
16
- const { getStepKeyword } = helpers_1.PickleParser;
17
- /**
18
- * Extending JsonFormatter.getStepData to add a name field to before
19
- * and After steps so that json can be exported to Behave Pro (name on steps required)
20
- */
41
+ const json_formatter_1 = __importDefault(require("@cucumber/cucumber/lib/formatter/json_formatter"));
42
+ const { getStepKeyword } = index_1.PickleParser;
21
43
  class BehaveJsonFormatter extends json_formatter_1.default {
22
44
  getStepData({ isBeforeHook, gherkinStepMap, pickleStepMap, testStep, testStepAttachments, testStepResult }) {
23
45
  var _a;
@@ -35,8 +57,9 @@
35
57
  data.name = '';
36
58
  }
37
59
  if ((0, value_checker_1.doesHaveValue)(testStep.stepDefinitionIds) && ((_a = testStep.stepDefinitionIds) === null || _a === void 0 ? void 0 : _a.length) === 1) {
38
- const stepDefinition = this.supportCodeLibrary.stepDefinitions.find(s => s.id === testStep.stepDefinitionIds[0]);
39
- data.match = { location: (0, helpers_1.formatLocation)(stepDefinition) };
60
+ const stepDefinitionId = testStep.stepDefinitionIds[0];
61
+ const stepDefinition = this.supportCodeLibrary.stepDefinitions.find(s => s.id === stepDefinitionId);
62
+ data.match = { location: (0, index_1.formatLocation)(stepDefinition) };
40
63
  }
41
64
  const { message, status } = testStepResult;
42
65
  data.result = {
@@ -58,5 +81,6 @@
58
81
  }
59
82
  }
60
83
  exports.default = BehaveJsonFormatter;
84
+ BehaveJsonFormatter.documentation = 'Prints the feature as JSON that can be used with Behave Pro';
61
85
  });
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVoYXZlLWpzb24tZm9ybWF0dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Zvcm1hdHRlcnMvYmVoYXZlLWpzb24tZm9ybWF0dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0lBQUEsb0ZBQTJGO0lBQzNGLCtDQUErQztJQUMvQyx3RUFBcUU7SUFDckUsc0VBQXdGO0lBR3hGLE1BQU0sRUFBRSxjQUFjLEVBQUUsR0FBRyxzQkFBWSxDQUFDO0lBV3hDOzs7T0FHRztJQUNILE1BQXFCLG1CQUFvQixTQUFRLHdCQUFhO1FBQzdELFdBQVcsQ0FBQyxFQUNYLFlBQVksRUFDWixjQUFjLEVBQ2QsYUFBYSxFQUNiLFFBQVEsRUFDUixtQkFBbUIsRUFDbkIsY0FBYyxFQUNTOztZQUN2QixNQUFNLElBQUksR0FBYyxFQUFFLENBQUM7WUFDM0IsSUFBSSxJQUFBLDZCQUFhLEVBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUN6QyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLFlBQXNCLENBQUMsQ0FBQztnQkFDbEUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQ3ZDLFVBQVUsQ0FBQyxRQUE4QixFQUN6QyxjQUFjLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN4QyxDQUFDO2dCQUNGLElBQUksQ0FBQyxPQUFPLEdBQUcsY0FBYyxDQUFDLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7Z0JBQzlELElBQUksQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUNuRSxJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7YUFDNUI7aUJBQU07Z0JBQ04sSUFBSSxDQUFDLE9BQU8sR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO2dCQUNqRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztnQkFDbkIsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7YUFDZjtZQUNELElBQUksSUFBQSw2QkFBYSxFQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUEsTUFBQSxRQUFRLENBQUMsaUJBQWlCLDBDQUFFLE1BQU0sTUFBSyxDQUFDLEVBQUU7Z0JBQzFGLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUNsRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQU0sUUFBUSxDQUFDLGlCQUE4QixDQUFDLENBQUMsQ0FBQyxDQUN6RCxDQUFDO2dCQUNGLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBQSx3QkFBYyxFQUFDLGNBQTZCLENBQUMsRUFBRSxDQUFDO2FBQ3pFO1lBQ0QsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxjQUFjLENBQUM7WUFDM0MsSUFBSSxDQUFDLE1BQU0sR0FBRztnQkFDYixNQUFNLEVBQUUsUUFBUSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLFdBQVcsRUFBRTthQUMzRCxDQUFDO1lBQ0YsSUFBSSxJQUFBLDZCQUFhLEVBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUMzQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsR0FBRyxPQUFPLENBQUM7YUFDekc7WUFDRCxJQUFJLE1BQU0sS0FBSyxRQUFRLENBQUMsb0JBQW9CLENBQUMsTUFBTSxJQUFJLElBQUEsNkJBQWEsRUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDOUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDO2FBQ3BDO1lBQ0QsSUFBSSxDQUFBLG1CQUFtQixhQUFuQixtQkFBbUIsdUJBQW5CLG1CQUFtQixDQUFFLE1BQU0sSUFBRyxDQUFDLEVBQUU7Z0JBQ3BDLElBQUksQ0FBQyxVQUFVLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDeEQsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJO29CQUNyQixTQUFTLEVBQUUsVUFBVSxDQUFDLFNBQVM7aUJBQy9CLENBQUMsQ0FBQyxDQUFDO2FBQ0o7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNiLENBQUM7S0FDRDtJQWhERCxzQ0FnREMifQ==
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVoYXZlLWpzb24tZm9ybWF0dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Zvcm1hdHRlcnMvYmVoYXZlLWpzb24tZm9ybWF0dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFBQSwwRUFBOEY7SUFDOUYsNkRBQStDO0lBQy9DLHdFQUFxRTtJQUNyRSxxR0FBNEU7SUFFNUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxHQUFHLG9CQUFZLENBQUM7SUErQ3hDLE1BQXFCLG1CQUFvQixTQUFRLHdCQUFhO1FBRzdELFdBQVcsQ0FBQyxFQUNYLFlBQVksRUFDWixjQUFjLEVBQ2QsYUFBYSxFQUNiLFFBQVEsRUFDUixtQkFBbUIsRUFDbkIsY0FBYyxFQUNTOztZQUN2QixNQUFNLElBQUksR0FBYyxFQUFFLENBQUM7WUFDM0IsSUFBSSxJQUFBLDZCQUFhLEVBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUN6QyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLFlBQXNCLENBQUMsQ0FBQztnQkFDbEUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQ3ZDLFVBQVUsQ0FBQyxRQUF1QyxFQUNsRCxjQUFjLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN4QyxDQUFDO2dCQUNGLElBQUksQ0FBQyxPQUFPLEdBQUcsY0FBYyxDQUFDLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7Z0JBQzlELElBQUksQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUNuRSxJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7YUFDNUI7aUJBQU07Z0JBQ04sSUFBSSxDQUFDLE9BQU8sR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO2dCQUNqRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztnQkFDbkIsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7YUFDZjtZQUNELElBQUksSUFBQSw2QkFBYSxFQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUEsTUFBQSxRQUFRLENBQUMsaUJBQWlCLDBDQUFFLE1BQU0sTUFBSyxDQUFDLEVBQUU7Z0JBQzFGLE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2RCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssZ0JBQWdCLENBQUMsQ0FBQztnQkFDcEcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLFFBQVEsRUFBRSxJQUFBLHNCQUFjLEVBQUMsY0FBNkIsQ0FBQyxFQUFFLENBQUM7YUFDekU7WUFDRCxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLGNBQWMsQ0FBQztZQUMzQyxJQUFJLENBQUMsTUFBTSxHQUFHO2dCQUNiLE1BQU0sRUFBRSxRQUFRLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFO2FBQzNELENBQUM7WUFDRixJQUFJLElBQUEsNkJBQWEsRUFBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQzNDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsc0JBQXNCLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE9BQU8sQ0FBQzthQUN6RztZQUNELElBQUksTUFBTSxLQUFLLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLElBQUksSUFBQSw2QkFBYSxFQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUM5RSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUM7YUFDcEM7WUFDRCxJQUFJLENBQUEsbUJBQW1CLGFBQW5CLG1CQUFtQix1QkFBbkIsbUJBQW1CLENBQUUsTUFBTSxJQUFHLENBQUMsRUFBRTtnQkFDcEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUN4RCxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUk7b0JBQ3JCLFNBQVMsRUFBRSxVQUFVLENBQUMsU0FBUztpQkFDL0IsQ0FBQyxDQUFDLENBQUM7YUFDSjtZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2IsQ0FBQzs7SUFoREYsc0NBaURDO0lBaER1QixpQ0FBYSxHQUFXLDZEQUE2RCxDQUFDIn0=
@@ -23,6 +23,37 @@
23
23
  return $1.toLowerCase();
24
24
  });
25
25
  };
26
+ /**
27
+ * format cucumber expression parameters for typescript
28
+ * @param parameters
29
+ * @returns
30
+ */
31
+ const formatParameters = (parameters) => {
32
+ const params = parameters.map(param => {
33
+ return `${param}: ${matchType(param)}`;
34
+ });
35
+ return params.join(', ');
36
+ };
37
+ /**
38
+ * match the parameter name passed in with a typescript
39
+ * primitive type (string, number or boolean)
40
+ * @param paramName
41
+ * @returns
42
+ */
43
+ const matchType = (paramName) => {
44
+ const numberTypes = ['int', 'float', 'bigdecimal', 'double', 'biginteger', 'byte', 'short', 'long'];
45
+ const stringTypes = ['string', 'word'];
46
+ if (stringTypes.find(x => paramName.indexOf(x) >= 0)) {
47
+ return 'string';
48
+ }
49
+ if (numberTypes.find(x => paramName.indexOf(x) >= 0)) {
50
+ return 'number';
51
+ }
52
+ if (paramName.indexOf('boolean') >= 0) {
53
+ return 'boolean';
54
+ }
55
+ return 'any';
56
+ };
26
57
  /**
27
58
  * Generate snippets for tsflow.
28
59
  * NOTE: Needs to be an exported function for cucumber to
@@ -50,19 +81,18 @@
50
81
  else {
51
82
  implementation = "return 'pending';";
52
83
  }
53
- const definitionChoices = generatedExpressions.map((generatedExpression, index) => {
54
- const prefix = index === 0 ? '' : '// ';
55
- const allParameterNames = generatedExpression.parameterNames.concat(stepParameterNames);
56
- if (snippetInterface === snippet_syntax_1.SnippetInterface.Callback) {
57
- allParameterNames.push(CALLBACK_NAME);
58
- }
59
- const pattern = generatedExpression.source.replace(/'/g, "\\'");
60
- const methodName = toCamelCase(pattern);
61
- const parametersStr = allParameterNames.length > 0 ? allParameterNames.join(': any, ') + ': any' : '';
62
- return (`${prefix}@${functionName.toLowerCase()}('${pattern}')\n` +
63
- `${functionKeyword}${methodName}(${parametersStr}): any {\n`);
64
- });
65
- return definitionChoices.join('') + ' // ' + comment + '\n ' + implementation + '\n}';
84
+ // we only care about the first expression. TypeScript has a
85
+ // small number of primitive types
86
+ const generatedExpression = generatedExpressions[0];
87
+ const allParameterNames = generatedExpression.parameterNames.concat(stepParameterNames);
88
+ if (snippetInterface === snippet_syntax_1.SnippetInterface.Callback) {
89
+ allParameterNames.push(CALLBACK_NAME);
90
+ }
91
+ const pattern = generatedExpression.source.replace(/'/g, "\\'");
92
+ const methodName = toCamelCase(pattern);
93
+ const parametersStr = allParameterNames.length > 0 ? formatParameters(allParameterNames) : '';
94
+ const definitionChoices = `@${functionName.toLowerCase()}('${pattern}')\n` + `${functionKeyword}${methodName}(${parametersStr}): any {\n`;
95
+ return `${definitionChoices} //${comment}\n ${implementation}\n}`;
66
96
  }
67
97
  };
68
98
  }
@@ -70,4 +100,4 @@
70
100
  // This is needed so that cucumber.js can load the function
71
101
  module.exports = TsflowSnippetSyntax;
72
102
  });
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNmbG93LXNuaXBwZXQtc3ludGF4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Zvcm1hdHRlcnMvdHNmbG93LXNuaXBwZXQtc3ludGF4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQUFBLG9IQUl5RjtJQUV6RixNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUM7SUFFakMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRTtRQUNuQyxPQUFPLEdBQUc7YUFDUixPQUFPLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRTtZQUM5QixPQUFPLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUM7YUFDRCxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQzthQUNsQixPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQzthQUNyQixPQUFPLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRTtZQUM1QixPQUFPLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztJQUNGOzs7Ozs7T0FNRztJQUNILFNBQWdCLG1CQUFtQixDQUFDLGdCQUFrQztRQUNyRSxPQUFPO1lBQ04sS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBOEI7Z0JBQ3BHLElBQUksZUFBZSxHQUFHLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxnQkFBZ0IsS0FBSyxpQ0FBZ0IsQ0FBQyxVQUFVLEVBQUU7b0JBQ3JELGVBQWUsR0FBRyxRQUFRLENBQUM7aUJBQzNCO3FCQUFNLElBQUksZ0JBQWdCLEtBQUssaUNBQWdCLENBQUMsU0FBUyxFQUFFO29CQUMzRCxlQUFlLEdBQUcsR0FBRyxDQUFDO2lCQUN0QjtnQkFFRCxJQUFJLGNBQXNCLENBQUM7Z0JBQzNCLElBQUksZ0JBQWdCLEtBQUssaUNBQWdCLENBQUMsUUFBUSxFQUFFO29CQUNuRCxjQUFjLEdBQUcsR0FBRyxhQUFhLG9CQUFvQixDQUFDO2lCQUN0RDtxQkFBTSxJQUFJLGdCQUFnQixLQUFLLGlDQUFnQixDQUFDLE9BQU8sRUFBRTtvQkFDekQsY0FBYyxHQUFHLG9DQUFvQyxDQUFDO2lCQUN0RDtxQkFBTTtvQkFDTixjQUFjLEdBQUcsbUJBQW1CLENBQUM7aUJBQ3JDO2dCQUVELE1BQU0saUJBQWlCLEdBQUcsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0JBQ2pGLE1BQU0sTUFBTSxHQUFHLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO29CQUN4QyxNQUFNLGlCQUFpQixHQUFHLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztvQkFDeEYsSUFBSSxnQkFBZ0IsS0FBSyxpQ0FBZ0IsQ0FBQyxRQUFRLEVBQUU7d0JBQ25ELGlCQUFpQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztxQkFDdEM7b0JBQ0QsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQ2hFLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDeEMsTUFBTSxhQUFhLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUN0RyxPQUFPLENBQ04sR0FBRyxNQUFNLElBQUksWUFBWSxDQUFDLFdBQVcsRUFBRSxLQUFLLE9BQU8sTUFBTTt3QkFDekQsR0FBRyxlQUFlLEdBQUcsVUFBVSxJQUFJLGFBQWEsWUFBWSxDQUM1RCxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO2dCQUVILE9BQU8saUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sR0FBRyxPQUFPLEdBQUcsTUFBTSxHQUFHLGNBQWMsR0FBRyxLQUFLLENBQUM7WUFDekYsQ0FBQztTQUNELENBQUM7SUFDSCxDQUFDO0lBckNELGtEQXFDQztJQUNELDJEQUEyRDtJQUMzRCxNQUFNLENBQUMsT0FBTyxHQUFHLG1CQUFtQixDQUFDIn0=
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNmbG93LXNuaXBwZXQtc3ludGF4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Zvcm1hdHRlcnMvdHNmbG93LXNuaXBwZXQtc3ludGF4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQUFBLG9IQUl5RjtJQUV6RixNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUM7SUFFakMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRTtRQUNuQyxPQUFPLEdBQUc7YUFDUixPQUFPLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRTtZQUM5QixPQUFPLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUM7YUFDRCxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQzthQUNsQixPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQzthQUNyQixPQUFPLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRTtZQUM1QixPQUFPLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztJQUVGOzs7O09BSUc7SUFDSCxNQUFNLGdCQUFnQixHQUFHLENBQUMsVUFBb0IsRUFBVSxFQUFFO1FBQ3pELE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDckMsT0FBTyxHQUFHLEtBQUssS0FBSyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixDQUFDLENBQUM7SUFFRjs7Ozs7T0FLRztJQUNILE1BQU0sU0FBUyxHQUFHLENBQUMsU0FBaUIsRUFBVSxFQUFFO1FBQy9DLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFlBQVks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
@@ -0,0 +1,30 @@
1
+ export declare type ErrorOptions = {
2
+ scenariosMustMatchFeatureFile: boolean;
3
+ stepsMustMatchFeatureFile: boolean;
4
+ allowScenariosNotInFeatureFile: boolean;
5
+ };
6
+ export declare type Options = {
7
+ loadRelativePath?: boolean;
8
+ tagFilter?: string;
9
+ errors?: ErrorOptions | boolean;
10
+ scenarioNameTemplate?: (vars: ScenarioNameTemplateVars) => string;
11
+ };
12
+ export declare type ScenarioNameTemplateVars = {
13
+ featureTitle: string;
14
+ scenarioTitle: string;
15
+ scenarioTags: string[];
16
+ featureTags: string[];
17
+ };
18
+ export declare const defaultErrorSettings: {
19
+ scenariosMustMatchFeatureFile: boolean;
20
+ stepsMustMatchFeatureFile: boolean;
21
+ allowScenariosNotInFeatureFile: boolean;
22
+ };
23
+ export declare const defaultConfiguration: Options;
24
+ export declare const getJestCucumberConfiguration: (options?: Options | undefined) => {
25
+ loadRelativePath?: boolean | undefined;
26
+ tagFilter?: string | undefined;
27
+ errors?: boolean | ErrorOptions | undefined;
28
+ scenarioNameTemplate?: ((vars: ScenarioNameTemplateVars) => string) | undefined;
29
+ };
30
+ export declare const setJestCucumberConfiguration: (options: Options) => void;
@@ -0,0 +1,37 @@
1
+ (function (factory) {
2
+ if (typeof module === "object" && typeof module.exports === "object") {
3
+ var v = factory(require, exports);
4
+ if (v !== undefined) module.exports = v;
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ define(["require", "exports"], factory);
8
+ }
9
+ })(function (require, exports) {
10
+ "use strict";
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.setJestCucumberConfiguration = exports.getJestCucumberConfiguration = exports.defaultConfiguration = exports.defaultErrorSettings = void 0;
13
+ exports.defaultErrorSettings = {
14
+ scenariosMustMatchFeatureFile: true,
15
+ stepsMustMatchFeatureFile: true,
16
+ allowScenariosNotInFeatureFile: false
17
+ };
18
+ exports.defaultConfiguration = {
19
+ tagFilter: undefined,
20
+ scenarioNameTemplate: undefined,
21
+ errors: exports.defaultErrorSettings
22
+ };
23
+ let globalConfiguration = {};
24
+ const getJestCucumberConfiguration = (options) => {
25
+ const mergedOptions = { ...exports.defaultConfiguration, ...globalConfiguration, ...(options || {}) };
26
+ if (mergedOptions.errors === true) {
27
+ mergedOptions.errors = exports.defaultErrorSettings;
28
+ }
29
+ return mergedOptions;
30
+ };
31
+ exports.getJestCucumberConfiguration = getJestCucumberConfiguration;
32
+ const setJestCucumberConfiguration = (options) => {
33
+ globalConfiguration = options;
34
+ };
35
+ exports.setJestCucumberConfiguration = setJestCucumberConfiguration;
36
+ });
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9naGVya2luL2NvbmZpZ3VyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBb0JhLFFBQUEsb0JBQW9CLEdBQUc7UUFDbkMsNkJBQTZCLEVBQUUsSUFBSTtRQUNuQyx5QkFBeUIsRUFBRSxJQUFJO1FBQy9CLDhCQUE4QixFQUFFLEtBQUs7S0FDckMsQ0FBQztJQUVXLFFBQUEsb0JBQW9CLEdBQVk7UUFDNUMsU0FBUyxFQUFFLFNBQVM7UUFDcEIsb0JBQW9CLEVBQUUsU0FBUztRQUMvQixNQUFNLEVBQUUsNEJBQW9CO0tBQzVCLENBQUM7SUFFRixJQUFJLG1CQUFtQixHQUFZLEVBQWEsQ0FBQztJQUUxQyxNQUFNLDRCQUE0QixHQUFHLENBQUMsT0FBaUIsRUFBRSxFQUFFO1FBQ2pFLE1BQU0sYUFBYSxHQUFHLEVBQUUsR0FBRyw0QkFBb0IsRUFBRSxHQUFHLG1CQUFtQixFQUFFLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUU5RixJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFO1lBQ2xDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsNEJBQW9CLENBQUM7U0FDNUM7UUFFRCxPQUFPLGFBQWEsQ0FBQztJQUN0QixDQUFDLENBQUM7SUFSVyxRQUFBLDRCQUE0QixnQ0FRdkM7SUFFSyxNQUFNLDRCQUE0QixHQUFHLENBQUMsT0FBZ0IsRUFBRSxFQUFFO1FBQ2hFLG1CQUFtQixHQUFHLE9BQU8sQ0FBQztJQUMvQixDQUFDLENBQUM7SUFGVyxRQUFBLDRCQUE0QixnQ0FFdkMifQ==
@@ -0,0 +1,28 @@
1
+ import { Options } from './configuration';
2
+ import { ParsedFeature } from './models';
3
+ export default class GherkinFeature {
4
+ private cwd;
5
+ loadFeature: (featureFilePath: string, options?: Options | undefined) => ParsedFeature;
6
+ loadFeatures: (globPattern: string, options?: Options | undefined) => ParsedFeature[];
7
+ private parseFeature;
8
+ private parseDataTableRow;
9
+ private parseDataTable;
10
+ private parseStepArgument;
11
+ private parseStep;
12
+ private parseSteps;
13
+ private parseTags;
14
+ private parseScenario;
15
+ private parseScenarioOutlineExampleSteps;
16
+ private getOutlineDynamicTitle;
17
+ private parseScenarioOutlineExample;
18
+ private parseScenarioOutlineExampleSet;
19
+ private parseScenarioOutlineExampleSets;
20
+ private parseScenarioOutline;
21
+ private parseScenarios;
22
+ private parseScenarioOutlines;
23
+ private collapseBackgrounds;
24
+ private parseBackgrounds;
25
+ private collapseRulesAndBackgrounds;
26
+ private createTranslationMap;
27
+ private translateKeywords;
28
+ }
@@ -0,0 +1,345 @@
1
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
2
+ if (k2 === undefined) k2 = k;
3
+ var desc = Object.getOwnPropertyDescriptor(m, k);
4
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
5
+ desc = { enumerable: true, get: function() { return m[k]; } };
6
+ }
7
+ Object.defineProperty(o, k2, desc);
8
+ }) : (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ o[k2] = m[k];
11
+ }));
12
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
13
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
14
+ }) : function(o, v) {
15
+ o["default"] = v;
16
+ });
17
+ var __importStar = (this && this.__importStar) || function (mod) {
18
+ if (mod && mod.__esModule) return mod;
19
+ var result = {};
20
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
21
+ __setModuleDefault(result, mod);
22
+ return result;
23
+ };
24
+ (function (factory) {
25
+ if (typeof module === "object" && typeof module.exports === "object") {
26
+ var v = factory(require, exports);
27
+ if (v !== undefined) module.exports = v;
28
+ }
29
+ else if (typeof define === "function" && define.amd) {
30
+ define(["require", "exports", "fs", "glob", "@cucumber/messages", "./configuration", "@cucumber/gherkin/dist/src"], factory);
31
+ }
32
+ })(function (require, exports) {
33
+ "use strict";
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ const fs_1 = require("fs");
36
+ const glob_1 = require("glob");
37
+ const messages = __importStar(require("@cucumber/messages"));
38
+ const configuration_1 = require("./configuration");
39
+ const src_1 = require("@cucumber/gherkin/dist/src");
40
+ class GherkinFeature {
41
+ constructor() {
42
+ this.cwd = process.cwd();
43
+ this.loadFeature = (featureFilePath, options) => {
44
+ try {
45
+ const featureText = (0, fs_1.readFileSync)(featureFilePath, 'utf8');
46
+ return this.parseFeature(featureText, featureFilePath, options);
47
+ }
48
+ catch (err) {
49
+ if (err.code === 'ENOENT') {
50
+ throw new Error(`Feature file not found (${featureFilePath})`);
51
+ }
52
+ throw err;
53
+ }
54
+ };
55
+ this.loadFeatures = (globPattern, options) => {
56
+ const featureFiles = (0, glob_1.sync)(globPattern);
57
+ return featureFiles.map(featureFilePath => this.loadFeature(featureFilePath, options));
58
+ };
59
+ this.parseFeature = (featureText, featureFilePath, options) => {
60
+ let ast;
61
+ options = (0, configuration_1.getJestCucumberConfiguration)(options);
62
+ try {
63
+ const builder = new src_1.AstBuilder(messages.IdGenerator.uuid());
64
+ const matcher = new src_1.GherkinClassicTokenMatcher(); // or Gherkin.GherkinInMarkdownTokenMatcher()
65
+ ast = new src_1.Parser(builder, matcher).parse(featureText);
66
+ }
67
+ catch (err) {
68
+ throw new Error(`Error parsing feature Gherkin: ${err.message}`);
69
+ }
70
+ let astFeature = this.collapseRulesAndBackgrounds(ast.feature);
71
+ if (astFeature.language !== 'en') {
72
+ astFeature = this.translateKeywords(astFeature);
73
+ }
74
+ return {
75
+ title: astFeature.name,
76
+ featureFile: featureFilePath.replace(`${this.cwd}\\`, ''),
77
+ scenarios: this.parseScenarios(astFeature),
78
+ scenarioOutlines: this.parseScenarioOutlines(astFeature),
79
+ tags: this.parseTags(astFeature),
80
+ options
81
+ };
82
+ };
83
+ this.parseDataTableRow = (astDataTableRow) => {
84
+ return astDataTableRow.cells.map((col) => col.value);
85
+ };
86
+ this.parseDataTable = (astDataTable, astDataTableHeader) => {
87
+ let headerRow;
88
+ let bodyRows;
89
+ if (astDataTableHeader) {
90
+ headerRow = this.parseDataTableRow(astDataTableHeader);
91
+ bodyRows = astDataTable;
92
+ }
93
+ else {
94
+ headerRow = this.parseDataTableRow(astDataTable.rows[0]);
95
+ bodyRows = astDataTable && astDataTable.rows && astDataTable.rows.length && astDataTable.rows.slice(1);
96
+ }
97
+ if (bodyRows && bodyRows.length > 0) {
98
+ return bodyRows.map(nextRow => {
99
+ const parsedRow = this.parseDataTableRow(nextRow);
100
+ return parsedRow.reduce((rowObj, nextCol, index) => {
101
+ return {
102
+ ...rowObj,
103
+ [headerRow[index]]: nextCol
104
+ };
105
+ }, {});
106
+ });
107
+ }
108
+ else {
109
+ return [];
110
+ }
111
+ };
112
+ this.parseStepArgument = (astStep) => {
113
+ if (astStep) {
114
+ switch (astStep.argument) {
115
+ case 'dataTable':
116
+ return this.parseDataTable(astStep.dataTable);
117
+ case 'docString':
118
+ return astStep.docString.content;
119
+ default:
120
+ return null;
121
+ }
122
+ }
123
+ else {
124
+ return null;
125
+ }
126
+ };
127
+ this.parseStep = (astStep) => {
128
+ return {
129
+ stepText: astStep.text,
130
+ keyword: astStep.keyword.trim().toLowerCase(),
131
+ stepArgument: this.parseStepArgument(astStep),
132
+ lineNumber: astStep.location.line
133
+ };
134
+ };
135
+ this.parseSteps = (astScenario) => {
136
+ return astScenario.steps.map((astStep) => this.parseStep(astStep));
137
+ };
138
+ this.parseTags = (ast) => {
139
+ if (!ast.tags) {
140
+ return [];
141
+ }
142
+ else {
143
+ return ast.tags.map((tag) => tag.name);
144
+ }
145
+ };
146
+ this.parseScenario = (astScenario, astFeature) => {
147
+ return {
148
+ title: astScenario.name,
149
+ steps: this.parseSteps(astScenario),
150
+ tags: [...this.parseTags(astFeature), ...this.parseTags(astScenario)],
151
+ lineNumber: astScenario.location.line,
152
+ scenarioContext: undefined
153
+ };
154
+ };
155
+ this.parseScenarioOutlineExampleSteps = (exampleTableRow, scenarioSteps) => {
156
+ return scenarioSteps.map(scenarioStep => {
157
+ const stepText = Object.keys(exampleTableRow).reduce((processedStepText, nextTableColumn) => {
158
+ return processedStepText.replace(new RegExp(`<${nextTableColumn}>`, 'g'), exampleTableRow[nextTableColumn]);
159
+ }, scenarioStep.stepText);
160
+ let stepArgument = '';
161
+ if (scenarioStep.stepArgument) {
162
+ if (Array.isArray(scenarioStep.stepArgument)) {
163
+ stepArgument = scenarioStep.stepArgument.map((stepArgumentRow) => {
164
+ const modifiedStepArgumentRow = { ...stepArgumentRow };
165
+ Object.keys(exampleTableRow).forEach(nextTableColumn => {
166
+ Object.keys(modifiedStepArgumentRow).forEach(prop => {
167
+ modifiedStepArgumentRow[prop] = modifiedStepArgumentRow[prop].replace(new RegExp(`<${nextTableColumn}>`, 'g'), exampleTableRow[nextTableColumn]);
168
+ });
169
+ });
170
+ return modifiedStepArgumentRow;
171
+ });
172
+ }
173
+ else {
174
+ stepArgument = scenarioStep.stepArgument;
175
+ if (typeof scenarioStep.stepArgument === 'string' || scenarioStep.stepArgument instanceof String) {
176
+ Object.keys(exampleTableRow).forEach(nextTableColumn => {
177
+ stepArgument = stepArgument.replace(new RegExp(`<${nextTableColumn}>`, 'g'), exampleTableRow[nextTableColumn]);
178
+ });
179
+ }
180
+ }
181
+ }
182
+ return {
183
+ ...scenarioStep,
184
+ stepText,
185
+ stepArgument
186
+ };
187
+ });
188
+ };
189
+ this.getOutlineDynamicTitle = (exampleTableRow, title) => {
190
+ return title.replace(/<(\S*)>/g, (_, firstMatch) => {
191
+ return exampleTableRow[firstMatch || ''];
192
+ });
193
+ };
194
+ this.parseScenarioOutlineExample = (exampleTableRow, outlineScenario, exampleSetTags) => {
195
+ return {
196
+ title: this.getOutlineDynamicTitle(exampleTableRow, outlineScenario.title),
197
+ steps: this.parseScenarioOutlineExampleSteps(exampleTableRow, outlineScenario.steps),
198
+ tags: Array.from(new Set([...outlineScenario.tags, ...exampleSetTags]))
199
+ };
200
+ };
201
+ this.parseScenarioOutlineExampleSet = (astExampleSet, outlineScenario) => {
202
+ const exampleTable = this.parseDataTable(astExampleSet.tableBody, astExampleSet.tableHeader);
203
+ return exampleTable.map(tableRow => this.parseScenarioOutlineExample(tableRow, outlineScenario, this.parseTags(astExampleSet)));
204
+ };
205
+ this.parseScenarioOutlineExampleSets = (astExampleSets, outlineScenario) => {
206
+ const exampleSets = astExampleSets.map((astExampleSet) => {
207
+ return this.parseScenarioOutlineExampleSet(astExampleSet, outlineScenario);
208
+ });
209
+ return exampleSets.reduce((scenarios, nextExampleSet) => {
210
+ return [...scenarios, ...nextExampleSet];
211
+ }, []);
212
+ };
213
+ this.parseScenarioOutline = (astScenarioOutline, astFeature) => {
214
+ const outlineScenario = this.parseScenario(astScenarioOutline.scenario, astFeature);
215
+ return {
216
+ title: outlineScenario.title,
217
+ scenarios: this.parseScenarioOutlineExampleSets(astScenarioOutline.scenario.examples, outlineScenario),
218
+ tags: outlineScenario.tags,
219
+ steps: outlineScenario.steps,
220
+ lineNumber: astScenarioOutline.scenario.location.line,
221
+ scenarioContext: undefined
222
+ };
223
+ };
224
+ this.parseScenarios = (astFeature) => {
225
+ return astFeature.children
226
+ .filter((child) => {
227
+ const keywords = ['Scenario Outline', 'Scenario Template'];
228
+ return child.scenario && keywords.indexOf(child.scenario.keyword) === -1;
229
+ })
230
+ .map((astScenario) => this.parseScenario(astScenario.scenario, astFeature));
231
+ };
232
+ this.parseScenarioOutlines = (astFeature) => {
233
+ return astFeature.children
234
+ .filter((child) => {
235
+ const keywords = ['Scenario Outline', 'Scenario Template'];
236
+ return child.scenario && keywords.indexOf(child.scenario.keyword) !== -1;
237
+ })
238
+ .map((astScenarioOutline) => this.parseScenarioOutline(astScenarioOutline, astFeature));
239
+ };
240
+ this.collapseBackgrounds = (astChildren, backgrounds) => {
241
+ const backgroundSteps = backgrounds.reduce((allBackgroundSteps, nextBackground) => {
242
+ return [...allBackgroundSteps, ...nextBackground.steps];
243
+ }, []);
244
+ astChildren.forEach(child => {
245
+ if (child.scenario) {
246
+ child.scenario.steps = [...backgroundSteps, ...child.scenario.steps];
247
+ }
248
+ });
249
+ return astChildren;
250
+ };
251
+ this.parseBackgrounds = (ast) => {
252
+ return ast.children.filter((child) => child.background).map((child) => child.background);
253
+ };
254
+ this.collapseRulesAndBackgrounds = (astFeature) => {
255
+ const featureBackgrounds = this.parseBackgrounds(astFeature);
256
+ const children = this.collapseBackgrounds(astFeature.children, featureBackgrounds).reduce((newChildren, nextChild) => {
257
+ if (nextChild.rule) {
258
+ const rule = nextChild.rule;
259
+ const ruleBackgrounds = this.parseBackgrounds(rule);
260
+ return [
261
+ ...newChildren,
262
+ ...this.collapseBackgrounds(rule.children, [...featureBackgrounds, ...ruleBackgrounds])
263
+ ];
264
+ }
265
+ else {
266
+ return [...newChildren, nextChild];
267
+ }
268
+ }, []);
269
+ return {
270
+ ...astFeature,
271
+ children
272
+ };
273
+ };
274
+ this.createTranslationMap = (translateDialect) => {
275
+ const englishDialect = src_1.dialects.en;
276
+ const translationMap = {};
277
+ const props = [
278
+ 'and',
279
+ 'background',
280
+ 'but',
281
+ 'examples',
282
+ 'feature',
283
+ 'given',
284
+ 'scenario',
285
+ 'scenarioOutline',
286
+ 'then',
287
+ 'when',
288
+ 'rule'
289
+ ];
290
+ for (const prop of props) {
291
+ const dialectWords = translateDialect[prop];
292
+ const translationWords = englishDialect[prop];
293
+ let index = 0;
294
+ let defaultWordIndex = null;
295
+ for (const dialectWord of dialectWords) {
296
+ // skip "* " word
297
+ if (dialectWord.indexOf('*') !== 0) {
298
+ if (translationWords[index] !== undefined) {
299
+ translationMap[dialectWord] = translationWords[index];
300
+ if (defaultWordIndex === null) {
301
+ // set default when non is set yet
302
+ defaultWordIndex = index;
303
+ }
304
+ }
305
+ else {
306
+ // index has undefined value, translate to default word
307
+ if (defaultWordIndex !== null) {
308
+ translationMap[dialectWord] = translationWords[defaultWordIndex];
309
+ }
310
+ else {
311
+ throw new Error('No translation found for ' + dialectWord);
312
+ }
313
+ }
314
+ }
315
+ index++;
316
+ }
317
+ }
318
+ return translationMap;
319
+ };
320
+ this.translateKeywords = (astFeature) => {
321
+ const languageDialect = src_1.dialects[astFeature.language];
322
+ const translationMap = this.createTranslationMap(languageDialect);
323
+ astFeature.language = 'en';
324
+ astFeature.keyword = translationMap[astFeature.keyword] || astFeature.keyword;
325
+ for (const child of astFeature.children) {
326
+ if (child.background) {
327
+ child.background.keyword = translationMap[child.background.keyword] || child.background.keyword;
328
+ }
329
+ if (child.scenario) {
330
+ child.scenario.keyword = translationMap[child.scenario.keyword] || child.scenario.keyword;
331
+ for (const step of child.scenario.steps) {
332
+ step.keyword = translationMap[step.keyword] || step.keyword;
333
+ }
334
+ for (const example of child.scenario.examples) {
335
+ example.keyword = translationMap[example.keyword] || example.keyword;
336
+ }
337
+ }
338
+ }
339
+ return astFeature;
340
+ };
341
+ }
342
+ }
343
+ exports.default = GherkinFeature;
344
+ });
345
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2hlcmtpbi1mZWF0dXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2doZXJraW4vZ2hlcmtpbi1mZWF0dXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFBQSwyQkFBa0M7SUFDbEMsK0JBQXdDO0lBQ3hDLDZEQUErQztJQUMvQyxtREFBd0U7SUFDeEUsb0RBQStHO0lBRy9HLE1BQXFCLGNBQWM7UUFBbkM7WUFDUyxRQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBRXJCLGdCQUFXLEdBQUcsQ0FBQyxlQUF1QixFQUFFLE9BQWlCLEVBQUUsRUFBRTtnQkFDbkUsSUFBSTtvQkFDSCxNQUFNLFdBQVcsR0FBVyxJQUFBLGlCQUFZLEVBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO29CQUNsRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztpQkFDaEU7Z0JBQUMsT0FBTyxHQUFRLEVBQUU7b0JBQ2xCLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7d0JBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLGVBQWUsR0FBRyxDQUFDLENBQUM7cUJBQy9EO29CQUVELE1BQU0sR0FBRyxDQUFDO2lCQUNWO1lBQ0YsQ0FBQyxDQUFDO1lBRUssaUJBQVksR0FBRyxDQUFDLFdBQW1CLEVBQUUsT0FBaUIsRUFBRSxFQUFFO2dCQUNoRSxNQUFNLFlBQVksR0FBRyxJQUFBLFdBQVEsRUFBQyxXQUFXLENBQUMsQ0FBQztnQkFFM0MsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUN4RixDQUFDLENBQUM7WUFFTSxpQkFBWSxHQUFHLENBQUMsV0FBbUIs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