@lynxwall/cucumber-tsflow 6.0.2 → 6.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 (98) hide show
  1. package/bin/cucumber-tsflow +0 -0
  2. package/lib/behave.d.ts +1 -1
  3. package/lib/behave.js +27 -27
  4. package/lib/cli/argv-parser.d.ts +24 -24
  5. package/lib/cli/argv-parser.js +103 -103
  6. package/lib/cli/index.d.ts +22 -22
  7. package/lib/cli/index.js +100 -100
  8. package/lib/cli/load-configuration.d.ts +20 -20
  9. package/lib/cli/load-configuration.js +92 -92
  10. package/lib/cli/run.d.ts +1 -1
  11. package/lib/cli/run.js +47 -49
  12. package/lib/cucumber/binding-decorator.d.ts +10 -10
  13. package/lib/cucumber/binding-decorator.js +180 -180
  14. package/lib/cucumber/binding-registry.d.ts +82 -82
  15. package/lib/cucumber/binding-registry.js +215 -215
  16. package/lib/cucumber/hook-decorators.d.ts +46 -46
  17. package/lib/cucumber/hook-decorators.js +102 -102
  18. package/lib/cucumber/managed-scenario-context.d.ts +21 -21
  19. package/lib/cucumber/managed-scenario-context.js +95 -95
  20. package/lib/cucumber/message-collector.d.ts +81 -81
  21. package/lib/cucumber/message-collector.js +250 -250
  22. package/lib/cucumber/parallel/coordinator.d.ts +79 -79
  23. package/lib/cucumber/parallel/coordinator.js +246 -246
  24. package/lib/cucumber/parallel/run-worker.d.ts +1 -1
  25. package/lib/cucumber/parallel/run-worker.js +31 -31
  26. package/lib/cucumber/parallel/worker.d.ts +30 -30
  27. package/lib/cucumber/parallel/worker.js +103 -103
  28. package/lib/cucumber/run-cucumber.d.ts +14 -14
  29. package/lib/cucumber/run-cucumber.js +117 -117
  30. package/lib/cucumber/runtime.d.ts +25 -25
  31. package/lib/cucumber/runtime.js +39 -39
  32. package/lib/cucumber/step-definition-decorators.d.ts +24 -24
  33. package/lib/cucumber/step-definition-decorators.js +91 -91
  34. package/lib/cucumber/utils.d.ts +16 -16
  35. package/lib/cucumber/utils.js +77 -77
  36. package/lib/esnode.js +18 -18
  37. package/lib/esvue.d.ts +1 -1
  38. package/lib/esvue.js +40 -40
  39. package/lib/formatters/behave-json-formatter.d.ts +49 -49
  40. package/lib/formatters/behave-json-formatter.js +74 -74
  41. package/lib/formatters/tsflow-snippet-syntax.d.ts +9 -9
  42. package/lib/formatters/tsflow-snippet-syntax.js +89 -89
  43. package/lib/gherkin/configuration.d.ts +30 -30
  44. package/lib/gherkin/configuration.js +26 -26
  45. package/lib/gherkin/gherkin-feature.d.ts +28 -28
  46. package/lib/gherkin/gherkin-feature.js +333 -333
  47. package/lib/gherkin/gherkin-manager.d.ts +29 -29
  48. package/lib/gherkin/gherkin-manager.js +139 -114
  49. package/lib/gherkin/models.d.ts +45 -45
  50. package/lib/gherkin/models.js +2 -2
  51. package/lib/index.d.ts +4 -4
  52. package/lib/index.js +22 -22
  53. package/lib/snippet.d.ts +1 -1
  54. package/lib/snippet.js +27 -27
  55. package/lib/transpilers/esbuild-transpiler.d.ts +4 -4
  56. package/lib/transpilers/esbuild-transpiler.js +18 -18
  57. package/lib/transpilers/esbuild.d.ts +12 -12
  58. package/lib/transpilers/esbuild.js +54 -54
  59. package/lib/transpilers/vue-sfc/compiler.d.ts +7 -7
  60. package/lib/transpilers/vue-sfc/compiler.js +21 -21
  61. package/lib/transpilers/vue-sfc/index.d.ts +23 -23
  62. package/lib/transpilers/vue-sfc/index.js +46 -46
  63. package/lib/transpilers/vue-sfc/main.d.ts +8 -8
  64. package/lib/transpilers/vue-sfc/main.js +247 -247
  65. package/lib/transpilers/vue-sfc/script.d.ts +5 -5
  66. package/lib/transpilers/vue-sfc/script.js +41 -41
  67. package/lib/transpilers/vue-sfc/template.d.ts +8 -8
  68. package/lib/transpilers/vue-sfc/template.js +101 -101
  69. package/lib/transpilers/vue-sfc/types.d.ts +55 -55
  70. package/lib/transpilers/vue-sfc/types.js +2 -2
  71. package/lib/transpilers/vue-sfc/utils/descriptorCache.d.ts +13 -13
  72. package/lib/transpilers/vue-sfc/utils/descriptorCache.js +67 -67
  73. package/lib/transpilers/vue-sfc/utils/error.d.ts +3 -3
  74. package/lib/transpilers/vue-sfc/utils/error.js +22 -22
  75. package/lib/transpilers/vue-sfc/utils/query.d.ts +13 -13
  76. package/lib/transpilers/vue-sfc/utils/query.js +35 -35
  77. package/lib/tsnode.js +17 -17
  78. package/lib/tsvue.d.ts +1 -1
  79. package/lib/tsvue.js +39 -39
  80. package/lib/types/scenario-context.d.ts +16 -16
  81. package/lib/types/scenario-context.js +17 -17
  82. package/lib/types/scenario-info.d.ts +16 -16
  83. package/lib/types/scenario-info.js +22 -22
  84. package/lib/types/step-binding-flags.d.ts +53 -53
  85. package/lib/types/step-binding-flags.js +58 -58
  86. package/lib/types/step-binding.d.ts +50 -50
  87. package/lib/types/step-binding.js +17 -17
  88. package/lib/types/types.d.ts +21 -21
  89. package/lib/types/types.js +2 -2
  90. package/lib/utils/helpers.d.ts +6 -6
  91. package/lib/utils/helpers.js +17 -17
  92. package/lib/utils/logger.d.ts +3 -3
  93. package/lib/utils/logger.js +29 -29
  94. package/lib/utils/our-callsite.d.ts +27 -27
  95. package/lib/utils/our-callsite.js +72 -72
  96. package/lib/version.d.ts +1 -1
  97. package/lib/version.js +5 -5
  98. package/package.json +1 -1
@@ -1,333 +1,333 @@
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 (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- const fs_1 = require("fs");
27
- const glob_1 = require("glob");
28
- const messages = __importStar(require("@cucumber/messages"));
29
- const configuration_1 = require("./configuration");
30
- const src_1 = require("@cucumber/gherkin/dist/src");
31
- class GherkinFeature {
32
- cwd = process.cwd();
33
- loadFeature = (featureFilePath, options) => {
34
- try {
35
- const featureText = (0, fs_1.readFileSync)(featureFilePath, 'utf8');
36
- return this.parseFeature(featureText, featureFilePath, options);
37
- }
38
- catch (err) {
39
- if (err.code === 'ENOENT') {
40
- throw new Error(`Feature file not found (${featureFilePath})`);
41
- }
42
- throw err;
43
- }
44
- };
45
- loadFeatures = (globPattern, options) => {
46
- const featureFiles = (0, glob_1.sync)(globPattern);
47
- return featureFiles.map(featureFilePath => this.loadFeature(featureFilePath, options));
48
- };
49
- parseFeature = (featureText, featureFilePath, options) => {
50
- let ast;
51
- options = (0, configuration_1.getJestCucumberConfiguration)(options);
52
- try {
53
- const builder = new src_1.AstBuilder(messages.IdGenerator.uuid());
54
- const matcher = new src_1.GherkinClassicTokenMatcher(); // or Gherkin.GherkinInMarkdownTokenMatcher()
55
- ast = new src_1.Parser(builder, matcher).parse(featureText);
56
- }
57
- catch (err) {
58
- throw new Error(`Error parsing feature Gherkin: ${err.message}`);
59
- }
60
- let astFeature = this.collapseRulesAndBackgrounds(ast.feature);
61
- if (astFeature.language !== 'en') {
62
- astFeature = this.translateKeywords(astFeature);
63
- }
64
- return {
65
- title: astFeature.name,
66
- featureFile: featureFilePath.replace(`${this.cwd}\\`, ''),
67
- scenarios: this.parseScenarios(astFeature),
68
- scenarioOutlines: this.parseScenarioOutlines(astFeature),
69
- tags: this.parseTags(astFeature),
70
- options
71
- };
72
- };
73
- parseDataTableRow = (astDataTableRow) => {
74
- return astDataTableRow.cells.map((col) => col.value);
75
- };
76
- parseDataTable = (astDataTable, astDataTableHeader) => {
77
- let headerRow;
78
- let bodyRows;
79
- if (astDataTableHeader) {
80
- headerRow = this.parseDataTableRow(astDataTableHeader);
81
- bodyRows = astDataTable;
82
- }
83
- else {
84
- headerRow = this.parseDataTableRow(astDataTable.rows[0]);
85
- bodyRows = astDataTable && astDataTable.rows && astDataTable.rows.length && astDataTable.rows.slice(1);
86
- }
87
- if (bodyRows && bodyRows.length > 0) {
88
- return bodyRows.map(nextRow => {
89
- const parsedRow = this.parseDataTableRow(nextRow);
90
- return parsedRow.reduce((rowObj, nextCol, index) => {
91
- return {
92
- ...rowObj,
93
- [headerRow[index]]: nextCol
94
- };
95
- }, {});
96
- });
97
- }
98
- else {
99
- return [];
100
- }
101
- };
102
- parseStepArgument = (astStep) => {
103
- if (astStep) {
104
- switch (astStep.argument) {
105
- case 'dataTable':
106
- return this.parseDataTable(astStep.dataTable);
107
- case 'docString':
108
- return astStep.docString.content;
109
- default:
110
- return null;
111
- }
112
- }
113
- else {
114
- return null;
115
- }
116
- };
117
- parseStep = (astStep) => {
118
- return {
119
- stepText: astStep.text,
120
- keyword: astStep.keyword.trim().toLowerCase(),
121
- stepArgument: this.parseStepArgument(astStep),
122
- lineNumber: astStep.location.line
123
- };
124
- };
125
- parseSteps = (astScenario) => {
126
- return astScenario.steps.map((astStep) => this.parseStep(astStep));
127
- };
128
- parseTags = (ast) => {
129
- if (!ast.tags) {
130
- return [];
131
- }
132
- else {
133
- return ast.tags.map((tag) => tag.name);
134
- }
135
- };
136
- parseScenario = (astScenario, astFeature) => {
137
- return {
138
- title: astScenario.name,
139
- steps: this.parseSteps(astScenario),
140
- tags: [...this.parseTags(astFeature), ...this.parseTags(astScenario)],
141
- lineNumber: astScenario.location.line,
142
- scenarioContext: undefined
143
- };
144
- };
145
- parseScenarioOutlineExampleSteps = (exampleTableRow, scenarioSteps) => {
146
- return scenarioSteps.map(scenarioStep => {
147
- const stepText = Object.keys(exampleTableRow).reduce((processedStepText, nextTableColumn) => {
148
- return processedStepText.replace(new RegExp(`<${nextTableColumn}>`, 'g'), exampleTableRow[nextTableColumn]);
149
- }, scenarioStep.stepText);
150
- let stepArgument = '';
151
- if (scenarioStep.stepArgument) {
152
- if (Array.isArray(scenarioStep.stepArgument)) {
153
- stepArgument = scenarioStep.stepArgument.map((stepArgumentRow) => {
154
- const modifiedStepArgumentRow = { ...stepArgumentRow };
155
- Object.keys(exampleTableRow).forEach(nextTableColumn => {
156
- Object.keys(modifiedStepArgumentRow).forEach(prop => {
157
- modifiedStepArgumentRow[prop] = modifiedStepArgumentRow[prop].replace(new RegExp(`<${nextTableColumn}>`, 'g'), exampleTableRow[nextTableColumn]);
158
- });
159
- });
160
- return modifiedStepArgumentRow;
161
- });
162
- }
163
- else {
164
- stepArgument = scenarioStep.stepArgument;
165
- if (typeof scenarioStep.stepArgument === 'string' || scenarioStep.stepArgument instanceof String) {
166
- Object.keys(exampleTableRow).forEach(nextTableColumn => {
167
- stepArgument = stepArgument.replace(new RegExp(`<${nextTableColumn}>`, 'g'), exampleTableRow[nextTableColumn]);
168
- });
169
- }
170
- }
171
- }
172
- return {
173
- ...scenarioStep,
174
- stepText,
175
- stepArgument
176
- };
177
- });
178
- };
179
- getOutlineDynamicTitle = (exampleTableRow, title) => {
180
- return title.replace(/<(\S*)>/g, (_, firstMatch) => {
181
- return exampleTableRow[firstMatch || ''];
182
- });
183
- };
184
- parseScenarioOutlineExample = (exampleTableRow, outlineScenario, exampleSetTags) => {
185
- return {
186
- title: this.getOutlineDynamicTitle(exampleTableRow, outlineScenario.title),
187
- steps: this.parseScenarioOutlineExampleSteps(exampleTableRow, outlineScenario.steps),
188
- tags: Array.from(new Set([...outlineScenario.tags, ...exampleSetTags]))
189
- };
190
- };
191
- parseScenarioOutlineExampleSet = (astExampleSet, outlineScenario) => {
192
- const exampleTable = this.parseDataTable(astExampleSet.tableBody, astExampleSet.tableHeader);
193
- return exampleTable.map(tableRow => this.parseScenarioOutlineExample(tableRow, outlineScenario, this.parseTags(astExampleSet)));
194
- };
195
- parseScenarioOutlineExampleSets = (astExampleSets, outlineScenario) => {
196
- const exampleSets = astExampleSets.map((astExampleSet) => {
197
- return this.parseScenarioOutlineExampleSet(astExampleSet, outlineScenario);
198
- });
199
- return exampleSets.reduce((scenarios, nextExampleSet) => {
200
- return [...scenarios, ...nextExampleSet];
201
- }, []);
202
- };
203
- parseScenarioOutline = (astScenarioOutline, astFeature) => {
204
- const outlineScenario = this.parseScenario(astScenarioOutline.scenario, astFeature);
205
- return {
206
- title: outlineScenario.title,
207
- scenarios: this.parseScenarioOutlineExampleSets(astScenarioOutline.scenario.examples, outlineScenario),
208
- tags: outlineScenario.tags,
209
- steps: outlineScenario.steps,
210
- lineNumber: astScenarioOutline.scenario.location.line,
211
- scenarioContext: undefined
212
- };
213
- };
214
- parseScenarios = (astFeature) => {
215
- return astFeature.children
216
- .filter((child) => {
217
- const keywords = ['Scenario Outline', 'Scenario Template'];
218
- return child.scenario && keywords.indexOf(child.scenario.keyword) === -1;
219
- })
220
- .map((astScenario) => this.parseScenario(astScenario.scenario, astFeature));
221
- };
222
- parseScenarioOutlines = (astFeature) => {
223
- return astFeature.children
224
- .filter((child) => {
225
- const keywords = ['Scenario Outline', 'Scenario Template'];
226
- return child.scenario && keywords.indexOf(child.scenario.keyword) !== -1;
227
- })
228
- .map((astScenarioOutline) => this.parseScenarioOutline(astScenarioOutline, astFeature));
229
- };
230
- collapseBackgrounds = (astChildren, backgrounds) => {
231
- const backgroundSteps = backgrounds.reduce((allBackgroundSteps, nextBackground) => {
232
- return [...allBackgroundSteps, ...nextBackground.steps];
233
- }, []);
234
- astChildren.forEach(child => {
235
- if (child.scenario) {
236
- child.scenario.steps = [...backgroundSteps, ...child.scenario.steps];
237
- }
238
- });
239
- return astChildren;
240
- };
241
- parseBackgrounds = (ast) => {
242
- return ast.children.filter((child) => child.background).map((child) => child.background);
243
- };
244
- collapseRulesAndBackgrounds = (astFeature) => {
245
- const featureBackgrounds = this.parseBackgrounds(astFeature);
246
- const children = this.collapseBackgrounds(astFeature.children, featureBackgrounds).reduce((newChildren, nextChild) => {
247
- if (nextChild.rule) {
248
- const rule = nextChild.rule;
249
- const ruleBackgrounds = this.parseBackgrounds(rule);
250
- return [
251
- ...newChildren,
252
- ...this.collapseBackgrounds(rule.children, [...featureBackgrounds, ...ruleBackgrounds])
253
- ];
254
- }
255
- else {
256
- return [...newChildren, nextChild];
257
- }
258
- }, []);
259
- return {
260
- ...astFeature,
261
- children
262
- };
263
- };
264
- createTranslationMap = (translateDialect) => {
265
- const englishDialect = src_1.dialects.en;
266
- const translationMap = {};
267
- const props = [
268
- 'and',
269
- 'background',
270
- 'but',
271
- 'examples',
272
- 'feature',
273
- 'given',
274
- 'scenario',
275
- 'scenarioOutline',
276
- 'then',
277
- 'when',
278
- 'rule'
279
- ];
280
- for (const prop of props) {
281
- const dialectWords = translateDialect[prop];
282
- const translationWords = englishDialect[prop];
283
- let index = 0;
284
- let defaultWordIndex = null;
285
- for (const dialectWord of dialectWords) {
286
- // skip "* " word
287
- if (dialectWord.indexOf('*') !== 0) {
288
- if (translationWords[index] !== undefined) {
289
- translationMap[dialectWord] = translationWords[index];
290
- if (defaultWordIndex === null) {
291
- // set default when non is set yet
292
- defaultWordIndex = index;
293
- }
294
- }
295
- else {
296
- // index has undefined value, translate to default word
297
- if (defaultWordIndex !== null) {
298
- translationMap[dialectWord] = translationWords[defaultWordIndex];
299
- }
300
- else {
301
- throw new Error('No translation found for ' + dialectWord);
302
- }
303
- }
304
- }
305
- index++;
306
- }
307
- }
308
- return translationMap;
309
- };
310
- translateKeywords = (astFeature) => {
311
- const languageDialect = src_1.dialects[astFeature.language];
312
- const translationMap = this.createTranslationMap(languageDialect);
313
- astFeature.language = 'en';
314
- astFeature.keyword = translationMap[astFeature.keyword] || astFeature.keyword;
315
- for (const child of astFeature.children) {
316
- if (child.background) {
317
- child.background.keyword = translationMap[child.background.keyword] || child.background.keyword;
318
- }
319
- if (child.scenario) {
320
- child.scenario.keyword = translationMap[child.scenario.keyword] || child.scenario.keyword;
321
- for (const step of child.scenario.steps) {
322
- step.keyword = translationMap[step.keyword] || step.keyword;
323
- }
324
- for (const example of child.scenario.examples) {
325
- example.keyword = translationMap[example.keyword] || example.keyword;
326
- }
327
- }
328
- }
329
- return astFeature;
330
- };
331
- }
332
- exports.default = GherkinFeature;
333
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2hlcmtpbi1mZWF0dXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2doZXJraW4vZ2hlcmtpbi1mZWF0dXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQkFBa0M7QUFDbEMsK0JBQXdDO0FBQ3hDLDZEQUErQztBQUMvQyxtREFBd0U7QUFDeEUsb0RBQStHO0FBRy9HLE1BQXFCLGNBQWM7SUFDMUIsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUVyQixXQUFXLEdBQUcsQ0FBQyxlQUF1QixFQUFFLE9BQWlCLEVBQUUsRUFBRTtRQUNuRSxJQUFJO1lBQ0gsTUFBTSxXQUFXLEdBQVcsSUFBQSxpQkFBWSxFQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNsRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNoRTtRQUFDLE9BQU8sR0FBUSxFQUFFO1lBQ2xCLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7Z0JBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLGVBQWUsR0FBRyxDQUFDLENBQUM7YUFDL0Q7WUFFRCxNQUFNLEdBQUcsQ0FBQztTQUNWO0lBQ0YsQ0FBQyxDQUFDO0lBRUssWUFBWSxHQUFHLENBQUMsV0FBbUIsRUFBRSxPQUFpQixFQUFFLEVBQUU7UUFDaEUsTUFBTSxZQUFZLEdBQUcsSUFBQSxXQUFRLEVBQUMsV0FBVyxDQUFDLENBQUM7UUFFM0MsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN4RixDQUFDLENBQUM7SUFFTSxZQUFZLEdBQUcsQ0FBQyxXQUFtQixFQUFFLGVBQXVCLEVBQUUsT0FBaUIsRUFBaUIs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
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 (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ const fs_1 = require("fs");
27
+ const glob_1 = require("glob");
28
+ const messages = __importStar(require("@cucumber/messages"));
29
+ const configuration_1 = require("./configuration");
30
+ const src_1 = require("@cucumber/gherkin/dist/src");
31
+ class GherkinFeature {
32
+ cwd = process.cwd();
33
+ loadFeature = (featureFilePath, options) => {
34
+ try {
35
+ const featureText = (0, fs_1.readFileSync)(featureFilePath, 'utf8');
36
+ return this.parseFeature(featureText, featureFilePath, options);
37
+ }
38
+ catch (err) {
39
+ if (err.code === 'ENOENT') {
40
+ throw new Error(`Feature file not found (${featureFilePath})`);
41
+ }
42
+ throw err;
43
+ }
44
+ };
45
+ loadFeatures = (globPattern, options) => {
46
+ const featureFiles = (0, glob_1.sync)(globPattern);
47
+ return featureFiles.map(featureFilePath => this.loadFeature(featureFilePath, options));
48
+ };
49
+ parseFeature = (featureText, featureFilePath, options) => {
50
+ let ast;
51
+ options = (0, configuration_1.getJestCucumberConfiguration)(options);
52
+ try {
53
+ const builder = new src_1.AstBuilder(messages.IdGenerator.uuid());
54
+ const matcher = new src_1.GherkinClassicTokenMatcher(); // or Gherkin.GherkinInMarkdownTokenMatcher()
55
+ ast = new src_1.Parser(builder, matcher).parse(featureText);
56
+ }
57
+ catch (err) {
58
+ throw new Error(`Error parsing feature Gherkin: ${err.message}`);
59
+ }
60
+ let astFeature = this.collapseRulesAndBackgrounds(ast.feature);
61
+ if (astFeature.language !== 'en') {
62
+ astFeature = this.translateKeywords(astFeature);
63
+ }
64
+ return {
65
+ title: astFeature.name,
66
+ featureFile: featureFilePath.replace(`${this.cwd}\\`, ''),
67
+ scenarios: this.parseScenarios(astFeature),
68
+ scenarioOutlines: this.parseScenarioOutlines(astFeature),
69
+ tags: this.parseTags(astFeature),
70
+ options
71
+ };
72
+ };
73
+ parseDataTableRow = (astDataTableRow) => {
74
+ return astDataTableRow.cells.map((col) => col.value);
75
+ };
76
+ parseDataTable = (astDataTable, astDataTableHeader) => {
77
+ let headerRow;
78
+ let bodyRows;
79
+ if (astDataTableHeader) {
80
+ headerRow = this.parseDataTableRow(astDataTableHeader);
81
+ bodyRows = astDataTable;
82
+ }
83
+ else {
84
+ headerRow = this.parseDataTableRow(astDataTable.rows[0]);
85
+ bodyRows = astDataTable && astDataTable.rows && astDataTable.rows.length && astDataTable.rows.slice(1);
86
+ }
87
+ if (bodyRows && bodyRows.length > 0) {
88
+ return bodyRows.map(nextRow => {
89
+ const parsedRow = this.parseDataTableRow(nextRow);
90
+ return parsedRow.reduce((rowObj, nextCol, index) => {
91
+ return {
92
+ ...rowObj,
93
+ [headerRow[index]]: nextCol
94
+ };
95
+ }, {});
96
+ });
97
+ }
98
+ else {
99
+ return [];
100
+ }
101
+ };
102
+ parseStepArgument = (astStep) => {
103
+ if (astStep) {
104
+ switch (astStep.argument) {
105
+ case 'dataTable':
106
+ return this.parseDataTable(astStep.dataTable);
107
+ case 'docString':
108
+ return astStep.docString.content;
109
+ default:
110
+ return null;
111
+ }
112
+ }
113
+ else {
114
+ return null;
115
+ }
116
+ };
117
+ parseStep = (astStep) => {
118
+ return {
119
+ stepText: astStep.text,
120
+ keyword: astStep.keyword.trim().toLowerCase(),
121
+ stepArgument: this.parseStepArgument(astStep),
122
+ lineNumber: astStep.location.line
123
+ };
124
+ };
125
+ parseSteps = (astScenario) => {
126
+ return astScenario.steps.map((astStep) => this.parseStep(astStep));
127
+ };
128
+ parseTags = (ast) => {
129
+ if (!ast.tags) {
130
+ return [];
131
+ }
132
+ else {
133
+ return ast.tags.map((tag) => tag.name);
134
+ }
135
+ };
136
+ parseScenario = (astScenario, astFeature) => {
137
+ return {
138
+ title: astScenario.name,
139
+ steps: this.parseSteps(astScenario),
140
+ tags: [...this.parseTags(astFeature), ...this.parseTags(astScenario)],
141
+ lineNumber: astScenario.location.line,
142
+ scenarioContext: undefined
143
+ };
144
+ };
145
+ parseScenarioOutlineExampleSteps = (exampleTableRow, scenarioSteps) => {
146
+ return scenarioSteps.map(scenarioStep => {
147
+ const stepText = Object.keys(exampleTableRow).reduce((processedStepText, nextTableColumn) => {
148
+ return processedStepText.replace(new RegExp(`<${nextTableColumn}>`, 'g'), exampleTableRow[nextTableColumn]);
149
+ }, scenarioStep.stepText);
150
+ let stepArgument = '';
151
+ if (scenarioStep.stepArgument) {
152
+ if (Array.isArray(scenarioStep.stepArgument)) {
153
+ stepArgument = scenarioStep.stepArgument.map((stepArgumentRow) => {
154
+ const modifiedStepArgumentRow = { ...stepArgumentRow };
155
+ Object.keys(exampleTableRow).forEach(nextTableColumn => {
156
+ Object.keys(modifiedStepArgumentRow).forEach(prop => {
157
+ modifiedStepArgumentRow[prop] = modifiedStepArgumentRow[prop].replace(new RegExp(`<${nextTableColumn}>`, 'g'), exampleTableRow[nextTableColumn]);
158
+ });
159
+ });
160
+ return modifiedStepArgumentRow;
161
+ });
162
+ }
163
+ else {
164
+ stepArgument = scenarioStep.stepArgument;
165
+ if (typeof scenarioStep.stepArgument === 'string' || scenarioStep.stepArgument instanceof String) {
166
+ Object.keys(exampleTableRow).forEach(nextTableColumn => {
167
+ stepArgument = stepArgument.replace(new RegExp(`<${nextTableColumn}>`, 'g'), exampleTableRow[nextTableColumn]);
168
+ });
169
+ }
170
+ }
171
+ }
172
+ return {
173
+ ...scenarioStep,
174
+ stepText,
175
+ stepArgument
176
+ };
177
+ });
178
+ };
179
+ getOutlineDynamicTitle = (exampleTableRow, title) => {
180
+ return title.replace(/<(\S*)>/g, (_, firstMatch) => {
181
+ return exampleTableRow[firstMatch || ''];
182
+ });
183
+ };
184
+ parseScenarioOutlineExample = (exampleTableRow, outlineScenario, exampleSetTags) => {
185
+ return {
186
+ title: this.getOutlineDynamicTitle(exampleTableRow, outlineScenario.title),
187
+ steps: this.parseScenarioOutlineExampleSteps(exampleTableRow, outlineScenario.steps),
188
+ tags: Array.from(new Set([...outlineScenario.tags, ...exampleSetTags]))
189
+ };
190
+ };
191
+ parseScenarioOutlineExampleSet = (astExampleSet, outlineScenario) => {
192
+ const exampleTable = this.parseDataTable(astExampleSet.tableBody, astExampleSet.tableHeader);
193
+ return exampleTable.map(tableRow => this.parseScenarioOutlineExample(tableRow, outlineScenario, this.parseTags(astExampleSet)));
194
+ };
195
+ parseScenarioOutlineExampleSets = (astExampleSets, outlineScenario) => {
196
+ const exampleSets = astExampleSets.map((astExampleSet) => {
197
+ return this.parseScenarioOutlineExampleSet(astExampleSet, outlineScenario);
198
+ });
199
+ return exampleSets.reduce((scenarios, nextExampleSet) => {
200
+ return [...scenarios, ...nextExampleSet];
201
+ }, []);
202
+ };
203
+ parseScenarioOutline = (astScenarioOutline, astFeature) => {
204
+ const outlineScenario = this.parseScenario(astScenarioOutline.scenario, astFeature);
205
+ return {
206
+ title: outlineScenario.title,
207
+ exampleScenarios: this.parseScenarioOutlineExampleSets(astScenarioOutline.scenario.examples, outlineScenario),
208
+ tags: outlineScenario.tags,
209
+ steps: outlineScenario.steps,
210
+ lineNumber: astScenarioOutline.scenario.location.line,
211
+ scenarioContext: undefined
212
+ };
213
+ };
214
+ parseScenarios = (astFeature) => {
215
+ return astFeature.children
216
+ .filter((child) => {
217
+ const keywords = ['Scenario Outline', 'Scenario Template'];
218
+ return child.scenario && keywords.indexOf(child.scenario.keyword) === -1;
219
+ })
220
+ .map((astScenario) => this.parseScenario(astScenario.scenario, astFeature));
221
+ };
222
+ parseScenarioOutlines = (astFeature) => {
223
+ return astFeature.children
224
+ .filter((child) => {
225
+ const keywords = ['Scenario Outline', 'Scenario Template'];
226
+ return child.scenario && keywords.indexOf(child.scenario.keyword) !== -1;
227
+ })
228
+ .map((astScenarioOutline) => this.parseScenarioOutline(astScenarioOutline, astFeature));
229
+ };
230
+ collapseBackgrounds = (astChildren, backgrounds) => {
231
+ const backgroundSteps = backgrounds.reduce((allBackgroundSteps, nextBackground) => {
232
+ return [...allBackgroundSteps, ...nextBackground.steps];
233
+ }, []);
234
+ astChildren.forEach(child => {
235
+ if (child.scenario) {
236
+ child.scenario.steps = [...backgroundSteps, ...child.scenario.steps];
237
+ }
238
+ });
239
+ return astChildren;
240
+ };
241
+ parseBackgrounds = (ast) => {
242
+ return ast.children.filter((child) => child.background).map((child) => child.background);
243
+ };
244
+ collapseRulesAndBackgrounds = (astFeature) => {
245
+ const featureBackgrounds = this.parseBackgrounds(astFeature);
246
+ const children = this.collapseBackgrounds(astFeature.children, featureBackgrounds).reduce((newChildren, nextChild) => {
247
+ if (nextChild.rule) {
248
+ const rule = nextChild.rule;
249
+ const ruleBackgrounds = this.parseBackgrounds(rule);
250
+ return [
251
+ ...newChildren,
252
+ ...this.collapseBackgrounds(rule.children, [...featureBackgrounds, ...ruleBackgrounds])
253
+ ];
254
+ }
255
+ else {
256
+ return [...newChildren, nextChild];
257
+ }
258
+ }, []);
259
+ return {
260
+ ...astFeature,
261
+ children
262
+ };
263
+ };
264
+ createTranslationMap = (translateDialect) => {
265
+ const englishDialect = src_1.dialects.en;
266
+ const translationMap = {};
267
+ const props = [
268
+ 'and',
269
+ 'background',
270
+ 'but',
271
+ 'examples',
272
+ 'feature',
273
+ 'given',
274
+ 'scenario',
275
+ 'scenarioOutline',
276
+ 'then',
277
+ 'when',
278
+ 'rule'
279
+ ];
280
+ for (const prop of props) {
281
+ const dialectWords = translateDialect[prop];
282
+ const translationWords = englishDialect[prop];
283
+ let index = 0;
284
+ let defaultWordIndex = null;
285
+ for (const dialectWord of dialectWords) {
286
+ // skip "* " word
287
+ if (dialectWord.indexOf('*') !== 0) {
288
+ if (translationWords[index] !== undefined) {
289
+ translationMap[dialectWord] = translationWords[index];
290
+ if (defaultWordIndex === null) {
291
+ // set default when non is set yet
292
+ defaultWordIndex = index;
293
+ }
294
+ }
295
+ else {
296
+ // index has undefined value, translate to default word
297
+ if (defaultWordIndex !== null) {
298
+ translationMap[dialectWord] = translationWords[defaultWordIndex];
299
+ }
300
+ else {
301
+ throw new Error('No translation found for ' + dialectWord);
302
+ }
303
+ }
304
+ }
305
+ index++;
306
+ }
307
+ }
308
+ return translationMap;
309
+ };
310
+ translateKeywords = (astFeature) => {
311
+ const languageDialect = src_1.dialects[astFeature.language];
312
+ const translationMap = this.createTranslationMap(languageDialect);
313
+ astFeature.language = 'en';
314
+ astFeature.keyword = translationMap[astFeature.keyword] || astFeature.keyword;
315
+ for (const child of astFeature.children) {
316
+ if (child.background) {
317
+ child.background.keyword = translationMap[child.background.keyword] || child.background.keyword;
318
+ }
319
+ if (child.scenario) {
320
+ child.scenario.keyword = translationMap[child.scenario.keyword] || child.scenario.keyword;
321
+ for (const step of child.scenario.steps) {
322
+ step.keyword = translationMap[step.keyword] || step.keyword;
323
+ }
324
+ for (const example of child.scenario.examples) {
325
+ example.keyword = translationMap[example.keyword] || example.keyword;
326
+ }
327
+ }
328
+ }
329
+ return astFeature;
330
+ };
331
+ }
332
+ exports.default = GherkinFeature;
333
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2hlcmtpbi1mZWF0dXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2doZXJraW4vZ2hlcmtpbi1mZWF0dXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQkFBa0M7QUFDbEMsK0JBQXdDO0FBQ3hDLDZEQUErQztBQUMvQyxtREFBd0U7QUFDeEUsb0RBQStHO0FBRy9HLE1BQXFCLGNBQWM7SUFDMUIsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUVyQixXQUFXLEdBQUcsQ0FBQyxlQUF1QixFQUFFLE9BQWlCLEVBQUUsRUFBRTtRQUNuRSxJQUFJO1lBQ0gsTUFBTSxXQUFXLEdBQVcsSUFBQSxpQkFBWSxFQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNsRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNoRTtRQUFDLE9BQU8sR0FBUSxFQUFFO1lBQ2xCLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7Z0JBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLGVBQWUsR0FBRyxDQUFDLENBQUM7YUFDL0Q7WUFFRCxNQUFNLEdBQUcsQ0FBQztTQUNWO0lBQ0YsQ0FBQyxDQUFDO0lBRUssWUFBWSxHQUFHLENBQUMsV0FBbUIsRUFBRSxPQUFpQixFQUFFLEVBQUU7UUFDaEUsTUFBTSxZQUFZLEdBQUcsSUFBQSxXQUFRLEVBQUMsV0FBVyxDQUFDLENBQUM7UUFFM0MsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN4RixDQUFDLENBQUM7SUFFTSxZQUFZLEdBQUcsQ0FBQyxXQUFtQixFQUFFLGVBQXVCLEVBQUUsT0FBaUIsRUFBaUIs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