@cucumber/cucumber 8.0.0-rc.2 → 8.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (212) hide show
  1. package/README.md +82 -51
  2. package/api/index.d.ts +6 -0
  3. package/bin/{cucumber-js → cucumber.js} +0 -0
  4. package/lib/api/convert_configuration.d.ts +4 -0
  5. package/lib/api/convert_configuration.js +65 -0
  6. package/lib/api/convert_configuration.js.map +1 -0
  7. package/lib/api/environment.d.ts +2 -0
  8. package/lib/api/environment.js +13 -0
  9. package/lib/api/environment.js.map +1 -0
  10. package/lib/{run → api}/formatters.d.ts +5 -3
  11. package/lib/{run → api}/formatters.js +13 -17
  12. package/lib/api/formatters.js.map +1 -0
  13. package/lib/api/gherkin.d.ts +21 -0
  14. package/lib/api/gherkin.js +65 -0
  15. package/lib/api/gherkin.js.map +1 -0
  16. package/lib/api/index.d.ts +11 -0
  17. package/lib/api/index.js +28 -0
  18. package/lib/api/index.js.map +1 -0
  19. package/lib/api/load_configuration.d.ts +9 -0
  20. package/lib/api/load_configuration.js +32 -0
  21. package/lib/api/load_configuration.js.map +1 -0
  22. package/lib/api/load_sources.d.ts +9 -0
  23. package/lib/api/load_sources.js +53 -0
  24. package/lib/api/load_sources.js.map +1 -0
  25. package/lib/api/load_support.d.ts +10 -0
  26. package/lib/api/load_support.js +28 -0
  27. package/lib/api/load_support.js.map +1 -0
  28. package/lib/api/paths.d.ts +7 -0
  29. package/lib/{run → api}/paths.js +25 -9
  30. package/lib/api/paths.js.map +1 -0
  31. package/lib/api/run_cucumber.d.ts +11 -0
  32. package/lib/api/run_cucumber.js +108 -0
  33. package/lib/api/run_cucumber.js.map +1 -0
  34. package/lib/{run → api}/runtime.d.ts +8 -7
  35. package/lib/api/runtime.js +36 -0
  36. package/lib/api/runtime.js.map +1 -0
  37. package/lib/{run → api}/support.d.ts +4 -3
  38. package/lib/{run → api}/support.js +5 -10
  39. package/lib/api/support.js.map +1 -0
  40. package/lib/api/types.d.ts +168 -0
  41. package/lib/{run → api}/types.js +0 -0
  42. package/lib/api/types.js.map +1 -0
  43. package/lib/api/wrapper.mjs +6 -0
  44. package/lib/cli/helpers.d.ts +16 -11
  45. package/lib/cli/helpers.js +25 -30
  46. package/lib/cli/helpers.js.map +1 -1
  47. package/lib/cli/index.d.ts +3 -1
  48. package/lib/cli/index.js +35 -19
  49. package/lib/cli/index.js.map +1 -1
  50. package/lib/cli/publish_banner.js +6 -6
  51. package/lib/cli/publish_banner.js.map +1 -1
  52. package/lib/cli/run.js +12 -3
  53. package/lib/cli/run.js.map +1 -1
  54. package/lib/cli/validate_node_engine_version.d.ts +10 -0
  55. package/lib/cli/validate_node_engine_version.js +24 -0
  56. package/lib/cli/validate_node_engine_version.js.map +1 -0
  57. package/lib/configuration/argv_parser.d.ts +20 -0
  58. package/lib/{cli → configuration}/argv_parser.js +45 -47
  59. package/lib/configuration/argv_parser.js.map +1 -0
  60. package/lib/configuration/check_schema.d.ts +2 -0
  61. package/lib/configuration/check_schema.js +60 -0
  62. package/lib/configuration/check_schema.js.map +1 -0
  63. package/lib/configuration/default_configuration.d.ts +2 -0
  64. package/lib/configuration/default_configuration.js +27 -0
  65. package/lib/configuration/default_configuration.js.map +1 -0
  66. package/lib/configuration/from_file.d.ts +2 -0
  67. package/lib/configuration/from_file.js +68 -0
  68. package/lib/configuration/from_file.js.map +1 -0
  69. package/lib/configuration/helpers.d.ts +1 -0
  70. package/lib/configuration/helpers.js +11 -0
  71. package/lib/configuration/helpers.js.map +1 -0
  72. package/lib/configuration/index.d.ts +6 -0
  73. package/lib/configuration/index.js +16 -1
  74. package/lib/configuration/index.js.map +1 -1
  75. package/lib/configuration/locate_file.d.ts +1 -0
  76. package/lib/configuration/locate_file.js +19 -0
  77. package/lib/configuration/locate_file.js.map +1 -0
  78. package/lib/configuration/merge_configurations.d.ts +2 -0
  79. package/lib/configuration/merge_configurations.js +48 -0
  80. package/lib/configuration/merge_configurations.js.map +1 -0
  81. package/lib/configuration/option_splitter.d.ts +3 -0
  82. package/lib/{cli → configuration}/option_splitter.js +3 -3
  83. package/lib/configuration/option_splitter.js.map +1 -0
  84. package/lib/configuration/types.d.ts +24 -28
  85. package/lib/configuration/types.js.map +1 -1
  86. package/lib/configuration/validate_configuration.d.ts +2 -0
  87. package/lib/configuration/validate_configuration.js +10 -0
  88. package/lib/configuration/validate_configuration.js.map +1 -0
  89. package/lib/formatter/builder.d.ts +3 -3
  90. package/lib/formatter/builder.js +30 -4
  91. package/lib/formatter/builder.js.map +1 -1
  92. package/lib/formatter/fixtures/typescript.d.ts +2 -0
  93. package/lib/formatter/fixtures/typescript.js +6 -0
  94. package/lib/formatter/fixtures/typescript.js.map +1 -0
  95. package/lib/formatter/get_color_fns.js +15 -16
  96. package/lib/formatter/get_color_fns.js.map +1 -1
  97. package/lib/formatter/helpers/event_data_collector.js +5 -1
  98. package/lib/formatter/helpers/event_data_collector.js.map +1 -1
  99. package/lib/formatter/helpers/index.js +5 -1
  100. package/lib/formatter/helpers/index.js.map +1 -1
  101. package/lib/formatter/helpers/issue_helpers.d.ts +2 -2
  102. package/lib/formatter/helpers/issue_helpers.js +2 -2
  103. package/lib/formatter/helpers/issue_helpers.js.map +1 -1
  104. package/lib/formatter/helpers/summary_helpers.js +5 -1
  105. package/lib/formatter/helpers/summary_helpers.js.map +1 -1
  106. package/lib/formatter/helpers/test_case_attempt_formatter.d.ts +2 -2
  107. package/lib/formatter/helpers/test_case_attempt_formatter.js +18 -10
  108. package/lib/formatter/helpers/test_case_attempt_formatter.js.map +1 -1
  109. package/lib/formatter/helpers/test_case_attempt_parser.d.ts +2 -2
  110. package/lib/formatter/helpers/test_case_attempt_parser.js +7 -2
  111. package/lib/formatter/helpers/test_case_attempt_parser.js.map +1 -1
  112. package/lib/formatter/helpers/usage_helpers/index.d.ts +1 -2
  113. package/lib/formatter/helpers/usage_helpers/index.js +8 -4
  114. package/lib/formatter/helpers/usage_helpers/index.js.map +1 -1
  115. package/lib/formatter/index.d.ts +14 -2
  116. package/lib/formatter/index.js +2 -0
  117. package/lib/formatter/index.js.map +1 -1
  118. package/lib/formatter/json_formatter.js +5 -1
  119. package/lib/formatter/json_formatter.js.map +1 -1
  120. package/lib/formatter/progress_bar_formatter.js +1 -1
  121. package/lib/formatter/progress_bar_formatter.js.map +1 -1
  122. package/lib/formatter/progress_formatter.js +5 -1
  123. package/lib/formatter/progress_formatter.js.map +1 -1
  124. package/lib/formatter/rerun_formatter.js +5 -1
  125. package/lib/formatter/rerun_formatter.js.map +1 -1
  126. package/lib/formatter/snippets_formatter.js +5 -2
  127. package/lib/formatter/snippets_formatter.js.map +1 -1
  128. package/lib/formatter/step_definition_snippet_builder/javascript_snippet_syntax.d.ts +1 -0
  129. package/lib/formatter/step_definition_snippet_builder/javascript_snippet_syntax.js +9 -1
  130. package/lib/formatter/step_definition_snippet_builder/javascript_snippet_syntax.js.map +1 -1
  131. package/lib/formatter/summary_formatter.js +1 -1
  132. package/lib/formatter/summary_formatter.js.map +1 -1
  133. package/lib/formatter/usage_formatter.js +5 -2
  134. package/lib/formatter/usage_formatter.js.map +1 -1
  135. package/lib/formatter/usage_json_formatter.js +0 -1
  136. package/lib/formatter/usage_json_formatter.js.map +1 -1
  137. package/lib/index.d.ts +12 -8
  138. package/lib/index.js +11 -2
  139. package/lib/index.js.map +1 -1
  140. package/lib/models/definition.d.ts +1 -0
  141. package/lib/models/definition.js.map +1 -1
  142. package/lib/models/pickle_order.d.ts +1 -0
  143. package/lib/models/pickle_order.js +3 -0
  144. package/lib/models/pickle_order.js.map +1 -0
  145. package/lib/models/test_case_hook_definition.d.ts +1 -0
  146. package/lib/models/test_case_hook_definition.js +1 -0
  147. package/lib/models/test_case_hook_definition.js.map +1 -1
  148. package/lib/runtime/attachment_manager/index.js +5 -1
  149. package/lib/runtime/attachment_manager/index.js.map +1 -1
  150. package/lib/runtime/helpers.js +5 -1
  151. package/lib/runtime/helpers.js.map +1 -1
  152. package/lib/runtime/index.d.ts +3 -5
  153. package/lib/runtime/index.js +7 -36
  154. package/lib/runtime/index.js.map +1 -1
  155. package/lib/runtime/parallel/command_types.d.ts +3 -2
  156. package/lib/runtime/parallel/command_types.js.map +1 -1
  157. package/lib/runtime/parallel/coordinator.d.ts +27 -8
  158. package/lib/runtime/parallel/coordinator.js +71 -20
  159. package/lib/runtime/parallel/coordinator.js.map +1 -1
  160. package/lib/runtime/parallel/worker.d.ts +2 -4
  161. package/lib/runtime/parallel/worker.js +11 -34
  162. package/lib/runtime/parallel/worker.js.map +1 -1
  163. package/lib/runtime/run_test_run_hooks.d.ts +3 -0
  164. package/lib/runtime/run_test_run_hooks.js +28 -0
  165. package/lib/runtime/run_test_run_hooks.js.map +1 -0
  166. package/lib/runtime/step_runner.js +5 -1
  167. package/lib/runtime/step_runner.js.map +1 -1
  168. package/lib/runtime/stopwatch.js +5 -1
  169. package/lib/runtime/stopwatch.js.map +1 -1
  170. package/lib/runtime/test_case_runner.js +5 -1
  171. package/lib/runtime/test_case_runner.js.map +1 -1
  172. package/lib/support_code_library_builder/index.d.ts +4 -2
  173. package/lib/support_code_library_builder/index.js +25 -2
  174. package/lib/support_code_library_builder/index.js.map +1 -1
  175. package/lib/support_code_library_builder/parallel_can_assign_helpers.d.ts +2 -0
  176. package/lib/support_code_library_builder/parallel_can_assign_helpers.js +16 -0
  177. package/lib/support_code_library_builder/parallel_can_assign_helpers.js.map +1 -0
  178. package/lib/support_code_library_builder/types.d.ts +10 -0
  179. package/lib/support_code_library_builder/types.js.map +1 -1
  180. package/lib/support_code_library_builder/world.d.ts +7 -7
  181. package/lib/support_code_library_builder/world.js.map +1 -1
  182. package/lib/time.js +5 -1
  183. package/lib/time.js.map +1 -1
  184. package/lib/version.d.ts +1 -1
  185. package/lib/version.js +1 -1
  186. package/lib/version.js.map +1 -1
  187. package/lib/wrapper.mjs +5 -1
  188. package/package.json +61 -38
  189. package/lib/cli/argv_parser.d.ts +0 -51
  190. package/lib/cli/argv_parser.js.map +0 -1
  191. package/lib/cli/configuration_builder.d.ts +0 -5
  192. package/lib/cli/configuration_builder.js +0 -71
  193. package/lib/cli/configuration_builder.js.map +0 -1
  194. package/lib/cli/option_splitter.d.ts +0 -4
  195. package/lib/cli/option_splitter.js.map +0 -1
  196. package/lib/cli/profile_loader.d.ts +0 -7
  197. package/lib/cli/profile_loader.js +0 -49
  198. package/lib/cli/profile_loader.js.map +0 -1
  199. package/lib/run/formatters.js.map +0 -1
  200. package/lib/run/index.d.ts +0 -2
  201. package/lib/run/index.js +0 -15
  202. package/lib/run/index.js.map +0 -1
  203. package/lib/run/paths.d.ts +0 -6
  204. package/lib/run/paths.js.map +0 -1
  205. package/lib/run/runCucumber.d.ts +0 -3
  206. package/lib/run/runCucumber.js +0 -88
  207. package/lib/run/runCucumber.js.map +0 -1
  208. package/lib/run/runtime.js +0 -58
  209. package/lib/run/runtime.js.map +0 -1
  210. package/lib/run/support.js.map +0 -1
  211. package/lib/run/types.d.ts +0 -12
  212. package/lib/run/types.js.map +0 -1
@@ -5,23 +5,28 @@ import { EventDataCollector } from '../formatter/helpers';
5
5
  import { Readable } from 'stream';
6
6
  import { IdGenerator } from '@cucumber/messages';
7
7
  import { ISupportCodeLibrary } from '../support_code_library_builder/types';
8
- export interface IGetExpandedArgvRequest {
9
- argv: string[];
10
- cwd: string;
11
- }
12
- export declare function getExpandedArgv({ argv, cwd, }: IGetExpandedArgvRequest): Promise<string[]>;
8
+ import { PickleOrder } from '../models/pickle_order';
13
9
  interface IParseGherkinMessageStreamRequest {
14
- cwd: string;
10
+ cwd?: string;
15
11
  eventBroadcaster: EventEmitter;
16
12
  eventDataCollector: EventDataCollector;
17
13
  gherkinMessageStream: Readable;
18
- order: PickleOrder;
14
+ order: string;
19
15
  pickleFilter: PickleFilter;
20
16
  }
21
- export declare type PickleOrder = 'defined' | 'random';
22
- export declare function parseGherkinMessageStream({ cwd, eventBroadcaster, eventDataCollector, gherkinMessageStream, order, pickleFilter, }: IParseGherkinMessageStreamRequest): Promise<string[]>;
23
- export declare function orderPickleIds(pickleIds: string[], order: PickleOrder): void;
24
- export declare function isJavaScript(filePath: string): boolean;
17
+ /**
18
+ * Process a stream of envelopes from Gherkin and resolve to an array of filtered, ordered pickle Ids
19
+ *
20
+ * @deprecated use `loadSources` instead
21
+ *
22
+ * @param eventBroadcaster
23
+ * @param eventDataCollector
24
+ * @param gherkinMessageStream
25
+ * @param order
26
+ * @param pickleFilter
27
+ */
28
+ export declare function parseGherkinMessageStream({ eventBroadcaster, eventDataCollector, gherkinMessageStream, order, pickleFilter, }: IParseGherkinMessageStreamRequest): Promise<string[]>;
29
+ export declare function orderPickles<T = string>(pickleIds: T[], order: PickleOrder, logger: Console): void;
25
30
  export declare function emitMetaMessage(eventBroadcaster: EventEmitter, env: NodeJS.ProcessEnv): Promise<void>;
26
31
  export declare function emitSupportCodeMessages({ eventBroadcaster, supportCodeLibrary, newId, }: {
27
32
  eventBroadcaster: EventEmitter;
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -22,28 +26,27 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
22
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
23
27
  };
24
28
  Object.defineProperty(exports, "__esModule", { value: true });
25
- exports.emitSupportCodeMessages = exports.emitMetaMessage = exports.isJavaScript = exports.orderPickleIds = exports.parseGherkinMessageStream = exports.getExpandedArgv = void 0;
26
- const argv_parser_1 = __importDefault(require("./argv_parser"));
27
- const profile_loader_1 = __importDefault(require("./profile_loader"));
29
+ exports.emitSupportCodeMessages = exports.emitMetaMessage = exports.orderPickles = exports.parseGherkinMessageStream = void 0;
28
30
  const knuth_shuffle_seeded_1 = __importDefault(require("knuth-shuffle-seeded"));
29
31
  const value_checker_1 = require("../value_checker");
30
- const option_splitter_1 = __importDefault(require("./option_splitter"));
32
+ const configuration_1 = require("../configuration");
31
33
  const os_1 = __importDefault(require("os"));
32
34
  const messages = __importStar(require("@cucumber/messages"));
33
35
  const ci_environment_1 = __importDefault(require("@cucumber/ci-environment"));
34
36
  const support_code_library_builder_1 = require("../support_code_library_builder");
35
37
  const version_1 = require("../version");
36
- async function getExpandedArgv({ argv, cwd, }) {
37
- const { options } = argv_parser_1.default.parse(argv);
38
- let fullArgv = argv;
39
- const profileArgv = await new profile_loader_1.default(cwd).getArgv(options.profile, options.config);
40
- if (profileArgv.length > 0) {
41
- fullArgv = argv.slice(0, 2).concat(profileArgv).concat(argv.slice(2));
42
- }
43
- return fullArgv;
44
- }
45
- exports.getExpandedArgv = getExpandedArgv;
46
- async function parseGherkinMessageStream({ cwd, eventBroadcaster, eventDataCollector, gherkinMessageStream, order, pickleFilter, }) {
38
+ /**
39
+ * Process a stream of envelopes from Gherkin and resolve to an array of filtered, ordered pickle Ids
40
+ *
41
+ * @deprecated use `loadSources` instead
42
+ *
43
+ * @param eventBroadcaster
44
+ * @param eventDataCollector
45
+ * @param gherkinMessageStream
46
+ * @param order
47
+ * @param pickleFilter
48
+ */
49
+ async function parseGherkinMessageStream({ eventBroadcaster, eventDataCollector, gherkinMessageStream, order, pickleFilter, }) {
47
50
  return await new Promise((resolve, reject) => {
48
51
  const result = [];
49
52
  gherkinMessageStream.on('data', (envelope) => {
@@ -56,12 +59,9 @@ async function parseGherkinMessageStream({ cwd, eventBroadcaster, eventDataColle
56
59
  result.push(pickleId);
57
60
  }
58
61
  }
59
- if ((0, value_checker_1.doesHaveValue)(envelope.parseError)) {
60
- reject(new Error(`Parse error in '${envelope.parseError.source.uri}': ${envelope.parseError.message}`));
61
- }
62
62
  });
63
63
  gherkinMessageStream.on('end', () => {
64
- orderPickleIds(result, order);
64
+ orderPickles(result, order, console);
65
65
  resolve(result);
66
66
  });
67
67
  gherkinMessageStream.on('error', reject);
@@ -69,15 +69,15 @@ async function parseGherkinMessageStream({ cwd, eventBroadcaster, eventDataColle
69
69
  }
70
70
  exports.parseGherkinMessageStream = parseGherkinMessageStream;
71
71
  // Orders the pickleIds in place - morphs input
72
- function orderPickleIds(pickleIds, order) {
73
- const [type, seed] = option_splitter_1.default.split(order);
72
+ function orderPickles(pickleIds, order, logger) {
73
+ const [type, seed] = configuration_1.OptionSplitter.split(order);
74
74
  switch (type) {
75
75
  case 'defined':
76
76
  break;
77
77
  case 'random':
78
78
  if (seed === '') {
79
79
  const newSeed = Math.floor(Math.random() * 1000 * 1000).toString();
80
- console.warn(`Random order using seed: ${newSeed}`);
80
+ logger.warn(`Random order using seed: ${newSeed}`);
81
81
  (0, knuth_shuffle_seeded_1.default)(pickleIds, newSeed);
82
82
  }
83
83
  else {
@@ -88,13 +88,7 @@ function orderPickleIds(pickleIds, order) {
88
88
  throw new Error('Unrecgonized order type. Should be `defined` or `random`');
89
89
  }
90
90
  }
91
- exports.orderPickleIds = orderPickleIds;
92
- function isJavaScript(filePath) {
93
- return (filePath.endsWith('.js') ||
94
- filePath.endsWith('.mjs') ||
95
- filePath.endsWith('.cjs'));
96
- }
97
- exports.isJavaScript = isJavaScript;
91
+ exports.orderPickles = orderPickles;
98
92
  async function emitMetaMessage(eventBroadcaster, env) {
99
93
  const meta = {
100
94
  protocolVersion: messages.version,
@@ -176,6 +170,7 @@ function emitTestCaseHooks(supportCodeLibrary, eventBroadcaster) {
176
170
  const envelope = {
177
171
  hook: {
178
172
  id: testCaseHookDefinition.id,
173
+ name: testCaseHookDefinition.name,
179
174
  tagExpression: testCaseHookDefinition.tagExpression,
180
175
  sourceReference: {
181
176
  uri: testCaseHookDefinition.uri,
@@ -1 +1 @@
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"]}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/cli/helpers.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gFAA0C;AAI1C,oDAAgD;AAChD,oDAAiD;AAEjD,4CAAmB;AACnB,6DAA8C;AAE9C,8EAA0D;AAK1D,kFAAuE;AACvE,wCAAoC;AAWpC;;;;;;;;;;GAUG;AACI,KAAK,UAAU,yBAAyB,CAAC,EAC9C,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,KAAK,EACL,YAAY,GACsB;IAClC,OAAO,MAAM,IAAI,OAAO,CAAW,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrD,MAAM,MAAM,GAAa,EAAE,CAAA;QAC3B,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,QAA2B,EAAE,EAAE;YAC9D,gBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;YAC3C,IAAI,IAAA,6BAAa,EAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;gBAClC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAA;gBAC9B,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAA;gBAC1B,MAAM,eAAe,GAAG,kBAAkB,CAAC,kBAAkB,CAC3D,MAAM,CAAC,GAAG,CACX,CAAA;gBACD,IAAI,YAAY,CAAC,OAAO,CAAC,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,EAAE;oBACrD,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;iBACtB;aACF;QACH,CAAC,CAAC,CAAA;QACF,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YAClC,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;YACpC,OAAO,CAAC,MAAM,CAAC,CAAA;QACjB,CAAC,CAAC,CAAA;QACF,oBAAoB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAC1C,CAAC,CAAC,CAAA;AACJ,CAAC;AA5BD,8DA4BC;AAED,+CAA+C;AAC/C,SAAgB,YAAY,CAC1B,SAAc,EACd,KAAkB,EAClB,MAAe;IAEf,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,8BAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAChD,QAAQ,IAAI,EAAE;QACZ,KAAK,SAAS;YACZ,MAAK;QACP,KAAK,QAAQ;YACX,IAAI,IAAI,KAAK,EAAE,EAAE;gBACf,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAA;gBAClE,MAAM,CAAC,IAAI,CAAC,4BAA4B,OAAO,EAAE,CAAC,CAAA;gBAClD,IAAA,8BAAO,EAAC,SAAS,EAAE,OAAO,CAAC,CAAA;aAC5B;iBAAM;gBACL,IAAA,8BAAO,EAAC,SAAS,EAAE,IAAI,CAAC,CAAA;aACzB;YACD,MAAK;QACP;YACE,MAAM,IAAI,KAAK,CACb,0DAA0D,CAC3D,CAAA;KACJ;AACH,CAAC;AAvBD,oCAuBC;AAEM,KAAK,UAAU,eAAe,CACnC,gBAA8B,EAC9B,GAAsB;IAEtB,MAAM,IAAI,GAAkB;QAC1B,eAAe,EAAE,QAAQ,CAAC,OAAO;QACjC,cAAc,EAAE;YACd,OAAO,EAAP,iBAAO;YACP,IAAI,EAAE,aAAa;SACpB;QACD,GAAG,EAAE;YACH,IAAI,EAAE,YAAE,CAAC,IAAI,EAAE;SAChB;QACD,EAAE,EAAE;YACF,IAAI,EAAE,YAAE,CAAC,QAAQ,EAAE;YACnB,OAAO,EAAE,YAAE,CAAC,OAAO,EAAE;SACtB;QACD,OAAO,EAAE;YACP,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI;SAC/B;QACD,EAAE,EAAE,IAAA,wBAAmB,EAAC,GAAG,CAAC;KAC7B,CAAA;IACD,gBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE;QAChC,IAAI;KACL,CAAC,CAAA;AACJ,CAAC;AA1BD,0CA0BC;AAED,SAAS,kBAAkB,CACzB,kBAAuC,EACvC,gBAA8B,EAC9B,KAAwB;IAExB,KAAK,MAAM,aAAa,IAAI,kBAAkB,CAAC,qBAAqB;SACjE,cAAc,EAAE;QACjB,IAAI,oDAAqB,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;YACtD,SAAQ;SACT;QACD,MAAM,QAAQ,GAAsB;YAClC,aAAa,EAAE;gBACb,EAAE,EAAE,KAAK,EAAE;gBACX,IAAI,EAAE,aAAa,CAAC,IAAI;gBACxB,+BAA+B,EAAE,aAAa,CAAC,oBAAoB;gBACnE,kBAAkB,EAAE,aAAa,CAAC,aAAa;gBAC/C,cAAc,EAAE,aAAa,CAAC,cAAc;aAC7C;SACF,CAAA;QACD,gBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;KAC5C;AACH,CAAC;AAED,SAAS,2BAA2B,CAClC,kBAAuC,EACvC,gBAA8B;IAE9B,KAAK,MAAM,sBAAsB,IAAI,kBAAkB,CAAC,uBAAuB,EAAE;QAC/E,MAAM,QAAQ,GAAsB;YAClC,sBAAsB;SACvB,CAAA;QACD,gBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;KAC5C;AACH,CAAC;AAED,SAAS,mBAAmB,CAC1B,kBAAuC,EACvC,gBAA8B;IAE9B,kBAAkB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,EAAE;QAC5D,MAAM,QAAQ,GAAsB;YAClC,cAAc,EAAE;gBACd,EAAE,EAAE,cAAc,CAAC,EAAE;gBACrB,OAAO,EAAE;oBACP,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC,QAAQ,EAAE;oBACzC,IAAI,EACF,OAAO,cAAc,CAAC,OAAO,KAAK,QAAQ;wBACxC,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC,mBAAmB;wBACxD,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC,kBAAkB;iBAC5D;gBACD,eAAe,EAAE;oBACf,GAAG,EAAE,cAAc,CAAC,GAAG;oBACvB,QAAQ,EAAE;wBACR,IAAI,EAAE,cAAc,CAAC,IAAI;qBAC1B;iBACF;aACF;SACF,CAAA;QACD,gBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;IAC7C,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,iBAAiB,CACxB,kBAAuC,EACvC,gBAA8B;IAE9B,CAAC;IAAA,EAAE;SACA,MAAM,CACL,kBAAkB,CAAC,6BAA6B,EAChD,kBAAkB,CAAC,4BAA4B,CAChD;SACA,OAAO,CAAC,CAAC,sBAA8C,EAAE,EAAE;QAC1D,MAAM,QAAQ,GAAsB;YAClC,IAAI,EAAE;gBACJ,EAAE,EAAE,sBAAsB,CAAC,EAAE;gBAC7B,IAAI,EAAE,sBAAsB,CAAC,IAAI;gBACjC,aAAa,EAAE,sBAAsB,CAAC,aAAa;gBACnD,eAAe,EAAE;oBACf,GAAG,EAAE,sBAAsB,CAAC,GAAG;oBAC/B,QAAQ,EAAE;wBACR,IAAI,EAAE,sBAAsB,CAAC,IAAI;qBAClC;iBACF;aACF;SACF,CAAA;QACD,gBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;IAC7C,CAAC,CAAC,CAAA;AACN,CAAC;AAED,SAAS,gBAAgB,CACvB,kBAAuC,EACvC,gBAA8B;IAE9B,CAAC;IAAA,EAAE;SACA,MAAM,CACL,kBAAkB,CAAC,4BAA4B,EAC/C,kBAAkB,CAAC,2BAA2B,CAC/C;SACA,OAAO,CAAC,CAAC,qBAA4C,EAAE,EAAE;QACxD,MAAM,QAAQ,GAAsB;YAClC,IAAI,EAAE;gBACJ,EAAE,EAAE,qBAAqB,CAAC,EAAE;gBAC5B,eAAe,EAAE;oBACf,GAAG,EAAE,qBAAqB,CAAC,GAAG;oBAC9B,QAAQ,EAAE;wBACR,IAAI,EAAE,qBAAqB,CAAC,IAAI;qBACjC;iBACF;aACF;SACF,CAAA;QACD,gBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;IAC7C,CAAC,CAAC,CAAA;AACN,CAAC;AAED,SAAgB,uBAAuB,CAAC,EACtC,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,GAKN;IACC,kBAAkB,CAAC,kBAAkB,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAA;IAC/D,2BAA2B,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAA;IACjE,mBAAmB,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAA;IACzD,iBAAiB,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAA;IACvD,gBAAgB,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAA;AACxD,CAAC;AAdD,0DAcC","sourcesContent":["import 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 '../configuration'\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 { PickleOrder } from '../models/pickle_order'\nimport { builtinParameterTypes } from '../support_code_library_builder'\nimport { version } from '../version'\n\ninterface IParseGherkinMessageStreamRequest {\n cwd?: string\n eventBroadcaster: EventEmitter\n eventDataCollector: EventDataCollector\n gherkinMessageStream: Readable\n order: string\n pickleFilter: PickleFilter\n}\n\n/**\n * Process a stream of envelopes from Gherkin and resolve to an array of filtered, ordered pickle Ids\n *\n * @deprecated use `loadSources` instead\n *\n * @param eventBroadcaster\n * @param eventDataCollector\n * @param gherkinMessageStream\n * @param order\n * @param pickleFilter\n */\nexport async function parseGherkinMessageStream({\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 })\n gherkinMessageStream.on('end', () => {\n orderPickles(result, order, console)\n resolve(result)\n })\n gherkinMessageStream.on('error', reject)\n })\n}\n\n// Orders the pickleIds in place - morphs input\nexport function orderPickles<T = string>(\n pickleIds: T[],\n order: PickleOrder,\n logger: Console\n): 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 logger.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 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 name: testCaseHookDefinition.name,\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"]}
@@ -9,11 +9,13 @@ export default class Cli {
9
9
  private readonly argv;
10
10
  private readonly cwd;
11
11
  private readonly stdout;
12
+ private readonly stderr;
12
13
  private readonly env;
13
- constructor({ argv, cwd, stdout, env, }: {
14
+ constructor({ argv, cwd, stdout, stderr, env, }: {
14
15
  argv: string[];
15
16
  cwd: string;
16
17
  stdout: IFormatterStream;
18
+ stderr: IFormatterStream;
17
19
  env: NodeJS.ProcessEnv;
18
20
  });
19
21
  run(): Promise<ICliRunResult>;
package/lib/cli/index.js CHANGED
@@ -1,37 +1,53 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
- const helpers_1 = require("./helpers");
3
+ const configuration_1 = require("../configuration");
4
+ const api_1 = require("../api");
5
+ const i18n_1 = require("./i18n");
7
6
  const install_validator_1 = require("./install_validator");
8
- const configuration_builder_1 = require("./configuration_builder");
9
- const run_1 = require("../run");
10
- const argv_parser_1 = __importDefault(require("./argv_parser"));
11
7
  class Cli {
12
- constructor({ argv, cwd, stdout, env, }) {
8
+ constructor({ argv, cwd, stdout, stderr, env, }) {
13
9
  this.argv = argv;
14
10
  this.cwd = cwd;
15
11
  this.stdout = stdout;
12
+ this.stderr = stderr;
16
13
  this.env = env;
17
14
  }
18
15
  async run() {
19
16
  await (0, install_validator_1.validateInstall)(this.cwd);
20
- const fromArgv = argv_parser_1.default.parse(await (0, helpers_1.getExpandedArgv)({
21
- argv: this.argv,
22
- cwd: this.cwd,
23
- }));
24
- const configuration = await (0, configuration_builder_1.buildConfiguration)(fromArgv, this.env);
25
- const { success } = await (0, run_1.runCucumber)(configuration, {
17
+ const { options, configuration: argvConfiguration } = configuration_1.ArgvParser.parse(this.argv);
18
+ if (options.i18nLanguages) {
19
+ this.stdout.write((0, i18n_1.getLanguages)());
20
+ return {
21
+ shouldAdvertisePublish: false,
22
+ shouldExitImmediately: true,
23
+ success: true,
24
+ };
25
+ }
26
+ if (options.i18nKeywords) {
27
+ this.stdout.write((0, i18n_1.getKeywords)(options.i18nKeywords));
28
+ return {
29
+ shouldAdvertisePublish: false,
30
+ shouldExitImmediately: true,
31
+ success: true,
32
+ };
33
+ }
34
+ const environment = {
26
35
  cwd: this.cwd,
27
36
  stdout: this.stdout,
37
+ stderr: this.stderr,
28
38
  env: this.env,
29
- });
39
+ };
40
+ const { useConfiguration: configuration, runConfiguration } = await (0, api_1.loadConfiguration)({
41
+ file: options.config,
42
+ profiles: options.profile,
43
+ provided: argvConfiguration,
44
+ }, environment);
45
+ const { success } = await (0, api_1.runCucumber)(runConfiguration, environment);
30
46
  return {
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,
47
+ shouldAdvertisePublish: !runConfiguration.formats.publish &&
48
+ !configuration.publishQuiet &&
49
+ !(0, configuration_1.isTruthyString)(this.env.CUCUMBER_PUBLISH_QUIET),
50
+ shouldExitImmediately: configuration.forceExit,
35
51
  success,
36
52
  };
37
53
  }
@@ -1 +1 @@
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"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;AAAA,oDAA6D;AAE7D,gCAAuD;AACvD,iCAAkD;AAClD,2DAAqD;AAQrD,MAAqB,GAAG;IAOtB,YAAY,EACV,IAAI,EACJ,GAAG,EACH,MAAM,EACN,MAAM,EACN,GAAG,GAOJ;QACC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,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,EAAE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,GAAG,0BAAU,CAAC,KAAK,CACpE,IAAI,CAAC,IAAI,CACV,CAAA;QACD,IAAI,OAAO,CAAC,aAAa,EAAE;YACzB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAA,mBAAY,GAAE,CAAC,CAAA;YACjC,OAAO;gBACL,sBAAsB,EAAE,KAAK;gBAC7B,qBAAqB,EAAE,IAAI;gBAC3B,OAAO,EAAE,IAAI;aACd,CAAA;SACF;QACD,IAAI,OAAO,CAAC,YAAY,EAAE;YACxB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAA,kBAAW,EAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAA;YACpD,OAAO;gBACL,sBAAsB,EAAE,KAAK;gBAC7B,qBAAqB,EAAE,IAAI;gBAC3B,OAAO,EAAE,IAAI;aACd,CAAA;SACF;QACD,MAAM,WAAW,GAAG;YAClB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAA;QACD,MAAM,EAAE,gBAAgB,EAAE,aAAa,EAAE,gBAAgB,EAAE,GACzD,MAAM,IAAA,uBAAiB,EACrB;YACE,IAAI,EAAE,OAAO,CAAC,MAAM;YACpB,QAAQ,EAAE,OAAO,CAAC,OAAO;YACzB,QAAQ,EAAE,iBAAiB;SAC5B,EACD,WAAW,CACZ,CAAA;QACH,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAA,iBAAW,EAAC,gBAAgB,EAAE,WAAW,CAAC,CAAA;QACpE,OAAO;YACL,sBAAsB,EACpB,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO;gBACjC,CAAC,aAAa,CAAC,YAAY;gBAC3B,CAAC,IAAA,8BAAc,EAAC,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC;YAClD,qBAAqB,EAAE,aAAa,CAAC,SAAS;YAC9C,OAAO;SACR,CAAA;IACH,CAAC;CACF;AAzED,sBAyEC","sourcesContent":["import { ArgvParser, isTruthyString } from '../configuration'\nimport { IFormatterStream } from '../formatter'\nimport { loadConfiguration, runCucumber } from '../api'\nimport { getKeywords, getLanguages } from './i18n'\nimport { validateInstall } from './install_validator'\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 stderr: IFormatterStream\n private readonly env: NodeJS.ProcessEnv\n\n constructor({\n argv,\n cwd,\n stdout,\n stderr,\n env,\n }: {\n argv: string[]\n cwd: string\n stdout: IFormatterStream\n stderr: IFormatterStream\n env: NodeJS.ProcessEnv\n }) {\n this.argv = argv\n this.cwd = cwd\n this.stdout = stdout\n this.stderr = stderr\n this.env = env\n }\n\n async run(): Promise<ICliRunResult> {\n await validateInstall(this.cwd)\n const { options, configuration: argvConfiguration } = ArgvParser.parse(\n this.argv\n )\n if (options.i18nLanguages) {\n this.stdout.write(getLanguages())\n return {\n shouldAdvertisePublish: false,\n shouldExitImmediately: true,\n success: true,\n }\n }\n if (options.i18nKeywords) {\n this.stdout.write(getKeywords(options.i18nKeywords))\n return {\n shouldAdvertisePublish: false,\n shouldExitImmediately: true,\n success: true,\n }\n }\n const environment = {\n cwd: this.cwd,\n stdout: this.stdout,\n stderr: this.stderr,\n env: this.env,\n }\n const { useConfiguration: configuration, runConfiguration } =\n await loadConfiguration(\n {\n file: options.config,\n profiles: options.profile,\n provided: argvConfiguration,\n },\n environment\n )\n const { success } = await runCucumber(runConfiguration, environment)\n return {\n shouldAdvertisePublish:\n !runConfiguration.formats.publish &&\n !configuration.publishQuiet &&\n !isTruthyString(this.env.CUCUMBER_PUBLISH_QUIET),\n shouldExitImmediately: configuration.forceExit,\n success,\n }\n }\n}\n"]}
@@ -3,22 +3,22 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- const safe_1 = __importDefault(require("colors/safe"));
6
+ const chalk_1 = __importDefault(require("chalk"));
7
7
  const cli_table3_1 = __importDefault(require("cli-table3"));
8
- const underlineBoldCyan = (x) => safe_1.default.underline(safe_1.default.bold(safe_1.default.cyan(x)));
8
+ const underlineBoldCyan = (x) => chalk_1.default.underline(chalk_1.default.bold(chalk_1.default.cyan(x)));
9
9
  const formattedReportUrl = underlineBoldCyan('https://reports.cucumber.io');
10
- const formattedEnv = safe_1.default.cyan('CUCUMBER_PUBLISH_ENABLED') + '=' + safe_1.default.cyan('true');
10
+ const formattedEnv = chalk_1.default.cyan('CUCUMBER_PUBLISH_ENABLED') + '=' + chalk_1.default.cyan('true');
11
11
  const formattedMoreInfoUrl = underlineBoldCyan('https://cucumber.io/docs/cucumber/environment-variables/');
12
12
  const text = `\
13
13
  Share your Cucumber Report with your team at ${formattedReportUrl}
14
14
 
15
- Command line option: ${safe_1.default.cyan('--publish')}
15
+ Command line option: ${chalk_1.default.cyan('--publish')}
16
16
  Environment variable: ${formattedEnv}
17
17
 
18
18
  More information at ${formattedMoreInfoUrl}
19
19
 
20
- To disable this message, add this to your ${safe_1.default.bold('./cucumber.js')}:
21
- ${safe_1.default.bold("module.exports = { default: '--publish-quiet' }")}`;
20
+ To disable this message, add this to your ${chalk_1.default.bold('./cucumber.js')}:
21
+ ${chalk_1.default.bold("module.exports = { default: '--publish-quiet' }")}`;
22
22
  const table = new cli_table3_1.default({
23
23
  style: {
24
24
  head: [],
@@ -1 +1 @@
1
- {"version":3,"file":"publish_banner.js","sourceRoot":"","sources":["../../src/cli/publish_banner.ts"],"names":[],"mappings":";;;;;AAAA,uDAAgC;AAChC,4DAA8B;AAE9B,MAAM,iBAAiB,GAAG,CAAC,CAAS,EAAU,EAAE,CAC9C,cAAM,CAAC,SAAS,CAAC,cAAM,CAAC,IAAI,CAAC,cAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAE/C,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,6BAA6B,CAAC,CAAA;AAC3E,MAAM,YAAY,GAChB,cAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,GAAG,GAAG,GAAG,cAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AACrE,MAAM,oBAAoB,GAAG,iBAAiB,CAC5C,0DAA0D,CAC3D,CAAA;AAED,MAAM,IAAI,GAAG;+CACkC,kBAAkB;;0BAEvC,cAAM,CAAC,IAAI,CAAC,WAAW,CAAC;0BACxB,YAAY;;sBAEhB,oBAAoB;;4CAEE,cAAM,CAAC,IAAI,CAAC,eAAe,CAAC;EACtE,cAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,EAAE,CAAA;AAElE,MAAM,KAAK,GAAG,IAAI,oBAAK,CAAC;IACtB,KAAK,EAAE;QACL,IAAI,EAAE,EAAE;QACR,MAAM,EAAE,CAAC,OAAO,CAAC;KAClB;CACF,CAAC,CAAA;AAEF,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;AAElB,kBAAe,KAAK,CAAC,QAAQ,EAAE,CAAA","sourcesContent":["import colors from 'colors/safe'\nimport Table from 'cli-table3'\n\nconst underlineBoldCyan = (x: string): string =>\n colors.underline(colors.bold(colors.cyan(x)))\n\nconst formattedReportUrl = underlineBoldCyan('https://reports.cucumber.io')\nconst formattedEnv =\n colors.cyan('CUCUMBER_PUBLISH_ENABLED') + '=' + colors.cyan('true')\nconst formattedMoreInfoUrl = underlineBoldCyan(\n 'https://cucumber.io/docs/cucumber/environment-variables/'\n)\n\nconst text = `\\\nShare your Cucumber Report with your team at ${formattedReportUrl}\n\nCommand line option: ${colors.cyan('--publish')}\nEnvironment variable: ${formattedEnv}\n\nMore information at ${formattedMoreInfoUrl}\n\nTo disable this message, add this to your ${colors.bold('./cucumber.js')}: \n${colors.bold(\"module.exports = { default: '--publish-quiet' }\")}`\n\nconst table = new Table({\n style: {\n head: [],\n border: ['green'],\n },\n})\n\ntable.push([text])\n\nexport default table.toString()\n"]}
1
+ {"version":3,"file":"publish_banner.js","sourceRoot":"","sources":["../../src/cli/publish_banner.ts"],"names":[],"mappings":";;;;;AAAA,kDAAyB;AACzB,4DAA8B;AAE9B,MAAM,iBAAiB,GAAG,CAAC,CAAS,EAAU,EAAE,CAC9C,eAAK,CAAC,SAAS,CAAC,eAAK,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAE5C,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,6BAA6B,CAAC,CAAA;AAC3E,MAAM,YAAY,GAChB,eAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,GAAG,GAAG,GAAG,eAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AACnE,MAAM,oBAAoB,GAAG,iBAAiB,CAC5C,0DAA0D,CAC3D,CAAA;AAED,MAAM,IAAI,GAAG;+CACkC,kBAAkB;;0BAEvC,eAAK,CAAC,IAAI,CAAC,WAAW,CAAC;0BACvB,YAAY;;sBAEhB,oBAAoB;;4CAEE,eAAK,CAAC,IAAI,CAAC,eAAe,CAAC;EACrE,eAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,EAAE,CAAA;AAEjE,MAAM,KAAK,GAAG,IAAI,oBAAK,CAAC;IACtB,KAAK,EAAE;QACL,IAAI,EAAE,EAAE;QACR,MAAM,EAAE,CAAC,OAAO,CAAC;KAClB;CACF,CAAC,CAAA;AAEF,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;AAElB,kBAAe,KAAK,CAAC,QAAQ,EAAE,CAAA","sourcesContent":["import chalk from 'chalk'\nimport Table from 'cli-table3'\n\nconst underlineBoldCyan = (x: string): string =>\n chalk.underline(chalk.bold(chalk.cyan(x)))\n\nconst formattedReportUrl = underlineBoldCyan('https://reports.cucumber.io')\nconst formattedEnv =\n chalk.cyan('CUCUMBER_PUBLISH_ENABLED') + '=' + chalk.cyan('true')\nconst formattedMoreInfoUrl = underlineBoldCyan(\n 'https://cucumber.io/docs/cucumber/environment-variables/'\n)\n\nconst text = `\\\nShare your Cucumber Report with your team at ${formattedReportUrl}\n\nCommand line option: ${chalk.cyan('--publish')}\nEnvironment variable: ${formattedEnv}\n\nMore information at ${formattedMoreInfoUrl}\n\nTo disable this message, add this to your ${chalk.bold('./cucumber.js')}: \n${chalk.bold(\"module.exports = { default: '--publish-quiet' }\")}`\n\nconst table = new Table({\n style: {\n head: [],\n border: ['green'],\n },\n})\n\ntable.push([text])\n\nexport default table.toString()\n"]}
package/lib/cli/run.js CHANGED
@@ -3,21 +3,30 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ /* eslint-disable no-console */
7
+ /* This is one rare place where we're fine to use process/console directly,
8
+ * but other code abstracts those to remain composable and testable. */
6
9
  const _1 = __importDefault(require("./"));
7
10
  const verror_1 = __importDefault(require("verror"));
8
11
  const publish_banner_1 = __importDefault(require("./publish_banner"));
9
- function exitWithError(error) {
10
- console.error(verror_1.default.fullStack(error)); // eslint-disable-line no-console
12
+ const validate_node_engine_version_1 = require("./validate_node_engine_version");
13
+ function logErrorMessageAndExit(message) {
14
+ console.error(message);
11
15
  process.exit(1);
12
16
  }
13
17
  function displayPublishAdvertisementBanner() {
14
18
  console.error(publish_banner_1.default);
15
19
  }
16
20
  async function run() {
21
+ (0, validate_node_engine_version_1.validateNodeEngineVersion)(process.version, (error) => {
22
+ console.error(error);
23
+ process.exit(1);
24
+ }, console.warn);
17
25
  const cli = new _1.default({
18
26
  argv: process.argv,
19
27
  cwd: process.cwd(),
20
28
  stdout: process.stdout,
29
+ stderr: process.stderr,
21
30
  env: process.env,
22
31
  });
23
32
  let result;
@@ -25,7 +34,7 @@ async function run() {
25
34
  result = await cli.run();
26
35
  }
27
36
  catch (error) {
28
- exitWithError(error);
37
+ logErrorMessageAndExit(verror_1.default.fullStack(error));
29
38
  }
30
39
  if (result.shouldAdvertisePublish) {
31
40
  displayPublishAdvertisementBanner();
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":";;;;;AAAA,0CAAuC;AACvC,oDAA2B;AAC3B,sEAA4C;AAE5C,SAAS,aAAa,CAAC,KAAY;IACjC,OAAO,CAAC,KAAK,CAAC,gBAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA,CAAC,iCAAiC;IACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AAED,SAAS,iCAAiC;IACxC,OAAO,CAAC,KAAK,CAAC,wBAAa,CAAC,CAAA;AAC9B,CAAC;AAEc,KAAK,UAAU,GAAG;IAC/B,MAAM,GAAG,GAAG,IAAI,UAAG,CAAC;QAClB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC,CAAA;IAEF,IAAI,MAAqB,CAAA;IACzB,IAAI;QACF,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,EAAE,CAAA;KACzB;IAAC,OAAO,KAAK,EAAE;QACd,aAAa,CAAC,KAAK,CAAC,CAAA;KACrB;IAED,IAAI,MAAM,CAAC,sBAAsB,EAAE;QACjC,iCAAiC,EAAE,CAAA;KACpC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACvC,IAAI,MAAM,CAAC,qBAAqB,EAAE;QAChC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;KACvB;SAAM;QACL,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAA;KAC5B;AACH,CAAC;AAzBD,sBAyBC","sourcesContent":["import Cli, { ICliRunResult } from './'\nimport VError from 'verror'\nimport publishBanner from './publish_banner'\n\nfunction exitWithError(error: Error): void {\n console.error(VError.fullStack(error)) // eslint-disable-line no-console\n process.exit(1)\n}\n\nfunction displayPublishAdvertisementBanner(): void {\n console.error(publishBanner)\n}\n\nexport default async function run(): Promise<void> {\n const cli = new Cli({\n argv: process.argv,\n cwd: process.cwd(),\n stdout: process.stdout,\n env: process.env,\n })\n\n let result: ICliRunResult\n try {\n result = await cli.run()\n } catch (error) {\n exitWithError(error)\n }\n\n if (result.shouldAdvertisePublish) {\n displayPublishAdvertisementBanner()\n }\n\n const exitCode = result.success ? 0 : 1\n if (result.shouldExitImmediately) {\n process.exit(exitCode)\n } else {\n process.exitCode = exitCode\n }\n}\n"]}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":";;;;;AAAA,+BAA+B;AAC/B;uEACuE;AACvE,0CAAuC;AACvC,oDAA2B;AAC3B,sEAA4C;AAC5C,iFAA0E;AAE1E,SAAS,sBAAsB,CAAC,OAAe;IAC7C,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AAED,SAAS,iCAAiC;IACxC,OAAO,CAAC,KAAK,CAAC,wBAAa,CAAC,CAAA;AAC9B,CAAC;AAEc,KAAK,UAAU,GAAG;IAC/B,IAAA,wDAAyB,EACvB,OAAO,CAAC,OAAO,EACf,CAAC,KAAK,EAAE,EAAE;QACR,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,EACD,OAAO,CAAC,IAAI,CACb,CAAA;IAED,MAAM,GAAG,GAAG,IAAI,UAAG,CAAC;QAClB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC,CAAA;IAEF,IAAI,MAAqB,CAAA;IACzB,IAAI;QACF,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,EAAE,CAAA;KACzB;IAAC,OAAO,KAAK,EAAE;QACd,sBAAsB,CAAC,gBAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;KAChD;IAED,IAAI,MAAM,CAAC,sBAAsB,EAAE;QACjC,iCAAiC,EAAE,CAAA;KACpC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACvC,IAAI,MAAM,CAAC,qBAAqB,EAAE;QAChC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;KACvB;SAAM;QACL,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAA;KAC5B;AACH,CAAC;AAnCD,sBAmCC","sourcesContent":["/* eslint-disable no-console */\n/* This is one rare place where we're fine to use process/console directly,\n * but other code abstracts those to remain composable and testable. */\nimport Cli, { ICliRunResult } from './'\nimport VError from 'verror'\nimport publishBanner from './publish_banner'\nimport { validateNodeEngineVersion } from './validate_node_engine_version'\n\nfunction logErrorMessageAndExit(message: string): void {\n console.error(message)\n process.exit(1)\n}\n\nfunction displayPublishAdvertisementBanner(): void {\n console.error(publishBanner)\n}\n\nexport default async function run(): Promise<void> {\n validateNodeEngineVersion(\n process.version,\n (error) => {\n console.error(error)\n process.exit(1)\n },\n console.warn\n )\n\n const cli = new Cli({\n argv: process.argv,\n cwd: process.cwd(),\n stdout: process.stdout,\n stderr: process.stderr,\n env: process.env,\n })\n\n let result: ICliRunResult\n try {\n result = await cli.run()\n } catch (error) {\n logErrorMessageAndExit(VError.fullStack(error))\n }\n\n if (result.shouldAdvertisePublish) {\n displayPublishAdvertisementBanner()\n }\n\n const exitCode = result.success ? 0 : 1\n if (result.shouldExitImmediately) {\n process.exit(exitCode)\n } else {\n process.exitCode = exitCode\n }\n}\n"]}
@@ -0,0 +1,10 @@
1
+ declare type PackageJSON = {
2
+ engines: {
3
+ node: string;
4
+ };
5
+ enginesTested: {
6
+ node: string;
7
+ };
8
+ };
9
+ export declare function validateNodeEngineVersion(currentVersion: string, onError: (message: string) => void, onWarning: (message: string) => void, readPackageJSON?: () => PackageJSON): void;
10
+ export {};
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.validateNodeEngineVersion = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const semver_1 = __importDefault(require("semver"));
10
+ const readActualPackageJSON = () => JSON.parse(fs_1.default
11
+ .readFileSync(path_1.default.resolve(__dirname, '..', '..', 'package.json'))
12
+ .toString());
13
+ function validateNodeEngineVersion(currentVersion, onError, onWarning, readPackageJSON = readActualPackageJSON) {
14
+ const requiredVersions = readPackageJSON().engines.node;
15
+ const testedVersions = readPackageJSON().enginesTested.node;
16
+ if (!semver_1.default.satisfies(currentVersion, requiredVersions)) {
17
+ onError(`Cucumber can only run on Node.js versions ${requiredVersions}. This Node.js version is ${currentVersion}`);
18
+ }
19
+ else if (!semver_1.default.satisfies(currentVersion, testedVersions)) {
20
+ onWarning(`This Node.js version (${currentVersion}) has not been tested with this version of Cucumber; it should work normally, but please raise an issue if you see anything unexpected.`);
21
+ }
22
+ }
23
+ exports.validateNodeEngineVersion = validateNodeEngineVersion;
24
+ //# sourceMappingURL=validate_node_engine_version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate_node_engine_version.js","sourceRoot":"","sources":["../../src/cli/validate_node_engine_version.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAmB;AACnB,gDAAuB;AACvB,oDAA2B;AAO3B,MAAM,qBAAqB,GAAsB,GAAG,EAAE,CACpD,IAAI,CAAC,KAAK,CACR,YAAE;KACC,YAAY,CAAC,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;KACjE,QAAQ,EAAE,CACd,CAAA;AAEH,SAAgB,yBAAyB,CACvC,cAAsB,EACtB,OAAkC,EAClC,SAAoC,EACpC,kBAAqC,qBAAqB;IAE1D,MAAM,gBAAgB,GAAG,eAAe,EAAE,CAAC,OAAO,CAAC,IAAI,CAAA;IACvD,MAAM,cAAc,GAAG,eAAe,EAAE,CAAC,aAAa,CAAC,IAAI,CAAA;IAC3D,IAAI,CAAC,gBAAM,CAAC,SAAS,CAAC,cAAc,EAAE,gBAAgB,CAAC,EAAE;QACvD,OAAO,CACL,6CAA6C,gBAAgB,6BAA6B,cAAc,EAAE,CAC3G,CAAA;KACF;SAAM,IAAI,CAAC,gBAAM,CAAC,SAAS,CAAC,cAAc,EAAE,cAAc,CAAC,EAAE;QAC5D,SAAS,CACP,yBAAyB,cAAc,yIAAyI,CACjL,CAAA;KACF;AACH,CAAC;AAjBD,8DAiBC","sourcesContent":["import fs from 'fs'\nimport path from 'path'\nimport semver from 'semver'\n\ntype PackageJSON = {\n engines: { node: string }\n enginesTested: { node: string }\n}\n\nconst readActualPackageJSON: () => PackageJSON = () =>\n JSON.parse(\n fs\n .readFileSync(path.resolve(__dirname, '..', '..', 'package.json'))\n .toString()\n )\n\nexport function validateNodeEngineVersion(\n currentVersion: string,\n onError: (message: string) => void,\n onWarning: (message: string) => void,\n readPackageJSON: () => PackageJSON = readActualPackageJSON\n): void {\n const requiredVersions = readPackageJSON().engines.node\n const testedVersions = readPackageJSON().enginesTested.node\n if (!semver.satisfies(currentVersion, requiredVersions)) {\n onError(\n `Cucumber can only run on Node.js versions ${requiredVersions}. This Node.js version is ${currentVersion}`\n )\n } else if (!semver.satisfies(currentVersion, testedVersions)) {\n onWarning(\n `This Node.js version (${currentVersion}) has not been tested with this version of Cucumber; it should work normally, but please raise an issue if you see anything unexpected.`\n )\n }\n}\n"]}
@@ -0,0 +1,20 @@
1
+ import { IConfiguration } from './types';
2
+ export interface IParsedArgvOptions {
3
+ config?: string;
4
+ i18nKeywords?: string;
5
+ i18nLanguages?: boolean;
6
+ profile: string[];
7
+ }
8
+ export interface IParsedArgv {
9
+ options: IParsedArgvOptions;
10
+ configuration: Partial<IConfiguration>;
11
+ }
12
+ declare const ArgvParser: {
13
+ collect<T>(val: T, memo?: T[]): T[];
14
+ mergeJson(option: string): (str: string, memo?: object) => object;
15
+ mergeTags(value: string, memo?: string): string;
16
+ validateCountOption(value: string, optionName: string): number;
17
+ validateLanguage(value: string): string;
18
+ parse(argv: string[]): IParsedArgv;
19
+ };
20
+ export default ArgvParser;