@cucumber/cucumber 7.3.0 → 8.0.0-rc.2

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 (197) hide show
  1. package/README.md +11 -4
  2. package/lib/cli/argv_parser.d.ts +3 -3
  3. package/lib/cli/argv_parser.js +19 -19
  4. package/lib/cli/argv_parser.js.map +1 -1
  5. package/lib/cli/configuration_builder.d.ts +5 -46
  6. package/lib/cli/configuration_builder.js +61 -150
  7. package/lib/cli/configuration_builder.js.map +1 -1
  8. package/lib/cli/helpers.d.ts +5 -3
  9. package/lib/cli/helpers.js +42 -15
  10. package/lib/cli/helpers.js.map +1 -1
  11. package/lib/cli/i18n.js +7 -7
  12. package/lib/cli/i18n.js.map +1 -1
  13. package/lib/cli/index.d.ts +4 -23
  14. package/lib/cli/index.js +18 -193
  15. package/lib/cli/index.js.map +1 -1
  16. package/lib/cli/install_validator.js +1 -1
  17. package/lib/cli/install_validator.js.map +1 -1
  18. package/lib/cli/option_splitter.js +1 -0
  19. package/lib/cli/option_splitter.js.map +1 -1
  20. package/lib/cli/profile_loader.d.ts +3 -2
  21. package/lib/cli/profile_loader.js +20 -13
  22. package/lib/cli/profile_loader.js.map +1 -1
  23. package/lib/cli/publish_banner.js +1 -1
  24. package/lib/cli/publish_banner.js.map +1 -1
  25. package/lib/cli/run.js +3 -4
  26. package/lib/cli/run.js.map +1 -1
  27. package/lib/configuration/index.d.ts +1 -0
  28. package/lib/configuration/index.js +14 -0
  29. package/lib/configuration/index.js.map +1 -0
  30. package/lib/configuration/types.d.ts +29 -0
  31. package/lib/configuration/types.js +3 -0
  32. package/lib/configuration/types.js.map +1 -0
  33. package/lib/formatter/builder.d.ts +5 -4
  34. package/lib/formatter/builder.js +41 -55
  35. package/lib/formatter/builder.js.map +1 -1
  36. package/lib/formatter/get_color_fns.d.ts +4 -0
  37. package/lib/formatter/get_color_fns.js +11 -4
  38. package/lib/formatter/get_color_fns.js.map +1 -1
  39. package/lib/formatter/helpers/event_data_collector.d.ts +2 -1
  40. package/lib/formatter/helpers/event_data_collector.js +16 -15
  41. package/lib/formatter/helpers/event_data_collector.js.map +1 -1
  42. package/lib/formatter/helpers/formatters.d.ts +6 -0
  43. package/lib/formatter/helpers/formatters.js +41 -0
  44. package/lib/formatter/helpers/formatters.js.map +1 -0
  45. package/lib/formatter/helpers/gherkin_document_parser.js +29 -42
  46. package/lib/formatter/helpers/gherkin_document_parser.js.map +1 -1
  47. package/lib/formatter/helpers/issue_helpers.d.ts +2 -2
  48. package/lib/formatter/helpers/issue_helpers.js +6 -7
  49. package/lib/formatter/helpers/issue_helpers.js.map +1 -1
  50. package/lib/formatter/helpers/keyword_type.js +2 -6
  51. package/lib/formatter/helpers/keyword_type.js.map +1 -1
  52. package/lib/formatter/helpers/location_helpers.js +1 -1
  53. package/lib/formatter/helpers/location_helpers.js.map +1 -1
  54. package/lib/formatter/helpers/pickle_parser.js +9 -18
  55. package/lib/formatter/helpers/pickle_parser.js.map +1 -1
  56. package/lib/formatter/helpers/step_argument_formatter.js +1 -1
  57. package/lib/formatter/helpers/step_argument_formatter.js.map +1 -1
  58. package/lib/formatter/helpers/summary_helpers.js +8 -7
  59. package/lib/formatter/helpers/summary_helpers.js.map +1 -1
  60. package/lib/formatter/helpers/test_case_attempt_formatter.js +12 -12
  61. package/lib/formatter/helpers/test_case_attempt_formatter.js.map +1 -1
  62. package/lib/formatter/helpers/test_case_attempt_parser.js +17 -20
  63. package/lib/formatter/helpers/test_case_attempt_parser.js.map +1 -1
  64. package/lib/formatter/helpers/usage_helpers/index.js +26 -40
  65. package/lib/formatter/helpers/usage_helpers/index.js.map +1 -1
  66. package/lib/formatter/html_formatter.d.ts +1 -0
  67. package/lib/formatter/html_formatter.js +5 -4
  68. package/lib/formatter/html_formatter.js.map +1 -1
  69. package/lib/formatter/http_stream.js +7 -7
  70. package/lib/formatter/http_stream.js.map +1 -1
  71. package/lib/formatter/index.d.ts +1 -0
  72. package/lib/formatter/index.js.map +1 -1
  73. package/lib/formatter/json_formatter.d.ts +1 -0
  74. package/lib/formatter/json_formatter.js +25 -20
  75. package/lib/formatter/json_formatter.js.map +1 -1
  76. package/lib/formatter/message_formatter.d.ts +1 -0
  77. package/lib/formatter/message_formatter.js +1 -0
  78. package/lib/formatter/message_formatter.js.map +1 -1
  79. package/lib/formatter/progress_bar_formatter.d.ts +1 -0
  80. package/lib/formatter/progress_bar_formatter.js +17 -16
  81. package/lib/formatter/progress_bar_formatter.js.map +1 -1
  82. package/lib/formatter/progress_formatter.d.ts +1 -0
  83. package/lib/formatter/progress_formatter.js +3 -2
  84. package/lib/formatter/progress_formatter.js.map +1 -1
  85. package/lib/formatter/publish.d.ts +1 -0
  86. package/lib/formatter/publish.js +5 -0
  87. package/lib/formatter/publish.js.map +1 -0
  88. package/lib/formatter/rerun_formatter.d.ts +1 -0
  89. package/lib/formatter/rerun_formatter.js +15 -11
  90. package/lib/formatter/rerun_formatter.js.map +1 -1
  91. package/lib/formatter/snippets_formatter.d.ts +1 -0
  92. package/lib/formatter/snippets_formatter.js +3 -2
  93. package/lib/formatter/snippets_formatter.js.map +1 -1
  94. package/lib/formatter/step_definition_snippet_builder/index.js +2 -2
  95. package/lib/formatter/step_definition_snippet_builder/index.js.map +1 -1
  96. package/lib/formatter/step_definition_snippet_builder/javascript_snippet_syntax.js +3 -0
  97. package/lib/formatter/step_definition_snippet_builder/javascript_snippet_syntax.js.map +1 -1
  98. package/lib/formatter/step_definition_snippet_builder/snippet_syntax.d.ts +1 -1
  99. package/lib/formatter/step_definition_snippet_builder/snippet_syntax.js.map +1 -1
  100. package/lib/formatter/summary_formatter.d.ts +1 -0
  101. package/lib/formatter/summary_formatter.js +10 -10
  102. package/lib/formatter/summary_formatter.js.map +1 -1
  103. package/lib/formatter/usage_formatter.d.ts +1 -0
  104. package/lib/formatter/usage_formatter.js +9 -9
  105. package/lib/formatter/usage_formatter.js.map +1 -1
  106. package/lib/formatter/usage_json_formatter.d.ts +1 -0
  107. package/lib/formatter/usage_json_formatter.js +3 -2
  108. package/lib/formatter/usage_json_formatter.js.map +1 -1
  109. package/lib/importer.js +13 -0
  110. package/lib/index.d.ts +2 -0
  111. package/lib/index.js +6 -1
  112. package/lib/index.js.map +1 -1
  113. package/lib/models/data_table.js +9 -7
  114. package/lib/models/data_table.js.map +1 -1
  115. package/lib/models/step_definition.js +4 -5
  116. package/lib/models/step_definition.js.map +1 -1
  117. package/lib/pickle_filter.js +13 -13
  118. package/lib/pickle_filter.js.map +1 -1
  119. package/lib/run/formatters.d.ts +14 -0
  120. package/lib/run/formatters.js +76 -0
  121. package/lib/run/formatters.js.map +1 -0
  122. package/lib/run/index.d.ts +2 -0
  123. package/lib/run/index.js +15 -0
  124. package/lib/run/index.js.map +1 -0
  125. package/lib/run/paths.d.ts +6 -0
  126. package/lib/run/paths.js +83 -0
  127. package/lib/run/paths.js.map +1 -0
  128. package/lib/run/runCucumber.d.ts +3 -0
  129. package/lib/run/runCucumber.js +88 -0
  130. package/lib/run/runCucumber.js.map +1 -0
  131. package/lib/run/runtime.d.ts +19 -0
  132. package/lib/run/runtime.js +58 -0
  133. package/lib/run/runtime.js.map +1 -0
  134. package/lib/run/support.d.ts +8 -0
  135. package/lib/run/support.js +26 -0
  136. package/lib/run/support.js.map +1 -0
  137. package/lib/run/types.d.ts +12 -0
  138. package/lib/run/types.js +3 -0
  139. package/lib/run/types.js.map +1 -0
  140. package/lib/runtime/assemble_test_cases.js +3 -3
  141. package/lib/runtime/assemble_test_cases.js.map +1 -1
  142. package/lib/runtime/attachment_manager/index.js +4 -4
  143. package/lib/runtime/attachment_manager/index.js.map +1 -1
  144. package/lib/runtime/helpers.d.ts +1 -0
  145. package/lib/runtime/helpers.js +42 -4
  146. package/lib/runtime/helpers.js.map +1 -1
  147. package/lib/runtime/index.d.ts +5 -3
  148. package/lib/runtime/index.js +22 -46
  149. package/lib/runtime/index.js.map +1 -1
  150. package/lib/runtime/parallel/coordinator.d.ts +6 -5
  151. package/lib/runtime/parallel/coordinator.js +19 -22
  152. package/lib/runtime/parallel/coordinator.js.map +1 -1
  153. package/lib/runtime/parallel/run_worker.js +1 -1
  154. package/lib/runtime/parallel/run_worker.js.map +1 -1
  155. package/lib/runtime/parallel/worker.js +21 -13
  156. package/lib/runtime/parallel/worker.js.map +1 -1
  157. package/lib/runtime/step_runner.js +5 -7
  158. package/lib/runtime/step_runner.js.map +1 -1
  159. package/lib/runtime/stopwatch.js +4 -4
  160. package/lib/runtime/stopwatch.js.map +1 -1
  161. package/lib/runtime/test_case_runner.d.ts +3 -3
  162. package/lib/runtime/test_case_runner.js +19 -28
  163. package/lib/runtime/test_case_runner.js.map +1 -1
  164. package/lib/stack_trace_filter.js +6 -7
  165. package/lib/stack_trace_filter.js.map +1 -1
  166. package/lib/step_arguments.js +2 -2
  167. package/lib/step_arguments.js.map +1 -1
  168. package/lib/support_code_library_builder/{build_helpers.d.ts → build_parameter_type.d.ts} +0 -2
  169. package/lib/support_code_library_builder/build_parameter_type.js +13 -0
  170. package/lib/support_code_library_builder/build_parameter_type.js.map +1 -0
  171. package/lib/support_code_library_builder/get_definition_line_and_uri.d.ts +3 -0
  172. package/lib/support_code_library_builder/get_definition_line_and_uri.js +30 -0
  173. package/lib/support_code_library_builder/get_definition_line_and_uri.js.map +1 -0
  174. package/lib/support_code_library_builder/index.js +18 -31
  175. package/lib/support_code_library_builder/index.js.map +1 -1
  176. package/lib/support_code_library_builder/types.d.ts +2 -1
  177. package/lib/support_code_library_builder/types.js.map +1 -1
  178. package/lib/support_code_library_builder/validate_arguments.js +14 -19
  179. package/lib/support_code_library_builder/validate_arguments.js.map +1 -1
  180. package/lib/time.d.ts +1 -0
  181. package/lib/time.js +17 -2
  182. package/lib/time.js.map +1 -1
  183. package/lib/user_code_runner.js +10 -17
  184. package/lib/user_code_runner.js.map +1 -1
  185. package/lib/value_checker.d.ts +2 -2
  186. package/lib/value_checker.js.map +1 -1
  187. package/lib/version.d.ts +1 -0
  188. package/lib/version.js +6 -0
  189. package/lib/version.js.map +1 -0
  190. package/lib/wrapper.mjs +38 -0
  191. package/package.json +77 -67
  192. package/CHANGELOG.md +0 -1908
  193. package/lib/support_code_library_builder/build_helpers.js +0 -41
  194. package/lib/support_code_library_builder/build_helpers.js.map +0 -1
  195. package/lib/support_code_library_builder/finalize_helpers.d.ts +0 -10
  196. package/lib/support_code_library_builder/finalize_helpers.js +0 -26
  197. package/lib/support_code_library_builder/finalize_helpers.js.map +0 -1
@@ -22,22 +22,23 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
22
22
  return (mod && mod.__esModule) ? mod : { "default": mod };
23
23
  };
24
24
  Object.defineProperty(exports, "__esModule", { value: true });
25
- exports.emitSupportCodeMessages = exports.emitMetaMessage = exports.orderPickleIds = exports.parseGherkinMessageStream = exports.getExpandedArgv = void 0;
26
- const lodash_1 = __importDefault(require("lodash"));
25
+ exports.emitSupportCodeMessages = exports.emitMetaMessage = exports.isJavaScript = exports.orderPickleIds = exports.parseGherkinMessageStream = exports.getExpandedArgv = void 0;
27
26
  const argv_parser_1 = __importDefault(require("./argv_parser"));
28
27
  const profile_loader_1 = __importDefault(require("./profile_loader"));
29
28
  const knuth_shuffle_seeded_1 = __importDefault(require("knuth-shuffle-seeded"));
30
29
  const value_checker_1 = require("../value_checker");
31
30
  const option_splitter_1 = __importDefault(require("./option_splitter"));
31
+ const os_1 = __importDefault(require("os"));
32
32
  const messages = __importStar(require("@cucumber/messages"));
33
- const create_meta_1 = __importDefault(require("@cucumber/create-meta"));
33
+ const ci_environment_1 = __importDefault(require("@cucumber/ci-environment"));
34
34
  const support_code_library_builder_1 = require("../support_code_library_builder");
35
+ const version_1 = require("../version");
35
36
  async function getExpandedArgv({ argv, cwd, }) {
36
37
  const { options } = argv_parser_1.default.parse(argv);
37
38
  let fullArgv = argv;
38
- const profileArgv = await new profile_loader_1.default(cwd).getArgv(options.profile);
39
+ const profileArgv = await new profile_loader_1.default(cwd).getArgv(options.profile, options.config);
39
40
  if (profileArgv.length > 0) {
40
- fullArgv = lodash_1.default.concat(argv.slice(0, 2), profileArgv, argv.slice(2));
41
+ fullArgv = argv.slice(0, 2).concat(profileArgv).concat(argv.slice(2));
41
42
  }
42
43
  return fullArgv;
43
44
  }
@@ -47,7 +48,7 @@ async function parseGherkinMessageStream({ cwd, eventBroadcaster, eventDataColle
47
48
  const result = [];
48
49
  gherkinMessageStream.on('data', (envelope) => {
49
50
  eventBroadcaster.emit('envelope', envelope);
50
- if (value_checker_1.doesHaveValue(envelope.pickle)) {
51
+ if ((0, value_checker_1.doesHaveValue)(envelope.pickle)) {
51
52
  const pickle = envelope.pickle;
52
53
  const pickleId = pickle.id;
53
54
  const gherkinDocument = eventDataCollector.getGherkinDocument(pickle.uri);
@@ -55,7 +56,7 @@ async function parseGherkinMessageStream({ cwd, eventBroadcaster, eventDataColle
55
56
  result.push(pickleId);
56
57
  }
57
58
  }
58
- if (value_checker_1.doesHaveValue(envelope.parseError)) {
59
+ if ((0, value_checker_1.doesHaveValue)(envelope.parseError)) {
59
60
  reject(new Error(`Parse error in '${envelope.parseError.source.uri}': ${envelope.parseError.message}`));
60
61
  }
61
62
  });
@@ -69,27 +70,53 @@ async function parseGherkinMessageStream({ cwd, eventBroadcaster, eventDataColle
69
70
  exports.parseGherkinMessageStream = parseGherkinMessageStream;
70
71
  // Orders the pickleIds in place - morphs input
71
72
  function orderPickleIds(pickleIds, order) {
72
- let [type, seed] = option_splitter_1.default.split(order);
73
+ const [type, seed] = option_splitter_1.default.split(order);
73
74
  switch (type) {
74
75
  case 'defined':
75
76
  break;
76
77
  case 'random':
77
78
  if (seed === '') {
78
- seed = Math.floor(Math.random() * 1000 * 1000).toString();
79
- console.warn(`Random order using seed: ${seed}`);
79
+ const newSeed = Math.floor(Math.random() * 1000 * 1000).toString();
80
+ console.warn(`Random order using seed: ${newSeed}`);
81
+ (0, knuth_shuffle_seeded_1.default)(pickleIds, newSeed);
82
+ }
83
+ else {
84
+ (0, knuth_shuffle_seeded_1.default)(pickleIds, seed);
80
85
  }
81
- knuth_shuffle_seeded_1.default(pickleIds, seed);
82
86
  break;
83
87
  default:
84
88
  throw new Error('Unrecgonized order type. Should be `defined` or `random`');
85
89
  }
86
90
  }
87
91
  exports.orderPickleIds = orderPickleIds;
88
- async function emitMetaMessage(eventBroadcaster) {
89
- // eslint-disable-next-line @typescript-eslint/no-var-requires
90
- const { version } = require('../../package.json');
92
+ function isJavaScript(filePath) {
93
+ return (filePath.endsWith('.js') ||
94
+ filePath.endsWith('.mjs') ||
95
+ filePath.endsWith('.cjs'));
96
+ }
97
+ exports.isJavaScript = isJavaScript;
98
+ async function emitMetaMessage(eventBroadcaster, env) {
99
+ const meta = {
100
+ protocolVersion: messages.version,
101
+ implementation: {
102
+ version: version_1.version,
103
+ name: 'cucumber-js',
104
+ },
105
+ cpu: {
106
+ name: os_1.default.arch(),
107
+ },
108
+ os: {
109
+ name: os_1.default.platform(),
110
+ version: os_1.default.release(),
111
+ },
112
+ runtime: {
113
+ name: 'node.js',
114
+ version: process.versions.node,
115
+ },
116
+ ci: (0, ci_environment_1.default)(env),
117
+ };
91
118
  eventBroadcaster.emit('envelope', {
92
- meta: create_meta_1.default('cucumber-js', version, process.env),
119
+ meta,
93
120
  });
94
121
  }
95
122
  exports.emitMetaMessage = emitMetaMessage;
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/cli/helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import _ from 'lodash'\nimport ArgvParser from './argv_parser'\nimport ProfileLoader from './profile_loader'\nimport shuffle from 'knuth-shuffle-seeded'\nimport { EventEmitter } from 'events'\nimport PickleFilter from '../pickle_filter'\nimport { EventDataCollector } from '../formatter/helpers'\nimport { doesHaveValue } from '../value_checker'\nimport OptionSplitter from './option_splitter'\nimport { Readable } from 'stream'\nimport { IdGenerator } from '@cucumber/messages'\nimport * as messages from '@cucumber/messages'\nimport createMeta from '@cucumber/create-meta'\nimport { ISupportCodeLibrary } from '../support_code_library_builder/types'\nimport TestCaseHookDefinition from '../models/test_case_hook_definition'\nimport TestRunHookDefinition from '../models/test_run_hook_definition'\nimport { builtinParameterTypes } from '../support_code_library_builder'\n\nexport interface IGetExpandedArgvRequest {\n argv: string[]\n cwd: string\n}\n\nexport async function getExpandedArgv({\n argv,\n cwd,\n}: IGetExpandedArgvRequest): Promise<string[]> {\n const { options } = ArgvParser.parse(argv)\n let fullArgv = argv\n const profileArgv = await new ProfileLoader(cwd).getArgv(options.profile)\n if (profileArgv.length > 0) {\n fullArgv = _.concat(argv.slice(0, 2), profileArgv, argv.slice(2))\n }\n return fullArgv\n}\n\ninterface IParseGherkinMessageStreamRequest {\n cwd: string\n eventBroadcaster: EventEmitter\n eventDataCollector: EventDataCollector\n gherkinMessageStream: Readable\n order: string\n pickleFilter: PickleFilter\n}\n\nexport async function parseGherkinMessageStream({\n cwd,\n eventBroadcaster,\n eventDataCollector,\n gherkinMessageStream,\n order,\n pickleFilter,\n}: IParseGherkinMessageStreamRequest): Promise<string[]> {\n return await new Promise<string[]>((resolve, reject) => {\n const result: string[] = []\n gherkinMessageStream.on('data', (envelope: messages.Envelope) => {\n eventBroadcaster.emit('envelope', envelope)\n if (doesHaveValue(envelope.pickle)) {\n const pickle = envelope.pickle\n const pickleId = pickle.id\n const gherkinDocument = eventDataCollector.getGherkinDocument(\n pickle.uri\n )\n if (pickleFilter.matches({ gherkinDocument, pickle })) {\n result.push(pickleId)\n }\n }\n if (doesHaveValue(envelope.parseError)) {\n reject(\n new Error(\n `Parse error in '${envelope.parseError.source.uri}': ${envelope.parseError.message}`\n )\n )\n }\n })\n gherkinMessageStream.on('end', () => {\n orderPickleIds(result, order)\n resolve(result)\n })\n gherkinMessageStream.on('error', reject)\n })\n}\n\n// Orders the pickleIds in place - morphs input\nexport function orderPickleIds(pickleIds: string[], order: string): void {\n let [type, seed] = OptionSplitter.split(order)\n switch (type) {\n case 'defined':\n break\n case 'random':\n if (seed === '') {\n seed = Math.floor(Math.random() * 1000 * 1000).toString()\n console.warn(`Random order using seed: ${seed}`)\n }\n shuffle(pickleIds, seed)\n break\n default:\n throw new Error(\n 'Unrecgonized order type. Should be `defined` or `random`'\n )\n }\n}\n\nexport async function emitMetaMessage(\n eventBroadcaster: EventEmitter\n): Promise<void> {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { version } = require('../../package.json')\n eventBroadcaster.emit('envelope', {\n meta: createMeta('cucumber-js', version, process.env),\n })\n}\n\nfunction emitParameterTypes(\n supportCodeLibrary: ISupportCodeLibrary,\n eventBroadcaster: EventEmitter,\n newId: IdGenerator.NewId\n): void {\n for (const parameterType of supportCodeLibrary.parameterTypeRegistry\n .parameterTypes) {\n if (builtinParameterTypes.includes(parameterType.name)) {\n continue\n }\n const envelope: messages.Envelope = {\n parameterType: {\n id: newId(),\n name: parameterType.name,\n preferForRegularExpressionMatch: parameterType.preferForRegexpMatch,\n regularExpressions: parameterType.regexpStrings,\n useForSnippets: parameterType.useForSnippets,\n },\n }\n eventBroadcaster.emit('envelope', envelope)\n }\n}\n\nfunction emitUndefinedParameterTypes(\n supportCodeLibrary: ISupportCodeLibrary,\n eventBroadcaster: EventEmitter\n): void {\n for (const undefinedParameterType of supportCodeLibrary.undefinedParameterTypes) {\n const envelope: messages.Envelope = {\n undefinedParameterType,\n }\n eventBroadcaster.emit('envelope', envelope)\n }\n}\n\nfunction emitStepDefinitions(\n supportCodeLibrary: ISupportCodeLibrary,\n eventBroadcaster: EventEmitter\n): void {\n supportCodeLibrary.stepDefinitions.forEach((stepDefinition) => {\n const envelope: messages.Envelope = {\n stepDefinition: {\n id: stepDefinition.id,\n pattern: {\n source: stepDefinition.pattern.toString(),\n type:\n typeof stepDefinition.pattern === 'string'\n ? messages.StepDefinitionPatternType.CUCUMBER_EXPRESSION\n : messages.StepDefinitionPatternType.REGULAR_EXPRESSION,\n },\n sourceReference: {\n uri: stepDefinition.uri,\n location: {\n line: stepDefinition.line,\n },\n },\n },\n }\n eventBroadcaster.emit('envelope', envelope)\n })\n}\n\nfunction emitTestCaseHooks(\n supportCodeLibrary: ISupportCodeLibrary,\n eventBroadcaster: EventEmitter\n): void {\n ;[]\n .concat(\n supportCodeLibrary.beforeTestCaseHookDefinitions,\n supportCodeLibrary.afterTestCaseHookDefinitions\n )\n .forEach((testCaseHookDefinition: TestCaseHookDefinition) => {\n const envelope: messages.Envelope = {\n hook: {\n id: testCaseHookDefinition.id,\n tagExpression: testCaseHookDefinition.tagExpression,\n sourceReference: {\n uri: testCaseHookDefinition.uri,\n location: {\n line: testCaseHookDefinition.line,\n },\n },\n },\n }\n eventBroadcaster.emit('envelope', envelope)\n })\n}\n\nfunction emitTestRunHooks(\n supportCodeLibrary: ISupportCodeLibrary,\n eventBroadcaster: EventEmitter\n): void {\n ;[]\n .concat(\n supportCodeLibrary.beforeTestRunHookDefinitions,\n supportCodeLibrary.afterTestRunHookDefinitions\n )\n .forEach((testRunHookDefinition: TestRunHookDefinition) => {\n const envelope: messages.Envelope = {\n hook: {\n id: testRunHookDefinition.id,\n sourceReference: {\n uri: testRunHookDefinition.uri,\n location: {\n line: testRunHookDefinition.line,\n },\n },\n },\n }\n eventBroadcaster.emit('envelope', envelope)\n })\n}\n\nexport function emitSupportCodeMessages({\n eventBroadcaster,\n supportCodeLibrary,\n newId,\n}: {\n eventBroadcaster: EventEmitter\n supportCodeLibrary: ISupportCodeLibrary\n newId: IdGenerator.NewId\n}): void {\n emitParameterTypes(supportCodeLibrary, eventBroadcaster, newId)\n emitUndefinedParameterTypes(supportCodeLibrary, eventBroadcaster)\n emitStepDefinitions(supportCodeLibrary, eventBroadcaster)\n emitTestCaseHooks(supportCodeLibrary, eventBroadcaster)\n emitTestRunHooks(supportCodeLibrary, eventBroadcaster)\n}\n"]}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/cli/helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import ArgvParser from './argv_parser'\nimport ProfileLoader from './profile_loader'\nimport shuffle from 'knuth-shuffle-seeded'\nimport { EventEmitter } from 'events'\nimport PickleFilter from '../pickle_filter'\nimport { EventDataCollector } from '../formatter/helpers'\nimport { doesHaveValue } from '../value_checker'\nimport OptionSplitter from './option_splitter'\nimport { Readable } from 'stream'\nimport os from 'os'\nimport * as messages from '@cucumber/messages'\nimport { IdGenerator } from '@cucumber/messages'\nimport detectCiEnvironment from '@cucumber/ci-environment'\nimport { ISupportCodeLibrary } from '../support_code_library_builder/types'\nimport TestCaseHookDefinition from '../models/test_case_hook_definition'\nimport TestRunHookDefinition from '../models/test_run_hook_definition'\nimport { builtinParameterTypes } from '../support_code_library_builder'\nimport { version } from '../version'\n\nexport interface IGetExpandedArgvRequest {\n argv: string[]\n cwd: string\n}\n\nexport async function getExpandedArgv({\n argv,\n cwd,\n}: IGetExpandedArgvRequest): Promise<string[]> {\n const { options } = ArgvParser.parse(argv)\n let fullArgv = argv\n const profileArgv = await new ProfileLoader(cwd).getArgv(\n options.profile,\n options.config\n )\n if (profileArgv.length > 0) {\n fullArgv = argv.slice(0, 2).concat(profileArgv).concat(argv.slice(2))\n }\n return fullArgv\n}\n\ninterface IParseGherkinMessageStreamRequest {\n cwd: string\n eventBroadcaster: EventEmitter\n eventDataCollector: EventDataCollector\n gherkinMessageStream: Readable\n order: PickleOrder\n pickleFilter: PickleFilter\n}\n\nexport type PickleOrder = 'defined' | 'random'\n\nexport async function parseGherkinMessageStream({\n cwd,\n eventBroadcaster,\n eventDataCollector,\n gherkinMessageStream,\n order,\n pickleFilter,\n}: IParseGherkinMessageStreamRequest): Promise<string[]> {\n return await new Promise<string[]>((resolve, reject) => {\n const result: string[] = []\n gherkinMessageStream.on('data', (envelope: messages.Envelope) => {\n eventBroadcaster.emit('envelope', envelope)\n if (doesHaveValue(envelope.pickle)) {\n const pickle = envelope.pickle\n const pickleId = pickle.id\n const gherkinDocument = eventDataCollector.getGherkinDocument(\n pickle.uri\n )\n if (pickleFilter.matches({ gherkinDocument, pickle })) {\n result.push(pickleId)\n }\n }\n if (doesHaveValue(envelope.parseError)) {\n reject(\n new Error(\n `Parse error in '${envelope.parseError.source.uri}': ${envelope.parseError.message}`\n )\n )\n }\n })\n gherkinMessageStream.on('end', () => {\n orderPickleIds(result, order)\n resolve(result)\n })\n gherkinMessageStream.on('error', reject)\n })\n}\n\n// Orders the pickleIds in place - morphs input\nexport function orderPickleIds(pickleIds: string[], order: PickleOrder): void {\n const [type, seed] = OptionSplitter.split(order)\n switch (type) {\n case 'defined':\n break\n case 'random':\n if (seed === '') {\n const newSeed = Math.floor(Math.random() * 1000 * 1000).toString()\n console.warn(`Random order using seed: ${newSeed}`)\n shuffle(pickleIds, newSeed)\n } else {\n shuffle(pickleIds, seed)\n }\n break\n default:\n throw new Error(\n 'Unrecgonized order type. Should be `defined` or `random`'\n )\n }\n}\n\nexport function isJavaScript(filePath: string): boolean {\n return (\n filePath.endsWith('.js') ||\n filePath.endsWith('.mjs') ||\n filePath.endsWith('.cjs')\n )\n}\n\nexport async function emitMetaMessage(\n eventBroadcaster: EventEmitter,\n env: NodeJS.ProcessEnv\n): Promise<void> {\n const meta: messages.Meta = {\n protocolVersion: messages.version,\n implementation: {\n version,\n name: 'cucumber-js',\n },\n cpu: {\n name: os.arch(),\n },\n os: {\n name: os.platform(),\n version: os.release(),\n },\n runtime: {\n name: 'node.js',\n version: process.versions.node,\n },\n ci: detectCiEnvironment(env),\n }\n eventBroadcaster.emit('envelope', {\n meta,\n })\n}\n\nfunction emitParameterTypes(\n supportCodeLibrary: ISupportCodeLibrary,\n eventBroadcaster: EventEmitter,\n newId: IdGenerator.NewId\n): void {\n for (const parameterType of supportCodeLibrary.parameterTypeRegistry\n .parameterTypes) {\n if (builtinParameterTypes.includes(parameterType.name)) {\n continue\n }\n const envelope: messages.Envelope = {\n parameterType: {\n id: newId(),\n name: parameterType.name,\n preferForRegularExpressionMatch: parameterType.preferForRegexpMatch,\n regularExpressions: parameterType.regexpStrings,\n useForSnippets: parameterType.useForSnippets,\n },\n }\n eventBroadcaster.emit('envelope', envelope)\n }\n}\n\nfunction emitUndefinedParameterTypes(\n supportCodeLibrary: ISupportCodeLibrary,\n eventBroadcaster: EventEmitter\n): void {\n for (const undefinedParameterType of supportCodeLibrary.undefinedParameterTypes) {\n const envelope: messages.Envelope = {\n undefinedParameterType,\n }\n eventBroadcaster.emit('envelope', envelope)\n }\n}\n\nfunction emitStepDefinitions(\n supportCodeLibrary: ISupportCodeLibrary,\n eventBroadcaster: EventEmitter\n): void {\n supportCodeLibrary.stepDefinitions.forEach((stepDefinition) => {\n const envelope: messages.Envelope = {\n stepDefinition: {\n id: stepDefinition.id,\n pattern: {\n source: stepDefinition.pattern.toString(),\n type:\n typeof stepDefinition.pattern === 'string'\n ? messages.StepDefinitionPatternType.CUCUMBER_EXPRESSION\n : messages.StepDefinitionPatternType.REGULAR_EXPRESSION,\n },\n sourceReference: {\n uri: stepDefinition.uri,\n location: {\n line: stepDefinition.line,\n },\n },\n },\n }\n eventBroadcaster.emit('envelope', envelope)\n })\n}\n\nfunction emitTestCaseHooks(\n supportCodeLibrary: ISupportCodeLibrary,\n eventBroadcaster: EventEmitter\n): void {\n ;[]\n .concat(\n supportCodeLibrary.beforeTestCaseHookDefinitions,\n supportCodeLibrary.afterTestCaseHookDefinitions\n )\n .forEach((testCaseHookDefinition: TestCaseHookDefinition) => {\n const envelope: messages.Envelope = {\n hook: {\n id: testCaseHookDefinition.id,\n tagExpression: testCaseHookDefinition.tagExpression,\n sourceReference: {\n uri: testCaseHookDefinition.uri,\n location: {\n line: testCaseHookDefinition.line,\n },\n },\n },\n }\n eventBroadcaster.emit('envelope', envelope)\n })\n}\n\nfunction emitTestRunHooks(\n supportCodeLibrary: ISupportCodeLibrary,\n eventBroadcaster: EventEmitter\n): void {\n ;[]\n .concat(\n supportCodeLibrary.beforeTestRunHookDefinitions,\n supportCodeLibrary.afterTestRunHookDefinitions\n )\n .forEach((testRunHookDefinition: TestRunHookDefinition) => {\n const envelope: messages.Envelope = {\n hook: {\n id: testRunHookDefinition.id,\n sourceReference: {\n uri: testRunHookDefinition.uri,\n location: {\n line: testRunHookDefinition.line,\n },\n },\n },\n }\n eventBroadcaster.emit('envelope', envelope)\n })\n}\n\nexport function emitSupportCodeMessages({\n eventBroadcaster,\n supportCodeLibrary,\n newId,\n}: {\n eventBroadcaster: EventEmitter\n supportCodeLibrary: ISupportCodeLibrary\n newId: IdGenerator.NewId\n}): void {\n emitParameterTypes(supportCodeLibrary, eventBroadcaster, newId)\n emitUndefinedParameterTypes(supportCodeLibrary, eventBroadcaster)\n emitStepDefinitions(supportCodeLibrary, eventBroadcaster)\n emitTestCaseHooks(supportCodeLibrary, eventBroadcaster)\n emitTestRunHooks(supportCodeLibrary, eventBroadcaster)\n}\n"]}
package/lib/cli/i18n.js CHANGED
@@ -4,12 +4,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.getKeywords = exports.getLanguages = void 0;
7
- const lodash_1 = __importDefault(require("lodash"));
8
7
  const gherkin_1 = require("@cucumber/gherkin");
9
8
  const cli_table3_1 = __importDefault(require("cli-table3"));
10
9
  const capital_case_1 = require("capital-case");
11
10
  const keywords = [
12
11
  'feature',
12
+ 'rule',
13
13
  'background',
14
14
  'scenario',
15
15
  'scenarioOutline',
@@ -50,19 +50,19 @@ function getAsTable(header, rows) {
50
50
  return table.toString();
51
51
  }
52
52
  function getLanguages() {
53
- const rows = lodash_1.default.map(gherkin_1.dialects, (data, isoCode) => [
53
+ const rows = Object.keys(gherkin_1.dialects).map((isoCode) => [
54
54
  isoCode,
55
- data.name,
56
- data.native,
55
+ gherkin_1.dialects[isoCode].name,
56
+ gherkin_1.dialects[isoCode].native,
57
57
  ]);
58
58
  return getAsTable(['ISO 639-1', 'ENGLISH NAME', 'NATIVE NAME'], rows);
59
59
  }
60
60
  exports.getLanguages = getLanguages;
61
61
  function getKeywords(isoCode) {
62
62
  const language = gherkin_1.dialects[isoCode];
63
- const rows = lodash_1.default.map(keywords, (keyword) => {
64
- const words = lodash_1.default.map(language[keyword], (s) => `"${s}"`).join(', ');
65
- return [capital_case_1.capitalCase(keyword), words];
63
+ const rows = keywords.map((keyword) => {
64
+ const words = language[keyword].map((s) => `"${s}"`).join(', ');
65
+ return [(0, capital_case_1.capitalCase)(keyword), words];
66
66
  });
67
67
  return getAsTable(['ENGLISH KEYWORD', 'NATIVE KEYWORDS'], rows);
68
68
  }
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/cli/i18n.ts"],"names":[],"mappings":";;;;;;AAAA,oDAAsB;AACtB,+CAA4C;AAC5C,4DAA8B;AAC9B,+CAA0C;AAE1C,MAAM,QAAQ,GAAG;IACf,SAAS;IACT,YAAY;IACZ,UAAU;IACV,iBAAiB;IACjB,UAAU;IACV,OAAO;IACP,MAAM;IACN,MAAM;IACN,KAAK;IACL,KAAK;CACG,CAAA;AAEV,SAAS,UAAU,CAAC,MAAgB,EAAE,IAAgB;IACpD,MAAM,KAAK,GAAG,IAAI,oBAAK,CAAC;QACtB,KAAK,EAAE;YACL,MAAM,EAAE,EAAE;YACV,aAAa,EAAE,EAAE;YACjB,YAAY,EAAE,EAAE;YAChB,cAAc,EAAE,EAAE;YAClB,IAAI,EAAE,EAAE;YACR,UAAU,EAAE,EAAE;YACd,GAAG,EAAE,EAAE;YACP,SAAS,EAAE,EAAE;YACb,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,EAAE;YACT,WAAW,EAAE,EAAE;YACf,GAAG,EAAE,EAAE;YACP,UAAU,EAAE,EAAE;YACd,SAAS,EAAE,EAAE;YACb,WAAW,EAAE,EAAE;SAChB;QACD,KAAK,EAAE;YACL,MAAM,EAAE,EAAE;YACV,cAAc,EAAE,CAAC;YACjB,eAAe,EAAE,CAAC;SACnB;KACF,CAAC,CAAA;IACF,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAClB,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;IACnB,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAA;AACzB,CAAC;AAED,SAAgB,YAAY;IAC1B,MAAM,IAAI,GAAG,gBAAC,CAAC,GAAG,CAAC,kBAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC;QAC9C,OAAO;QACP,IAAI,CAAC,IAAI;QACT,IAAI,CAAC,MAAM;KACZ,CAAC,CAAA;IACF,OAAO,UAAU,CAAC,CAAC,WAAW,EAAE,cAAc,EAAE,aAAa,CAAC,EAAE,IAAI,CAAC,CAAA;AACvE,CAAC;AAPD,oCAOC;AAED,SAAgB,WAAW,CAAC,OAAe;IACzC,MAAM,QAAQ,GAAG,kBAAQ,CAAC,OAAO,CAAC,CAAA;IAClC,MAAM,IAAI,GAAG,gBAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE;QACvC,MAAM,KAAK,GAAG,gBAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClE,OAAO,CAAC,0BAAW,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAA;IACtC,CAAC,CAAC,CAAA;IACF,OAAO,UAAU,CAAC,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,EAAE,IAAI,CAAC,CAAA;AACjE,CAAC;AAPD,kCAOC","sourcesContent":["import _ from 'lodash'\nimport { dialects } from '@cucumber/gherkin'\nimport Table from 'cli-table3'\nimport { capitalCase } from 'capital-case'\n\nconst keywords = [\n 'feature',\n 'background',\n 'scenario',\n 'scenarioOutline',\n 'examples',\n 'given',\n 'when',\n 'then',\n 'and',\n 'but',\n] as const\n\nfunction getAsTable(header: string[], rows: string[][]): string {\n const table = new Table({\n chars: {\n bottom: '',\n 'bottom-left': '',\n 'bottom-mid': '',\n 'bottom-right': '',\n left: '',\n 'left-mid': '',\n mid: '',\n 'mid-mid': '',\n middle: ' | ',\n right: '',\n 'right-mid': '',\n top: '',\n 'top-left': '',\n 'top-mid': '',\n 'top-right': '',\n },\n style: {\n border: [],\n 'padding-left': 0,\n 'padding-right': 0,\n },\n })\n table.push(header)\n table.push(...rows)\n return table.toString()\n}\n\nexport function getLanguages(): string {\n const rows = _.map(dialects, (data, isoCode) => [\n isoCode,\n data.name,\n data.native,\n ])\n return getAsTable(['ISO 639-1', 'ENGLISH NAME', 'NATIVE NAME'], rows)\n}\n\nexport function getKeywords(isoCode: string): string {\n const language = dialects[isoCode]\n const rows = _.map(keywords, (keyword) => {\n const words = _.map(language[keyword], (s) => `\"${s}\"`).join(', ')\n return [capitalCase(keyword), words]\n })\n return getAsTable(['ENGLISH KEYWORD', 'NATIVE KEYWORDS'], rows)\n}\n"]}
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/cli/i18n.ts"],"names":[],"mappings":";;;;;;AAAA,+CAA4C;AAC5C,4DAA8B;AAC9B,+CAA0C;AAE1C,MAAM,QAAQ,GAAG;IACf,SAAS;IACT,MAAM;IACN,YAAY;IACZ,UAAU;IACV,iBAAiB;IACjB,UAAU;IACV,OAAO;IACP,MAAM;IACN,MAAM;IACN,KAAK;IACL,KAAK;CACG,CAAA;AAEV,SAAS,UAAU,CAAC,MAAgB,EAAE,IAAgB;IACpD,MAAM,KAAK,GAAG,IAAI,oBAAK,CAAC;QACtB,KAAK,EAAE;YACL,MAAM,EAAE,EAAE;YACV,aAAa,EAAE,EAAE;YACjB,YAAY,EAAE,EAAE;YAChB,cAAc,EAAE,EAAE;YAClB,IAAI,EAAE,EAAE;YACR,UAAU,EAAE,EAAE;YACd,GAAG,EAAE,EAAE;YACP,SAAS,EAAE,EAAE;YACb,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,EAAE;YACT,WAAW,EAAE,EAAE;YACf,GAAG,EAAE,EAAE;YACP,UAAU,EAAE,EAAE;YACd,SAAS,EAAE,EAAE;YACb,WAAW,EAAE,EAAE;SAChB;QACD,KAAK,EAAE;YACL,MAAM,EAAE,EAAE;YACV,cAAc,EAAE,CAAC;YACjB,eAAe,EAAE,CAAC;SACnB;KACF,CAAC,CAAA;IACF,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAClB,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;IACnB,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAA;AACzB,CAAC;AAED,SAAgB,YAAY;IAC1B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,kBAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAClD,OAAO;QACP,kBAAQ,CAAC,OAAO,CAAC,CAAC,IAAI;QACtB,kBAAQ,CAAC,OAAO,CAAC,CAAC,MAAM;KACzB,CAAC,CAAA;IACF,OAAO,UAAU,CAAC,CAAC,WAAW,EAAE,cAAc,EAAE,aAAa,CAAC,EAAE,IAAI,CAAC,CAAA;AACvE,CAAC;AAPD,oCAOC;AAED,SAAgB,WAAW,CAAC,OAAe;IACzC,MAAM,QAAQ,GAAG,kBAAQ,CAAC,OAAO,CAAC,CAAA;IAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QACpC,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC/D,OAAO,CAAC,IAAA,0BAAW,EAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAA;IACtC,CAAC,CAAC,CAAA;IACF,OAAO,UAAU,CAAC,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,EAAE,IAAI,CAAC,CAAA;AACjE,CAAC;AAPD,kCAOC","sourcesContent":["import { dialects } from '@cucumber/gherkin'\nimport Table from 'cli-table3'\nimport { capitalCase } from 'capital-case'\n\nconst keywords = [\n 'feature',\n 'rule',\n 'background',\n 'scenario',\n 'scenarioOutline',\n 'examples',\n 'given',\n 'when',\n 'then',\n 'and',\n 'but',\n] as const\n\nfunction getAsTable(header: string[], rows: string[][]): string {\n const table = new Table({\n chars: {\n bottom: '',\n 'bottom-left': '',\n 'bottom-mid': '',\n 'bottom-right': '',\n left: '',\n 'left-mid': '',\n mid: '',\n 'mid-mid': '',\n middle: ' | ',\n right: '',\n 'right-mid': '',\n top: '',\n 'top-left': '',\n 'top-mid': '',\n 'top-right': '',\n },\n style: {\n border: [],\n 'padding-left': 0,\n 'padding-right': 0,\n },\n })\n table.push(header)\n table.push(...rows)\n return table.toString()\n}\n\nexport function getLanguages(): string {\n const rows = Object.keys(dialects).map((isoCode) => [\n isoCode,\n dialects[isoCode].name,\n dialects[isoCode].native,\n ])\n return getAsTable(['ISO 639-1', 'ENGLISH NAME', 'NATIVE NAME'], rows)\n}\n\nexport function getKeywords(isoCode: string): string {\n const language = dialects[isoCode]\n const rows = keywords.map((keyword) => {\n const words = language[keyword].map((s) => `\"${s}\"`).join(', ')\n return [capitalCase(keyword), words]\n })\n return getAsTable(['ENGLISH KEYWORD', 'NATIVE KEYWORDS'], rows)\n}\n"]}
@@ -1,39 +1,20 @@
1
1
  /// <reference types="node" />
2
- import { EventDataCollector } from '../formatter/helpers';
3
- import { IConfiguration, IConfigurationFormat } from './configuration_builder';
4
- import { EventEmitter } from 'events';
5
- import { IdGenerator } from '@cucumber/messages';
6
2
  import { IFormatterStream } from '../formatter';
7
- import { ISupportCodeLibrary } from '../support_code_library_builder/types';
8
- import { IParsedArgvFormatOptions } from './argv_parser';
9
3
  export interface ICliRunResult {
4
+ shouldAdvertisePublish: boolean;
10
5
  shouldExitImmediately: boolean;
11
6
  success: boolean;
12
7
  }
13
- interface IInitializeFormattersRequest {
14
- eventBroadcaster: EventEmitter;
15
- eventDataCollector: EventDataCollector;
16
- formatOptions: IParsedArgvFormatOptions;
17
- formats: IConfigurationFormat[];
18
- supportCodeLibrary: ISupportCodeLibrary;
19
- }
20
- interface IGetSupportCodeLibraryRequest {
21
- newId: IdGenerator.NewId;
22
- supportCodeRequiredModules: string[];
23
- supportCodePaths: string[];
24
- }
25
8
  export default class Cli {
26
9
  private readonly argv;
27
10
  private readonly cwd;
28
11
  private readonly stdout;
29
- constructor({ argv, cwd, stdout, }: {
12
+ private readonly env;
13
+ constructor({ argv, cwd, stdout, env, }: {
30
14
  argv: string[];
31
15
  cwd: string;
32
16
  stdout: IFormatterStream;
17
+ env: NodeJS.ProcessEnv;
33
18
  });
34
- getConfiguration(): Promise<IConfiguration>;
35
- initializeFormatters({ eventBroadcaster, eventDataCollector, formatOptions, formats, supportCodeLibrary, }: IInitializeFormattersRequest): Promise<() => Promise<void>>;
36
- getSupportCodeLibrary({ newId, supportCodeRequiredModules, supportCodePaths, }: IGetSupportCodeLibraryRequest): ISupportCodeLibrary;
37
19
  run(): Promise<ICliRunResult>;
38
20
  }
39
- export {};
package/lib/cli/index.js CHANGED
@@ -1,212 +1,37 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
- Object.defineProperty(o, "default", { enumerable: true, value: v });
11
- }) : function(o, v) {
12
- o["default"] = v;
13
- });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
21
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
22
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
23
4
  };
24
5
  Object.defineProperty(exports, "__esModule", { value: true });
25
- const helpers_1 = require("../formatter/helpers");
26
- const helpers_2 = require("./helpers");
6
+ const helpers_1 = require("./helpers");
27
7
  const install_validator_1 = require("./install_validator");
28
- const I18n = __importStar(require("./i18n"));
29
- const configuration_builder_1 = __importDefault(require("./configuration_builder"));
30
- const events_1 = require("events");
31
- const builder_1 = __importDefault(require("../formatter/builder"));
32
- const fs_1 = __importDefault(require("mz/fs"));
33
- const path_1 = __importDefault(require("path"));
34
- const pickle_filter_1 = __importDefault(require("../pickle_filter"));
35
- const bluebird_1 = __importDefault(require("bluebird"));
36
- const coordinator_1 = __importDefault(require("../runtime/parallel/coordinator"));
37
- const runtime_1 = __importDefault(require("../runtime"));
38
- const support_code_library_builder_1 = __importDefault(require("../support_code_library_builder"));
39
- const messages_1 = require("@cucumber/messages");
40
- const value_checker_1 = require("../value_checker");
41
- const gherkin_streams_1 = require("@cucumber/gherkin-streams");
42
- const http_stream_1 = __importDefault(require("../formatter/http_stream"));
43
- const stream_1 = require("stream");
44
- const { incrementing, uuid } = messages_1.IdGenerator;
8
+ const configuration_builder_1 = require("./configuration_builder");
9
+ const run_1 = require("../run");
10
+ const argv_parser_1 = __importDefault(require("./argv_parser"));
45
11
  class Cli {
46
- constructor({ argv, cwd, stdout, }) {
12
+ constructor({ argv, cwd, stdout, env, }) {
47
13
  this.argv = argv;
48
14
  this.cwd = cwd;
49
15
  this.stdout = stdout;
16
+ this.env = env;
50
17
  }
51
- async getConfiguration() {
52
- const fullArgv = await helpers_2.getExpandedArgv({
18
+ async run() {
19
+ await (0, install_validator_1.validateInstall)(this.cwd);
20
+ const fromArgv = argv_parser_1.default.parse(await (0, helpers_1.getExpandedArgv)({
53
21
  argv: this.argv,
54
22
  cwd: this.cwd,
55
- });
56
- return await configuration_builder_1.default.build({
57
- argv: fullArgv,
23
+ }));
24
+ const configuration = await (0, configuration_builder_1.buildConfiguration)(fromArgv, this.env);
25
+ const { success } = await (0, run_1.runCucumber)(configuration, {
58
26
  cwd: this.cwd,
27
+ stdout: this.stdout,
28
+ env: this.env,
59
29
  });
60
- }
61
- async initializeFormatters({ eventBroadcaster, eventDataCollector, formatOptions, formats, supportCodeLibrary, }) {
62
- const formatters = await bluebird_1.default.map(formats, async ({ type, outputTo }) => {
63
- let stream = this.stdout;
64
- if (outputTo !== '') {
65
- if (outputTo.match(/^https?:\/\//) !== null) {
66
- const headers = {};
67
- if (process.env.CUCUMBER_PUBLISH_TOKEN !== undefined) {
68
- headers.Authorization = `Bearer ${process.env.CUCUMBER_PUBLISH_TOKEN}`;
69
- }
70
- stream = new http_stream_1.default(outputTo, 'GET', headers);
71
- const readerStream = new stream_1.Writable({
72
- objectMode: true,
73
- write: function (responseBody, encoding, writeCallback) {
74
- console.error(responseBody);
75
- writeCallback();
76
- },
77
- });
78
- stream.pipe(readerStream);
79
- }
80
- else {
81
- const fd = await fs_1.default.open(path_1.default.resolve(this.cwd, outputTo), 'w');
82
- stream = fs_1.default.createWriteStream(null, { fd });
83
- }
84
- }
85
- stream.on('error', (error) => {
86
- console.error(error.message);
87
- process.exit(1);
88
- });
89
- const typeOptions = {
90
- cwd: this.cwd,
91
- eventBroadcaster,
92
- eventDataCollector,
93
- log: stream.write.bind(stream),
94
- parsedArgvOptions: formatOptions,
95
- stream,
96
- cleanup: stream === this.stdout
97
- ? async () => await Promise.resolve()
98
- : bluebird_1.default.promisify(stream.end.bind(stream)),
99
- supportCodeLibrary,
100
- };
101
- if (value_checker_1.doesNotHaveValue(formatOptions.colorsEnabled)) {
102
- typeOptions.parsedArgvOptions.colorsEnabled = stream.isTTY;
103
- }
104
- if (type === 'progress-bar' && !stream.isTTY) {
105
- const outputToName = outputTo === '' ? 'stdout' : outputTo;
106
- console.warn(`Cannot use 'progress-bar' formatter for output to '${outputToName}' as not a TTY. Switching to 'progress' formatter.`);
107
- type = 'progress';
108
- }
109
- return builder_1.default.build(type, typeOptions);
110
- });
111
- return async function () {
112
- await bluebird_1.default.each(formatters, async (formatter) => {
113
- await formatter.finished();
114
- });
115
- };
116
- }
117
- getSupportCodeLibrary({ newId, supportCodeRequiredModules, supportCodePaths, }) {
118
- supportCodeRequiredModules.map((module) => require(module));
119
- support_code_library_builder_1.default.reset(this.cwd, newId);
120
- supportCodePaths.forEach((codePath) => {
121
- try {
122
- require(codePath);
123
- }
124
- catch (e) {
125
- console.error(e.stack);
126
- console.error('codepath: ' + codePath);
127
- }
128
- });
129
- return support_code_library_builder_1.default.finalize();
130
- }
131
- async run() {
132
- await install_validator_1.validateInstall(this.cwd);
133
- const configuration = await this.getConfiguration();
134
- if (configuration.listI18nLanguages) {
135
- this.stdout.write(I18n.getLanguages());
136
- return { shouldExitImmediately: true, success: true };
137
- }
138
- if (configuration.listI18nKeywordsFor !== '') {
139
- this.stdout.write(I18n.getKeywords(configuration.listI18nKeywordsFor));
140
- return { shouldExitImmediately: true, success: true };
141
- }
142
- const newId = configuration.predictableIds && configuration.parallel <= 1
143
- ? incrementing()
144
- : uuid();
145
- const supportCodeLibrary = this.getSupportCodeLibrary({
146
- newId,
147
- supportCodePaths: configuration.supportCodePaths,
148
- supportCodeRequiredModules: configuration.supportCodeRequiredModules,
149
- });
150
- const eventBroadcaster = new events_1.EventEmitter();
151
- const eventDataCollector = new helpers_1.EventDataCollector(eventBroadcaster);
152
- const cleanup = await this.initializeFormatters({
153
- eventBroadcaster,
154
- eventDataCollector,
155
- formatOptions: configuration.formatOptions,
156
- formats: configuration.formats,
157
- supportCodeLibrary,
158
- });
159
- await helpers_2.emitMetaMessage(eventBroadcaster);
160
- const gherkinMessageStream = gherkin_streams_1.GherkinStreams.fromPaths(configuration.featurePaths, {
161
- defaultDialect: configuration.featureDefaultLanguage,
162
- newId,
163
- relativeTo: this.cwd,
164
- });
165
- let pickleIds = [];
166
- if (configuration.featurePaths.length > 0) {
167
- pickleIds = await helpers_2.parseGherkinMessageStream({
168
- cwd: this.cwd,
169
- eventBroadcaster,
170
- eventDataCollector,
171
- gherkinMessageStream,
172
- order: configuration.order,
173
- pickleFilter: new pickle_filter_1.default(configuration.pickleFilterOptions),
174
- });
175
- }
176
- helpers_2.emitSupportCodeMessages({
177
- eventBroadcaster,
178
- supportCodeLibrary,
179
- newId,
180
- });
181
- let success;
182
- if (configuration.parallel > 1) {
183
- const parallelRuntimeCoordinator = new coordinator_1.default({
184
- cwd: this.cwd,
185
- eventBroadcaster,
186
- eventDataCollector,
187
- options: configuration.runtimeOptions,
188
- newId,
189
- pickleIds,
190
- supportCodeLibrary,
191
- supportCodePaths: configuration.supportCodePaths,
192
- supportCodeRequiredModules: configuration.supportCodeRequiredModules,
193
- });
194
- success = await parallelRuntimeCoordinator.run(configuration.parallel);
195
- }
196
- else {
197
- const runtime = new runtime_1.default({
198
- eventBroadcaster,
199
- eventDataCollector,
200
- options: configuration.runtimeOptions,
201
- newId,
202
- pickleIds,
203
- supportCodeLibrary,
204
- });
205
- success = await runtime.start();
206
- }
207
- await cleanup();
208
30
  return {
209
- shouldExitImmediately: configuration.shouldExitImmediately,
31
+ shouldAdvertisePublish: !configuration.formats.publish &&
32
+ !fromArgv.options.publishQuiet &&
33
+ !(0, configuration_builder_1.isTruthyString)(this.env.CUCUMBER_PUBLISH_QUIET),
34
+ shouldExitImmediately: fromArgv.options.exit,
210
35
  success,
211
36
  };
212
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { EventDataCollector } from '../formatter/helpers'\nimport {\n emitMetaMessage,\n emitSupportCodeMessages,\n getExpandedArgv,\n parseGherkinMessageStream,\n} from './helpers'\nimport { validateInstall } from './install_validator'\nimport * as I18n from './i18n'\nimport ConfigurationBuilder, {\n IConfiguration,\n IConfigurationFormat,\n} from './configuration_builder'\nimport { EventEmitter } from 'events'\nimport FormatterBuilder from '../formatter/builder'\nimport fs from 'mz/fs'\nimport path from 'path'\nimport PickleFilter from '../pickle_filter'\nimport bluebird from 'bluebird'\nimport ParallelRuntimeCoordinator from '../runtime/parallel/coordinator'\nimport Runtime from '../runtime'\nimport supportCodeLibraryBuilder from '../support_code_library_builder'\nimport { IdGenerator } from '@cucumber/messages'\nimport { IFormatterStream } from '../formatter'\nimport { WriteStream as TtyWriteStream } from 'tty'\nimport { doesNotHaveValue } from '../value_checker'\nimport { GherkinStreams } from '@cucumber/gherkin-streams'\nimport { ISupportCodeLibrary } from '../support_code_library_builder/types'\nimport { IParsedArgvFormatOptions } from './argv_parser'\nimport HttpStream from '../formatter/http_stream'\nimport { Writable } from 'stream'\n\nconst { incrementing, uuid } = IdGenerator\n\nexport interface ICliRunResult {\n shouldExitImmediately: boolean\n success: boolean\n}\n\ninterface IInitializeFormattersRequest {\n eventBroadcaster: EventEmitter\n eventDataCollector: EventDataCollector\n formatOptions: IParsedArgvFormatOptions\n formats: IConfigurationFormat[]\n supportCodeLibrary: ISupportCodeLibrary\n}\n\ninterface IGetSupportCodeLibraryRequest {\n newId: IdGenerator.NewId\n supportCodeRequiredModules: string[]\n supportCodePaths: string[]\n}\n\nexport default class Cli {\n private readonly argv: string[]\n private readonly cwd: string\n private readonly stdout: IFormatterStream\n\n constructor({\n argv,\n cwd,\n stdout,\n }: {\n argv: string[]\n cwd: string\n stdout: IFormatterStream\n }) {\n this.argv = argv\n this.cwd = cwd\n this.stdout = stdout\n }\n\n async getConfiguration(): Promise<IConfiguration> {\n const fullArgv = await getExpandedArgv({\n argv: this.argv,\n cwd: this.cwd,\n })\n return await ConfigurationBuilder.build({\n argv: fullArgv,\n cwd: this.cwd,\n })\n }\n\n async initializeFormatters({\n eventBroadcaster,\n eventDataCollector,\n formatOptions,\n formats,\n supportCodeLibrary,\n }: IInitializeFormattersRequest): Promise<() => Promise<void>> {\n const formatters = await bluebird.map(\n formats,\n async ({ type, outputTo }) => {\n let stream: IFormatterStream = this.stdout\n if (outputTo !== '') {\n if (outputTo.match(/^https?:\\/\\//) !== null) {\n const headers: { [key: string]: string } = {}\n if (process.env.CUCUMBER_PUBLISH_TOKEN !== undefined) {\n headers.Authorization = `Bearer ${process.env.CUCUMBER_PUBLISH_TOKEN}`\n }\n\n stream = new HttpStream(outputTo, 'GET', headers)\n const readerStream = new Writable({\n objectMode: true,\n write: function (responseBody: string, encoding, writeCallback) {\n console.error(responseBody)\n writeCallback()\n },\n })\n stream.pipe(readerStream)\n } else {\n const fd = await fs.open(path.resolve(this.cwd, outputTo), 'w')\n stream = fs.createWriteStream(null, { fd })\n }\n }\n\n stream.on('error', (error) => {\n console.error(error.message)\n process.exit(1)\n })\n\n const typeOptions = {\n cwd: this.cwd,\n eventBroadcaster,\n eventDataCollector,\n log: stream.write.bind(stream),\n parsedArgvOptions: formatOptions,\n stream,\n cleanup:\n stream === this.stdout\n ? async () => await Promise.resolve()\n : bluebird.promisify(stream.end.bind(stream)),\n supportCodeLibrary,\n }\n if (doesNotHaveValue(formatOptions.colorsEnabled)) {\n typeOptions.parsedArgvOptions.colorsEnabled = (\n stream as TtyWriteStream\n ).isTTY\n }\n if (type === 'progress-bar' && !(stream as TtyWriteStream).isTTY) {\n const outputToName = outputTo === '' ? 'stdout' : outputTo\n console.warn(\n `Cannot use 'progress-bar' formatter for output to '${outputToName}' as not a TTY. Switching to 'progress' formatter.`\n )\n type = 'progress'\n }\n return FormatterBuilder.build(type, typeOptions)\n }\n )\n return async function () {\n await bluebird.each(formatters, async (formatter) => {\n await formatter.finished()\n })\n }\n }\n\n getSupportCodeLibrary({\n newId,\n supportCodeRequiredModules,\n supportCodePaths,\n }: IGetSupportCodeLibraryRequest): ISupportCodeLibrary {\n supportCodeRequiredModules.map((module) => require(module))\n supportCodeLibraryBuilder.reset(this.cwd, newId)\n supportCodePaths.forEach((codePath) => {\n try {\n require(codePath)\n } catch (e) {\n console.error(e.stack)\n console.error('codepath: ' + codePath)\n }\n })\n return supportCodeLibraryBuilder.finalize()\n }\n\n async run(): Promise<ICliRunResult> {\n await validateInstall(this.cwd)\n const configuration = await this.getConfiguration()\n if (configuration.listI18nLanguages) {\n this.stdout.write(I18n.getLanguages())\n return { shouldExitImmediately: true, success: true }\n }\n if (configuration.listI18nKeywordsFor !== '') {\n this.stdout.write(I18n.getKeywords(configuration.listI18nKeywordsFor))\n return { shouldExitImmediately: true, success: true }\n }\n const newId =\n configuration.predictableIds && configuration.parallel <= 1\n ? incrementing()\n : uuid()\n const supportCodeLibrary = this.getSupportCodeLibrary({\n newId,\n supportCodePaths: configuration.supportCodePaths,\n supportCodeRequiredModules: configuration.supportCodeRequiredModules,\n })\n const eventBroadcaster = new EventEmitter()\n const eventDataCollector = new EventDataCollector(eventBroadcaster)\n const cleanup = await this.initializeFormatters({\n eventBroadcaster,\n eventDataCollector,\n formatOptions: configuration.formatOptions,\n formats: configuration.formats,\n supportCodeLibrary,\n })\n await emitMetaMessage(eventBroadcaster)\n const gherkinMessageStream = GherkinStreams.fromPaths(\n configuration.featurePaths,\n {\n defaultDialect: configuration.featureDefaultLanguage,\n newId,\n relativeTo: this.cwd,\n }\n )\n let pickleIds: string[] = []\n\n if (configuration.featurePaths.length > 0) {\n pickleIds = await parseGherkinMessageStream({\n cwd: this.cwd,\n eventBroadcaster,\n eventDataCollector,\n gherkinMessageStream,\n order: configuration.order,\n pickleFilter: new PickleFilter(configuration.pickleFilterOptions),\n })\n }\n emitSupportCodeMessages({\n eventBroadcaster,\n supportCodeLibrary,\n newId,\n })\n let success\n if (configuration.parallel > 1) {\n const parallelRuntimeCoordinator = new ParallelRuntimeCoordinator({\n cwd: this.cwd,\n eventBroadcaster,\n eventDataCollector,\n options: configuration.runtimeOptions,\n newId,\n pickleIds,\n supportCodeLibrary,\n supportCodePaths: configuration.supportCodePaths,\n supportCodeRequiredModules: configuration.supportCodeRequiredModules,\n })\n success = await parallelRuntimeCoordinator.run(configuration.parallel)\n } else {\n const runtime = new Runtime({\n eventBroadcaster,\n eventDataCollector,\n options: configuration.runtimeOptions,\n newId,\n pickleIds,\n supportCodeLibrary,\n })\n success = await runtime.start()\n }\n await cleanup()\n return {\n shouldExitImmediately: configuration.shouldExitImmediately,\n success,\n }\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;;;AAAA,uCAA2C;AAC3C,2DAAqD;AACrD,mEAA4E;AAE5E,gCAAoC;AACpC,gEAAsC;AAQtC,MAAqB,GAAG;IAMtB,YAAY,EACV,IAAI,EACJ,GAAG,EACH,MAAM,EACN,GAAG,GAMJ;QACC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;IAChB,CAAC;IAED,KAAK,CAAC,GAAG;QACP,MAAM,IAAA,mCAAe,EAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC/B,MAAM,QAAQ,GAAG,qBAAU,CAAC,KAAK,CAC/B,MAAM,IAAA,yBAAe,EAAC;YACpB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAC,CACH,CAAA;QACD,MAAM,aAAa,GAAG,MAAM,IAAA,0CAAkB,EAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;QAClE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAA,iBAAW,EAAC,aAAa,EAAE;YACnD,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAC,CAAA;QACF,OAAO;YACL,sBAAsB,EACpB,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO;gBAC9B,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY;gBAC9B,CAAC,IAAA,sCAAc,EAAC,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC;YAClD,qBAAqB,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI;YAC5C,OAAO;SACR,CAAA;IACH,CAAC;CACF;AA9CD,sBA8CC","sourcesContent":["import { getExpandedArgv } from './helpers'\nimport { validateInstall } from './install_validator'\nimport { buildConfiguration, isTruthyString } from './configuration_builder'\nimport { IFormatterStream } from '../formatter'\nimport { runCucumber } from '../run'\nimport ArgvParser from './argv_parser'\n\nexport interface ICliRunResult {\n shouldAdvertisePublish: boolean\n shouldExitImmediately: boolean\n success: boolean\n}\n\nexport default class Cli {\n private readonly argv: string[]\n private readonly cwd: string\n private readonly stdout: IFormatterStream\n private readonly env: NodeJS.ProcessEnv\n\n constructor({\n argv,\n cwd,\n stdout,\n env,\n }: {\n argv: string[]\n cwd: string\n stdout: IFormatterStream\n env: NodeJS.ProcessEnv\n }) {\n this.argv = argv\n this.cwd = cwd\n this.stdout = stdout\n this.env = env\n }\n\n async run(): Promise<ICliRunResult> {\n await validateInstall(this.cwd)\n const fromArgv = ArgvParser.parse(\n await getExpandedArgv({\n argv: this.argv,\n cwd: this.cwd,\n })\n )\n const configuration = await buildConfiguration(fromArgv, this.env)\n const { success } = await runCucumber(configuration, {\n cwd: this.cwd,\n stdout: this.stdout,\n env: this.env,\n })\n return {\n shouldAdvertisePublish:\n !configuration.formats.publish &&\n !fromArgv.options.publishQuiet &&\n !isTruthyString(this.env.CUCUMBER_PUBLISH_QUIET),\n shouldExitImmediately: fromArgv.options.exit,\n success,\n }\n }\n}\n"]}
@@ -16,7 +16,7 @@ async function validateInstall(cwd) {
16
16
  const currentCucumberPath = require.resolve(projectPath);
17
17
  let localCucumberPath;
18
18
  try {
19
- localCucumberPath = await util_1.promisify(resolve_1.default)('@cucumber/cucumber', {
19
+ localCucumberPath = await (0, util_1.promisify)(resolve_1.default)('@cucumber/cucumber', {
20
20
  basedir: cwd,
21
21
  });
22
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"install_validator.js","sourceRoot":"","sources":["../../src/cli/install_validator.ts"],"names":[],"mappings":";;;;;;AAAA,+CAAsB;AACtB,gDAAuB;AACvB,sDAA6B;AAC7B,+BAAgC;AAEzB,KAAK,UAAU,eAAe,CAAC,GAAW;IAC/C,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;IACpD,IAAI,WAAW,KAAK,GAAG,EAAE;QACvB,OAAM,CAAC,0BAA0B;KAClC;IACD,MAAM,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IACxD,IAAI,iBAAyB,CAAA;IAC7B,IAAI;QACF,iBAAiB,GAAG,MAAM,gBAAS,CAA+B,iBAAO,CAAC,CACxE,oBAAoB,EACpB;YACE,OAAO,EAAE,GAAG;SACb,CACF,CAAA;KACF;IAAC,OAAO,CAAC,EAAE;QACV,MAAM,IAAI,KAAK,CACb,wEAAwE,CACzE,CAAA;KACF;IACD,iBAAiB,GAAG,MAAM,YAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAA;IACxD,IAAI,iBAAiB,KAAK,mBAAmB,EAAE;QAC7C,MAAM,IAAI,KAAK,CACb;;;;;;uBAMiB,mBAAmB;uBACnB,iBAAiB;OACjC,CACF,CAAA;KACF;AACH,CAAC;AAjCD,0CAiCC","sourcesContent":["import fs from 'mz/fs'\nimport path from 'path'\nimport resolve from 'resolve'\nimport { promisify } from 'util'\n\nexport async function validateInstall(cwd: string): Promise<void> {\n const projectPath = path.join(__dirname, '..', '..')\n if (projectPath === cwd) {\n return // cucumber testing itself\n }\n const currentCucumberPath = require.resolve(projectPath)\n let localCucumberPath: string\n try {\n localCucumberPath = await promisify<string, resolve.Opts, string>(resolve)(\n '@cucumber/cucumber',\n {\n basedir: cwd,\n }\n )\n } catch (e) {\n throw new Error(\n '`@cucumber/cucumber` module not resolvable. Must be locally installed.'\n )\n }\n localCucumberPath = await fs.realpath(localCucumberPath)\n if (localCucumberPath !== currentCucumberPath) {\n throw new Error(\n `\n You appear to be executing an install of cucumber (most likely a global install)\n that is different from your local install (the one required in your support files).\n For cucumber to work, you need to execute the same install that is required in your support files.\n Please execute the locally installed version to run your tests.\n\n Executed Path: ${currentCucumberPath}\n Local Path: ${localCucumberPath}\n `\n )\n }\n}\n"]}
1
+ {"version":3,"file":"install_validator.js","sourceRoot":"","sources":["../../src/cli/install_validator.ts"],"names":[],"mappings":";;;;;;AAAA,+CAAsB;AACtB,gDAAuB;AACvB,sDAA6B;AAC7B,+BAAgC;AAEzB,KAAK,UAAU,eAAe,CAAC,GAAW;IAC/C,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;IACpD,IAAI,WAAW,KAAK,GAAG,EAAE;QACvB,OAAM,CAAC,0BAA0B;KAClC;IACD,MAAM,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IACxD,IAAI,iBAAyB,CAAA;IAC7B,IAAI;QACF,iBAAiB,GAAG,MAAM,IAAA,gBAAS,EAA+B,iBAAO,CAAC,CACxE,oBAAoB,EACpB;YACE,OAAO,EAAE,GAAG;SACb,CACF,CAAA;KACF;IAAC,OAAO,CAAC,EAAE;QACV,MAAM,IAAI,KAAK,CACb,wEAAwE,CACzE,CAAA;KACF;IACD,iBAAiB,GAAG,MAAM,YAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAA;IACxD,IAAI,iBAAiB,KAAK,mBAAmB,EAAE;QAC7C,MAAM,IAAI,KAAK,CACb;;;;;;uBAMiB,mBAAmB;uBACnB,iBAAiB;OACjC,CACF,CAAA;KACF;AACH,CAAC;AAjCD,0CAiCC","sourcesContent":["import fs from 'mz/fs'\nimport path from 'path'\nimport resolve from 'resolve'\nimport { promisify } from 'util'\n\nexport async function validateInstall(cwd: string): Promise<void> {\n const projectPath = path.join(__dirname, '..', '..')\n if (projectPath === cwd) {\n return // cucumber testing itself\n }\n const currentCucumberPath = require.resolve(projectPath)\n let localCucumberPath: string\n try {\n localCucumberPath = await promisify<string, resolve.Opts, string>(resolve)(\n '@cucumber/cucumber',\n {\n basedir: cwd,\n }\n )\n } catch (e) {\n throw new Error(\n '`@cucumber/cucumber` module not resolvable. Must be locally installed.'\n )\n }\n localCucumberPath = await fs.realpath(localCucumberPath)\n if (localCucumberPath !== currentCucumberPath) {\n throw new Error(\n `\n You appear to be executing an install of cucumber (most likely a global install)\n that is different from your local install (the one required in your support files).\n For cucumber to work, you need to execute the same install that is required in your support files.\n Please execute the locally installed version to run your tests.\n\n Executed Path: ${currentCucumberPath}\n Local Path: ${localCucumberPath}\n `\n )\n }\n}\n"]}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const OptionSplitter = {
4
4
  split(option) {
5
+ option = option.replace(/"/g, '');
5
6
  const parts = option.split(/([^A-Z]):(?!\\)/);
6
7
  const result = parts.reduce((memo, part, i) => {
7
8
  if (partNeedsRecombined(i)) {
@@ -1 +1 @@
1
- {"version":3,"file":"option_splitter.js","sourceRoot":"","sources":["../../src/cli/option_splitter.ts"],"names":[],"mappings":";;AAAA,MAAM,cAAc,GAAG;IACrB,KAAK,CAAC,MAAc;QAClB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAA;QAE7C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAc,EAAE,IAAY,EAAE,CAAS,EAAE,EAAE;YACtE,IAAI,mBAAmB,CAAC,CAAC,CAAC,EAAE;gBAC1B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;aAC1C;YAED,OAAO,IAAI,CAAA;QACb,CAAC,EAAE,EAAE,CAAC,CAAA;QAEN,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YACvB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;SAChB;QAED,OAAO,MAAM,CAAA;IACf,CAAC;CACF,CAAA;AAED,SAAS,mBAAmB,CAAC,CAAS;IACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;AACpB,CAAC;AAED,kBAAe,cAAc,CAAA","sourcesContent":["const OptionSplitter = {\n split(option: string): string[] {\n const parts = option.split(/([^A-Z]):(?!\\\\)/)\n\n const result = parts.reduce((memo: string[], part: string, i: number) => {\n if (partNeedsRecombined(i)) {\n memo.push(parts.slice(i, i + 2).join(''))\n }\n\n return memo\n }, [])\n\n if (result.length === 1) {\n result.push('')\n }\n\n return result\n },\n}\n\nfunction partNeedsRecombined(i: number): boolean {\n return i % 2 === 0\n}\n\nexport default OptionSplitter\n"]}
1
+ {"version":3,"file":"option_splitter.js","sourceRoot":"","sources":["../../src/cli/option_splitter.ts"],"names":[],"mappings":";;AAAA,MAAM,cAAc,GAAG;IACrB,KAAK,CAAC,MAAc;QAClB,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;QAEjC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAA;QAE7C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAc,EAAE,IAAY,EAAE,CAAS,EAAE,EAAE;YACtE,IAAI,mBAAmB,CAAC,CAAC,CAAC,EAAE;gBAC1B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;aAC1C;YAED,OAAO,IAAI,CAAA;QACb,CAAC,EAAE,EAAE,CAAC,CAAA;QAEN,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YACvB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;SAChB;QAED,OAAO,MAAM,CAAA;IACf,CAAC;CACF,CAAA;AAED,SAAS,mBAAmB,CAAC,CAAS;IACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;AACpB,CAAC;AAED,kBAAe,cAAc,CAAA","sourcesContent":["const OptionSplitter = {\n split(option: string): string[] {\n option = option.replace(/\"/g, '')\n\n const parts = option.split(/([^A-Z]):(?!\\\\)/)\n\n const result = parts.reduce((memo: string[], part: string, i: number) => {\n if (partNeedsRecombined(i)) {\n memo.push(parts.slice(i, i + 2).join(''))\n }\n\n return memo\n }, [])\n\n if (result.length === 1) {\n result.push('')\n }\n\n return result\n },\n}\n\nfunction partNeedsRecombined(i: number): boolean {\n return i % 2 === 0\n}\n\nexport default OptionSplitter\n"]}
@@ -1,6 +1,7 @@
1
1
  export default class ProfileLoader {
2
2
  private readonly directory;
3
3
  constructor(directory: string);
4
- getDefinitions(): Promise<Record<string, string>>;
5
- getArgv(profiles: string[]): Promise<string[]>;
4
+ getDefinitions(configFile?: string): Promise<Record<string, string>>;
5
+ loadFile(configFile: string): Record<string, string>;
6
+ getArgv(profiles: string[], configFile?: string): Promise<string[]>;
6
7
  }