@lynxwall/cucumber-tsflow 5.0.4 → 5.0.7

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