@cucumber/cucumber 7.2.0 → 7.3.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.
- package/lib/cli/argv_parser.d.ts +0 -1
- package/lib/cli/argv_parser.js +0 -1
- package/lib/cli/argv_parser.js.map +1 -1
- package/lib/cli/configuration_builder.d.ts +0 -1
- package/lib/cli/configuration_builder.js +5 -5
- package/lib/cli/configuration_builder.js.map +1 -1
- package/lib/cli/helpers.js +41 -22
- package/lib/cli/helpers.js.map +1 -1
- package/lib/cli/index.d.ts +1 -3
- package/lib/cli/index.js +27 -30
- package/lib/cli/index.js.map +1 -1
- package/lib/cli/profile_loader.d.ts +2 -5
- package/lib/cli/profile_loader.js +2 -3
- package/lib/cli/profile_loader.js.map +1 -1
- package/lib/cli/publish_banner.js +1 -1
- package/lib/cli/publish_banner.js.map +1 -1
- package/lib/formatter/builder.d.ts +4 -8
- package/lib/formatter/builder.js +17 -32
- package/lib/formatter/builder.js.map +1 -1
- package/lib/formatter/get_color_fns.d.ts +6 -2
- package/lib/formatter/get_color_fns.js +18 -12
- package/lib/formatter/get_color_fns.js.map +1 -1
- package/lib/formatter/helpers/event_data_collector.d.ts +14 -17
- package/lib/formatter/helpers/event_data_collector.js +14 -8
- package/lib/formatter/helpers/event_data_collector.js.map +1 -1
- package/lib/formatter/helpers/gherkin_document_parser.d.ts +5 -6
- package/lib/formatter/helpers/gherkin_document_parser.js +1 -4
- package/lib/formatter/helpers/gherkin_document_parser.js.map +1 -1
- package/lib/formatter/helpers/issue_helpers.d.ts +6 -6
- package/lib/formatter/helpers/issue_helpers.js +5 -6
- package/lib/formatter/helpers/issue_helpers.js.map +1 -1
- package/lib/formatter/helpers/pickle_parser.d.ts +9 -10
- package/lib/formatter/helpers/pickle_parser.js.map +1 -1
- package/lib/formatter/helpers/step_argument_formatter.d.ts +2 -2
- package/lib/formatter/helpers/step_argument_formatter.js.map +1 -1
- package/lib/formatter/helpers/summary_helpers.d.ts +2 -2
- package/lib/formatter/helpers/summary_helpers.js +32 -14
- package/lib/formatter/helpers/summary_helpers.js.map +1 -1
- package/lib/formatter/helpers/test_case_attempt_formatter.js +33 -14
- package/lib/formatter/helpers/test_case_attempt_formatter.js.map +1 -1
- package/lib/formatter/helpers/test_case_attempt_parser.d.ts +5 -5
- package/lib/formatter/helpers/test_case_attempt_parser.js +27 -9
- package/lib/formatter/helpers/test_case_attempt_parser.js.map +1 -1
- package/lib/formatter/helpers/usage_helpers/index.d.ts +3 -3
- package/lib/formatter/helpers/usage_helpers/index.js +44 -15
- package/lib/formatter/helpers/usage_helpers/index.js.map +1 -1
- package/lib/formatter/html_formatter.js +1 -1
- package/lib/formatter/html_formatter.js.map +1 -1
- package/lib/formatter/http_stream.js +1 -1
- package/lib/formatter/http_stream.js.map +1 -1
- package/lib/formatter/json_formatter.d.ts +21 -27
- package/lib/formatter/json_formatter.js +50 -23
- package/lib/formatter/json_formatter.js.map +1 -1
- package/lib/formatter/message_formatter.js +1 -1
- package/lib/formatter/message_formatter.js.map +1 -1
- package/lib/formatter/progress_bar_formatter.d.ts +6 -6
- package/lib/formatter/progress_bar_formatter.js +3 -3
- package/lib/formatter/progress_bar_formatter.js.map +1 -1
- package/lib/formatter/progress_formatter.d.ts +2 -2
- package/lib/formatter/progress_formatter.js +29 -10
- package/lib/formatter/progress_formatter.js.map +1 -1
- package/lib/formatter/rerun_formatter.js +22 -4
- package/lib/formatter/rerun_formatter.js.map +1 -1
- package/lib/formatter/snippets_formatter.js +21 -2
- package/lib/formatter/snippets_formatter.js.map +1 -1
- package/lib/formatter/step_definition_snippet_builder/index.d.ts +3 -3
- package/lib/formatter/step_definition_snippet_builder/index.js.map +1 -1
- package/lib/formatter/step_definition_snippet_builder/javascript_snippet_syntax.js.map +1 -1
- package/lib/formatter/summary_formatter.d.ts +2 -2
- package/lib/formatter/summary_formatter.js.map +1 -1
- package/lib/formatter/usage_formatter.js +22 -3
- package/lib/formatter/usage_formatter.js.map +1 -1
- package/lib/formatter/usage_json_formatter.js.map +1 -1
- package/lib/index.d.ts +14 -12
- package/lib/index.js +3 -3
- package/lib/index.js.map +1 -1
- package/lib/models/data_table.d.ts +3 -4
- package/lib/models/data_table.js.map +1 -1
- package/lib/models/definition.d.ts +2 -2
- package/lib/models/definition.js.map +1 -1
- package/lib/models/test_case_hook_definition.d.ts +2 -2
- package/lib/models/test_case_hook_definition.js.map +1 -1
- package/lib/models/test_step_hook_definition.d.ts +2 -2
- package/lib/models/test_step_hook_definition.js.map +1 -1
- package/lib/pickle_filter.d.ts +9 -11
- package/lib/pickle_filter.js +4 -4
- package/lib/pickle_filter.js.map +1 -1
- package/lib/runtime/assemble_test_cases.d.ts +13 -0
- package/lib/runtime/assemble_test_cases.js +88 -0
- package/lib/runtime/assemble_test_cases.js.map +1 -0
- package/lib/runtime/attachment_manager/index.d.ts +2 -2
- package/lib/runtime/attachment_manager/index.js +23 -4
- package/lib/runtime/attachment_manager/index.js.map +1 -1
- package/lib/runtime/helpers.d.ts +2 -2
- package/lib/runtime/helpers.js.map +1 -1
- package/lib/runtime/index.d.ts +4 -3
- package/lib/runtime/index.js +31 -13
- package/lib/runtime/index.js.map +1 -1
- package/lib/runtime/parallel/command_types.d.ts +10 -9
- package/lib/runtime/parallel/command_types.js.map +1 -1
- package/lib/runtime/parallel/coordinator.d.ts +10 -9
- package/lib/runtime/parallel/coordinator.js +54 -43
- package/lib/runtime/parallel/coordinator.js.map +1 -1
- package/lib/runtime/parallel/worker.d.ts +2 -2
- package/lib/runtime/parallel/worker.js +8 -14
- package/lib/runtime/parallel/worker.js.map +1 -1
- package/lib/runtime/step_runner.d.ts +3 -3
- package/lib/runtime/step_runner.js +16 -12
- package/lib/runtime/step_runner.js.map +1 -1
- package/lib/runtime/stopwatch.d.ts +4 -4
- package/lib/runtime/stopwatch.js +21 -2
- package/lib/runtime/stopwatch.js.map +1 -1
- package/lib/runtime/{pickle_runner.d.ts → test_case_runner.d.ts} +16 -32
- package/lib/runtime/{pickle_runner.js → test_case_runner.js} +104 -147
- package/lib/runtime/test_case_runner.js.map +1 -0
- package/lib/step_arguments.d.ts +4 -4
- package/lib/step_arguments.js.map +1 -1
- package/lib/support_code_library_builder/index.d.ts +9 -7
- package/lib/support_code_library_builder/index.js +11 -10
- package/lib/support_code_library_builder/index.js.map +1 -1
- package/lib/support_code_library_builder/types.d.ts +21 -23
- package/lib/support_code_library_builder/types.js.map +1 -1
- package/lib/support_code_library_builder/validate_arguments.js +8 -8
- package/lib/support_code_library_builder/validate_arguments.js.map +1 -1
- package/lib/support_code_library_builder/world.d.ts +7 -1
- package/lib/support_code_library_builder/world.js.map +1 -1
- package/lib/time.d.ts +2 -10
- package/lib/time.js +24 -48
- package/lib/time.js.map +1 -1
- package/package.json +38 -40
- package/CHANGELOG.md +0 -1874
- package/lib/importers.js +0 -17
- package/lib/runtime/pickle_runner.js.map +0 -1
- package/lib/status.d.ts +0 -3
- package/lib/status.js +0 -5
- package/lib/status.js.map +0 -1
- package/lib/wrapper.mjs +0 -38
package/lib/cli/argv_parser.d.ts
CHANGED
package/lib/cli/argv_parser.js
CHANGED
|
@@ -59,7 +59,6 @@ const ArgvParser = {
|
|
|
59
59
|
.version(version, '-v, --version')
|
|
60
60
|
.option('-b, --backtrace', 'show full backtrace for errors')
|
|
61
61
|
.option('-d, --dry-run', 'invoke formatters without executing steps', false)
|
|
62
|
-
.option('--esm', 'import support code via ES module imports', false)
|
|
63
62
|
.option('--exit', 'force shutdown of the event loop when the test run has finished: cucumber will call process.exit', false)
|
|
64
63
|
.option('--fail-fast', 'abort the run on first failure', false)
|
|
65
64
|
.option('-f, --format <TYPE[:PATH]>', 'specify the output format, optionally supply PATH to redirect formatter output (repeatable)', ArgvParser.collect, [])
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"argv_parser.js","sourceRoot":"","sources":["../../src/cli/argv_parser.ts"],"names":[],"mappings":"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","sourcesContent":["import _ from 'lodash'\nimport { Command } from 'commander'\nimport path from 'path'\nimport { dialects } from '@cucumber/gherkin'\nimport { SnippetInterface } from '../formatter/step_definition_snippet_builder/snippet_syntax'\n\n// Using require instead of import so compiled typescript will have the desired folder structure\nconst { version } = require('../../package.json') // eslint-disable-line @typescript-eslint/no-var-requires\n\nexport interface IParsedArgvFormatRerunOptions {\n separator?: string\n}\n\nexport interface IParsedArgvFormatOptions {\n colorsEnabled?: boolean\n rerun?: IParsedArgvFormatRerunOptions\n snippetInterface?: SnippetInterface\n snippetSyntax?: string\n [customKey: string]: any\n}\n\nexport interface IParsedArgvOptions {\n backtrace: boolean\n dryRun: boolean\n esm: boolean\n exit: boolean\n failFast: boolean\n format: string[]\n formatOptions: IParsedArgvFormatOptions\n i18nKeywords: string\n i18nLanguages: boolean\n language: string\n name: string[]\n order: string\n parallel: number\n predictableIds: boolean\n profile: string[]\n publish: boolean\n publishQuiet: boolean\n require: string[]\n requireModule: string[]\n retry: number\n retryTagFilter: string\n strict: boolean\n tags: string\n worldParameters: object\n}\n\nexport interface IParsedArgv {\n args: string[]\n options: IParsedArgvOptions\n}\n\nconst ArgvParser = {\n collect<T>(val: T, memo: T[]): T[] {\n memo.push(val)\n return memo\n },\n\n mergeJson(option: string): (str: string, memo: object) => object {\n return function (str: string, memo: object) {\n let val: object\n try {\n val = JSON.parse(str)\n } catch (error) {\n const e: Error = error\n throw new Error(`${option} passed invalid JSON: ${e.message}: ${str}`)\n }\n if (!_.isPlainObject(val)) {\n throw new Error(`${option} must be passed JSON of an object: ${str}`)\n }\n return _.merge(memo, val)\n }\n },\n\n mergeTags(value: string, memo: string): string {\n return memo === '' ? `(${value})` : `${memo} and (${value})`\n },\n\n validateCountOption(value: string, optionName: string): number {\n const numericValue = parseInt(value)\n if (isNaN(numericValue) || numericValue < 0) {\n throw new Error(`${optionName} must be a non negative integer`)\n }\n return numericValue\n },\n\n validateLanguage(value: string): string {\n if (!_.includes(_.keys(dialects), value)) {\n throw new Error(`Unsupported ISO 639-1: ${value}`)\n }\n return value\n },\n\n validateRetryOptions(options: IParsedArgvOptions): void {\n if (options.retryTagFilter !== '' && options.retry === 0) {\n throw new Error(\n 'a positive --retry count must be specified when setting --retry-tag-filter'\n )\n }\n },\n\n parse(argv: string[]): IParsedArgv {\n const program = new Command(path.basename(argv[1]))\n\n program\n .storeOptionsAsProperties(false)\n .usage('[options] [<GLOB|DIR|FILE[:LINE]>...]')\n .version(version, '-v, --version')\n .option('-b, --backtrace', 'show full backtrace for errors')\n .option(\n '-d, --dry-run',\n 'invoke formatters without executing steps',\n false\n )\n .option('--esm', 'import support code via ES module imports', false)\n .option(\n '--exit',\n 'force shutdown of the event loop when the test run has finished: cucumber will call process.exit',\n false\n )\n .option('--fail-fast', 'abort the run on first failure', false)\n .option(\n '-f, --format <TYPE[:PATH]>',\n 'specify the output format, optionally supply PATH to redirect formatter output (repeatable)',\n ArgvParser.collect,\n []\n )\n .option(\n '--format-options <JSON>',\n 'provide options for formatters (repeatable)',\n ArgvParser.mergeJson('--format-options'),\n {}\n )\n .option(\n '--i18n-keywords <ISO 639-1>',\n 'list language keywords',\n ArgvParser.validateLanguage,\n ''\n )\n .option('--i18n-languages', 'list languages', false)\n .option(\n '--language <ISO 639-1>',\n 'provide the default language for feature files',\n 'en'\n )\n .option(\n '--name <REGEXP>',\n 'only execute the scenarios with name matching the expression (repeatable)',\n ArgvParser.collect,\n []\n )\n .option('--no-strict', 'succeed even if there are pending steps')\n .option(\n '--order <TYPE[:SEED]>',\n 'run scenarios in the specified order. Type should be `defined` or `random`',\n 'defined'\n )\n .option(\n '-p, --profile <NAME>',\n 'specify the profile to use (repeatable)',\n ArgvParser.collect,\n []\n )\n .option(\n '--parallel <NUMBER_OF_WORKERS>',\n 'run in parallel with the given number of workers',\n (val) => ArgvParser.validateCountOption(val, '--parallel'),\n 0\n )\n .option(\n '--predictable-ids',\n 'Use predictable ids in messages (option ignored if using parallel)',\n false\n )\n .option(\n '--publish',\n 'Publish a report to https://reports.cucumber.io',\n false\n )\n .option(\n '--publish-quiet',\n \"Don't print information banner about publishing reports\",\n false\n )\n .option(\n '-r, --require <GLOB|DIR|FILE>',\n 'require files before executing features (repeatable)',\n ArgvParser.collect,\n []\n )\n .option(\n '--require-module <NODE_MODULE>',\n 'require node modules before requiring files (repeatable)',\n ArgvParser.collect,\n []\n )\n .option(\n '--retry <NUMBER_OF_RETRIES>',\n 'specify the number of times to retry failing test cases (default: 0)',\n (val) => ArgvParser.validateCountOption(val, '--retry'),\n 0\n )\n .option(\n '--retryTagFilter, --retry-tag-filter <EXPRESSION>',\n `only retries the features or scenarios with tags matching the expression (repeatable).\n This option requires '--retry' to be specified.`,\n ArgvParser.mergeTags,\n ''\n )\n .option(\n '-t, --tags <EXPRESSION>',\n 'only execute the features or scenarios with tags matching the expression (repeatable)',\n ArgvParser.mergeTags,\n ''\n )\n .option(\n '--world-parameters <JSON>',\n 'provide parameters that will be passed to the world constructor (repeatable)',\n ArgvParser.mergeJson('--world-parameters'),\n {}\n )\n\n program.on('--help', () => {\n /* eslint-disable no-console */\n console.log(\n ' For more details please visit https://github.com/cucumber/cucumber-js/blob/master/docs/cli.md\\n'\n )\n /* eslint-enable no-console */\n })\n\n program.parse(argv)\n const options = program.opts() as IParsedArgvOptions\n ArgvParser.validateRetryOptions(options)\n\n return {\n options,\n args: program.args,\n }\n },\n\n lint(fullArgv: string[]): void {\n if (fullArgv.includes('--retryTagFilter')) {\n console.warn(\n 'the argument --retryTagFilter is deprecated and will be removed in a future release; please use --retry-tag-filter'\n )\n }\n },\n}\n\nexport default ArgvParser\n"]}
|
|
1
|
+
{"version":3,"file":"argv_parser.js","sourceRoot":"","sources":["../../src/cli/argv_parser.ts"],"names":[],"mappings":"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","sourcesContent":["import _ from 'lodash'\nimport { Command } from 'commander'\nimport path from 'path'\nimport { dialects } from '@cucumber/gherkin'\nimport { SnippetInterface } from '../formatter/step_definition_snippet_builder/snippet_syntax'\n\n// Using require instead of import so compiled typescript will have the desired folder structure\nconst { version } = require('../../package.json') // eslint-disable-line @typescript-eslint/no-var-requires\n\nexport interface IParsedArgvFormatRerunOptions {\n separator?: string\n}\n\nexport interface IParsedArgvFormatOptions {\n colorsEnabled?: boolean\n rerun?: IParsedArgvFormatRerunOptions\n snippetInterface?: SnippetInterface\n snippetSyntax?: string\n [customKey: string]: any\n}\n\nexport interface IParsedArgvOptions {\n backtrace: boolean\n dryRun: boolean\n exit: boolean\n failFast: boolean\n format: string[]\n formatOptions: IParsedArgvFormatOptions\n i18nKeywords: string\n i18nLanguages: boolean\n language: string\n name: string[]\n order: string\n parallel: number\n predictableIds: boolean\n profile: string[]\n publish: boolean\n publishQuiet: boolean\n require: string[]\n requireModule: string[]\n retry: number\n retryTagFilter: string\n strict: boolean\n tags: string\n worldParameters: object\n}\n\nexport interface IParsedArgv {\n args: string[]\n options: IParsedArgvOptions\n}\n\nconst ArgvParser = {\n collect<T>(val: T, memo: T[]): T[] {\n memo.push(val)\n return memo\n },\n\n mergeJson(option: string): (str: string, memo: object) => object {\n return function (str: string, memo: object) {\n let val: object\n try {\n val = JSON.parse(str)\n } catch (error) {\n const e: Error = error\n throw new Error(`${option} passed invalid JSON: ${e.message}: ${str}`)\n }\n if (!_.isPlainObject(val)) {\n throw new Error(`${option} must be passed JSON of an object: ${str}`)\n }\n return _.merge(memo, val)\n }\n },\n\n mergeTags(value: string, memo: string): string {\n return memo === '' ? `(${value})` : `${memo} and (${value})`\n },\n\n validateCountOption(value: string, optionName: string): number {\n const numericValue = parseInt(value)\n if (isNaN(numericValue) || numericValue < 0) {\n throw new Error(`${optionName} must be a non negative integer`)\n }\n return numericValue\n },\n\n validateLanguage(value: string): string {\n if (!_.includes(_.keys(dialects), value)) {\n throw new Error(`Unsupported ISO 639-1: ${value}`)\n }\n return value\n },\n\n validateRetryOptions(options: IParsedArgvOptions): void {\n if (options.retryTagFilter !== '' && options.retry === 0) {\n throw new Error(\n 'a positive --retry count must be specified when setting --retry-tag-filter'\n )\n }\n },\n\n parse(argv: string[]): IParsedArgv {\n const program = new Command(path.basename(argv[1]))\n\n program\n .storeOptionsAsProperties(false)\n .usage('[options] [<GLOB|DIR|FILE[:LINE]>...]')\n .version(version, '-v, --version')\n .option('-b, --backtrace', 'show full backtrace for errors')\n .option(\n '-d, --dry-run',\n 'invoke formatters without executing steps',\n false\n )\n .option(\n '--exit',\n 'force shutdown of the event loop when the test run has finished: cucumber will call process.exit',\n false\n )\n .option('--fail-fast', 'abort the run on first failure', false)\n .option(\n '-f, --format <TYPE[:PATH]>',\n 'specify the output format, optionally supply PATH to redirect formatter output (repeatable)',\n ArgvParser.collect,\n []\n )\n .option(\n '--format-options <JSON>',\n 'provide options for formatters (repeatable)',\n ArgvParser.mergeJson('--format-options'),\n {}\n )\n .option(\n '--i18n-keywords <ISO 639-1>',\n 'list language keywords',\n ArgvParser.validateLanguage,\n ''\n )\n .option('--i18n-languages', 'list languages', false)\n .option(\n '--language <ISO 639-1>',\n 'provide the default language for feature files',\n 'en'\n )\n .option(\n '--name <REGEXP>',\n 'only execute the scenarios with name matching the expression (repeatable)',\n ArgvParser.collect,\n []\n )\n .option('--no-strict', 'succeed even if there are pending steps')\n .option(\n '--order <TYPE[:SEED]>',\n 'run scenarios in the specified order. Type should be `defined` or `random`',\n 'defined'\n )\n .option(\n '-p, --profile <NAME>',\n 'specify the profile to use (repeatable)',\n ArgvParser.collect,\n []\n )\n .option(\n '--parallel <NUMBER_OF_WORKERS>',\n 'run in parallel with the given number of workers',\n (val) => ArgvParser.validateCountOption(val, '--parallel'),\n 0\n )\n .option(\n '--predictable-ids',\n 'Use predictable ids in messages (option ignored if using parallel)',\n false\n )\n .option(\n '--publish',\n 'Publish a report to https://reports.cucumber.io',\n false\n )\n .option(\n '--publish-quiet',\n \"Don't print information banner about publishing reports\",\n false\n )\n .option(\n '-r, --require <GLOB|DIR|FILE>',\n 'require files before executing features (repeatable)',\n ArgvParser.collect,\n []\n )\n .option(\n '--require-module <NODE_MODULE>',\n 'require node modules before requiring files (repeatable)',\n ArgvParser.collect,\n []\n )\n .option(\n '--retry <NUMBER_OF_RETRIES>',\n 'specify the number of times to retry failing test cases (default: 0)',\n (val) => ArgvParser.validateCountOption(val, '--retry'),\n 0\n )\n .option(\n '--retryTagFilter, --retry-tag-filter <EXPRESSION>',\n `only retries the features or scenarios with tags matching the expression (repeatable).\n This option requires '--retry' to be specified.`,\n ArgvParser.mergeTags,\n ''\n )\n .option(\n '-t, --tags <EXPRESSION>',\n 'only execute the features or scenarios with tags matching the expression (repeatable)',\n ArgvParser.mergeTags,\n ''\n )\n .option(\n '--world-parameters <JSON>',\n 'provide parameters that will be passed to the world constructor (repeatable)',\n ArgvParser.mergeJson('--world-parameters'),\n {}\n )\n\n program.on('--help', () => {\n /* eslint-disable no-console */\n console.log(\n ' For more details please visit https://github.com/cucumber/cucumber-js/blob/master/docs/cli.md\\n'\n )\n /* eslint-enable no-console */\n })\n\n program.parse(argv)\n const options = program.opts() as IParsedArgvOptions\n ArgvParser.validateRetryOptions(options)\n\n return {\n options,\n args: program.args,\n }\n },\n\n lint(fullArgv: string[]): void {\n if (fullArgv.includes('--retryTagFilter')) {\n console.warn(\n 'the argument --retryTagFilter is deprecated and will be removed in a future release; please use --retry-tag-filter'\n )\n }\n },\n}\n\nexport default ArgvParser\n"]}
|
|
@@ -37,10 +37,9 @@ class ConfigurationBuilder {
|
|
|
37
37
|
if (unexpandedSupportCodePaths.length === 0) {
|
|
38
38
|
unexpandedSupportCodePaths = this.getFeatureDirectoryPaths(featurePaths);
|
|
39
39
|
}
|
|
40
|
-
supportCodePaths = await this.expandPaths(unexpandedSupportCodePaths,
|
|
40
|
+
supportCodePaths = await this.expandPaths(unexpandedSupportCodePaths, '.js');
|
|
41
41
|
}
|
|
42
42
|
return {
|
|
43
|
-
esm: this.options.esm,
|
|
44
43
|
featureDefaultLanguage: this.options.language,
|
|
45
44
|
featurePaths,
|
|
46
45
|
formats: this.getFormats(),
|
|
@@ -92,6 +91,7 @@ class ConfigurationBuilder {
|
|
|
92
91
|
}
|
|
93
92
|
async expandFeaturePaths(featurePaths) {
|
|
94
93
|
featurePaths = featurePaths.map((p) => p.replace(/(:\d+)*$/g, '')); // Strip line numbers
|
|
94
|
+
featurePaths = [...new Set(featurePaths)]; // Deduplicate the feature files
|
|
95
95
|
return this.expandPaths(featurePaths, '.feature');
|
|
96
96
|
}
|
|
97
97
|
getFeatureDirectoryPaths(featurePaths) {
|
|
@@ -145,16 +145,16 @@ class ConfigurationBuilder {
|
|
|
145
145
|
if (filename[0] === '@') {
|
|
146
146
|
const filePath = path_1.default.join(this.cwd, arg);
|
|
147
147
|
const content = await fs_1.default.readFile(filePath, 'utf8');
|
|
148
|
-
return lodash_1.default.chain(content).split('\n').map(lodash_1.default.trim).
|
|
148
|
+
return lodash_1.default.chain(content).split('\n').map(lodash_1.default.trim).value();
|
|
149
149
|
}
|
|
150
150
|
return [arg];
|
|
151
151
|
});
|
|
152
152
|
const featurePaths = lodash_1.default.flatten(nestedFeaturePaths);
|
|
153
153
|
if (featurePaths.length > 0) {
|
|
154
|
-
return featurePaths;
|
|
154
|
+
return lodash_1.default.compact(featurePaths);
|
|
155
155
|
}
|
|
156
156
|
}
|
|
157
|
-
return ['features/**/*.feature'];
|
|
157
|
+
return ['features/**/*.{feature,feature.md}'];
|
|
158
158
|
}
|
|
159
159
|
}
|
|
160
160
|
exports.default = ConfigurationBuilder;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configuration_builder.js","sourceRoot":"","sources":["../../src/cli/configuration_builder.ts"],"names":[],"mappings":"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","sourcesContent":["import _ from 'lodash'\nimport ArgvParser, {\n IParsedArgvFormatOptions,\n IParsedArgvOptions,\n} from './argv_parser'\nimport fs from 'mz/fs'\nimport path from 'path'\nimport OptionSplitter from './option_splitter'\nimport bluebird from 'bluebird'\nimport glob from 'glob'\nimport { promisify } from 'util'\nimport { IPickleFilterOptions } from '../pickle_filter'\nimport { IRuntimeOptions } from '../runtime'\nimport { valueOrDefault } from '../value_checker'\n\nexport interface IConfigurationFormat {\n outputTo: string\n type: string\n}\n\nexport interface IConfiguration {\n esm: boolean\n featureDefaultLanguage: string\n featurePaths: string[]\n formats: IConfigurationFormat[]\n formatOptions: IParsedArgvFormatOptions\n publishing: boolean\n listI18nKeywordsFor: string\n listI18nLanguages: boolean\n order: string\n parallel: number\n pickleFilterOptions: IPickleFilterOptions\n predictableIds: boolean\n profiles: string[]\n runtimeOptions: IRuntimeOptions\n shouldExitImmediately: boolean\n supportCodePaths: string[]\n supportCodeRequiredModules: string[]\n suppressPublishAdvertisement: boolean\n}\n\nexport interface INewConfigurationBuilderOptions {\n argv: string[]\n cwd: string\n}\n\nconst DEFAULT_CUCUMBER_PUBLISH_URL = 'https://messages.cucumber.io/api/reports'\n\nexport default class ConfigurationBuilder {\n static async build(\n options: INewConfigurationBuilderOptions\n ): Promise<IConfiguration> {\n const builder = new ConfigurationBuilder(options)\n return await builder.build()\n }\n\n private readonly cwd: string\n private readonly args: string[]\n private readonly options: IParsedArgvOptions\n\n constructor({ argv, cwd }: INewConfigurationBuilderOptions) {\n this.cwd = cwd\n\n ArgvParser.lint(argv)\n const parsedArgv = ArgvParser.parse(argv)\n this.args = parsedArgv.args\n this.options = parsedArgv.options\n }\n\n async build(): Promise<IConfiguration> {\n const listI18nKeywordsFor = this.options.i18nKeywords\n const listI18nLanguages = this.options.i18nLanguages\n const unexpandedFeaturePaths = await this.getUnexpandedFeaturePaths()\n let featurePaths: string[] = []\n let supportCodePaths: string[] = []\n if (listI18nKeywordsFor === '' && !listI18nLanguages) {\n featurePaths = await this.expandFeaturePaths(unexpandedFeaturePaths)\n let unexpandedSupportCodePaths = this.options.require\n if (unexpandedSupportCodePaths.length === 0) {\n unexpandedSupportCodePaths = this.getFeatureDirectoryPaths(featurePaths)\n }\n supportCodePaths = await this.expandPaths(\n unexpandedSupportCodePaths,\n this.options.esm ? '.@(js|mjs)' : '.js'\n )\n }\n return {\n esm: this.options.esm,\n featureDefaultLanguage: this.options.language,\n featurePaths,\n formats: this.getFormats(),\n formatOptions: this.options.formatOptions,\n publishing: this.isPublishing(),\n listI18nKeywordsFor,\n listI18nLanguages,\n order: this.options.order,\n parallel: this.options.parallel,\n pickleFilterOptions: {\n cwd: this.cwd,\n featurePaths: unexpandedFeaturePaths,\n names: this.options.name,\n tagExpression: this.options.tags,\n },\n predictableIds: this.options.predictableIds,\n profiles: this.options.profile,\n runtimeOptions: {\n dryRun: this.options.dryRun,\n predictableIds: this.options.predictableIds,\n failFast: this.options.failFast,\n filterStacktraces: !this.options.backtrace,\n retry: this.options.retry,\n retryTagFilter: this.options.retryTagFilter,\n strict: this.options.strict,\n worldParameters: this.options.worldParameters,\n },\n shouldExitImmediately: this.options.exit,\n supportCodePaths,\n supportCodeRequiredModules: this.options.requireModule,\n suppressPublishAdvertisement: this.isPublishAdvertisementSuppressed(),\n }\n }\n\n async expandPaths(\n unexpandedPaths: string[],\n defaultExtension: string\n ): Promise<string[]> {\n const expandedPaths = await bluebird.map(\n unexpandedPaths,\n async (unexpandedPath) => {\n const matches = await promisify(glob)(unexpandedPath, {\n absolute: true,\n cwd: this.cwd,\n })\n const expanded = await bluebird.map(matches, async (match) => {\n if (path.extname(match) === '') {\n return await promisify(glob)(`${match}/**/*${defaultExtension}`)\n }\n return [match]\n })\n return _.flatten(expanded)\n }\n )\n return _.flatten(expandedPaths).map((x) => path.normalize(x))\n }\n\n async expandFeaturePaths(featurePaths: string[]): Promise<string[]> {\n featurePaths = featurePaths.map((p) => p.replace(/(:\\d+)*$/g, '')) // Strip line numbers\n return this.expandPaths(featurePaths, '.feature')\n }\n\n getFeatureDirectoryPaths(featurePaths: string[]): string[] {\n const featureDirs = featurePaths.map((featurePath) => {\n let featureDir = path.dirname(featurePath)\n let childDir: string\n let parentDir = featureDir\n while (childDir !== parentDir) {\n childDir = parentDir\n parentDir = path.dirname(childDir)\n if (path.basename(parentDir) === 'features') {\n featureDir = parentDir\n break\n }\n }\n return path.relative(this.cwd, featureDir)\n })\n return _.uniq(featureDirs)\n }\n\n isPublishing(): boolean {\n return (\n this.options.publish ||\n this.isTruthyString(process.env.CUCUMBER_PUBLISH_ENABLED) ||\n process.env.CUCUMBER_PUBLISH_TOKEN !== undefined\n )\n }\n\n isPublishAdvertisementSuppressed(): boolean {\n return (\n this.options.publishQuiet ||\n this.isTruthyString(process.env.CUCUMBER_PUBLISH_QUIET)\n )\n }\n\n getFormats(): IConfigurationFormat[] {\n const mapping: { [key: string]: string } = { '': 'progress' }\n this.options.format.forEach((format) => {\n const [type, outputTo] = OptionSplitter.split(format)\n mapping[outputTo] = type\n })\n if (this.isPublishing()) {\n const publishUrl = valueOrDefault(\n process.env.CUCUMBER_PUBLISH_URL,\n DEFAULT_CUCUMBER_PUBLISH_URL\n )\n\n mapping[publishUrl] = 'message'\n }\n return _.map(mapping, (type, outputTo) => ({ outputTo, type }))\n }\n\n isTruthyString(s: string | undefined): boolean {\n if (s === undefined) {\n return false\n }\n return s.match(/^(false|no|0)$/i) === null\n }\n\n async getUnexpandedFeaturePaths(): Promise<string[]> {\n if (this.args.length > 0) {\n const nestedFeaturePaths = await bluebird.map(this.args, async (arg) => {\n const filename = path.basename(arg)\n if (filename[0] === '@') {\n const filePath = path.join(this.cwd, arg)\n const content = await fs.readFile(filePath, 'utf8')\n return _.chain(content).split('\\n').map(_.trim).compact().value()\n }\n return [arg]\n })\n const featurePaths = _.flatten(nestedFeaturePaths)\n if (featurePaths.length > 0) {\n return featurePaths\n }\n }\n return ['features/**/*.feature']\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"configuration_builder.js","sourceRoot":"","sources":["../../src/cli/configuration_builder.ts"],"names":[],"mappings":"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","sourcesContent":["import _ from 'lodash'\nimport ArgvParser, {\n IParsedArgvFormatOptions,\n IParsedArgvOptions,\n} from './argv_parser'\nimport fs from 'mz/fs'\nimport path from 'path'\nimport OptionSplitter from './option_splitter'\nimport bluebird from 'bluebird'\nimport glob from 'glob'\nimport { promisify } from 'util'\nimport { IPickleFilterOptions } from '../pickle_filter'\nimport { IRuntimeOptions } from '../runtime'\nimport { valueOrDefault } from '../value_checker'\n\nexport interface IConfigurationFormat {\n outputTo: string\n type: string\n}\n\nexport interface IConfiguration {\n featureDefaultLanguage: string\n featurePaths: string[]\n formats: IConfigurationFormat[]\n formatOptions: IParsedArgvFormatOptions\n publishing: boolean\n listI18nKeywordsFor: string\n listI18nLanguages: boolean\n order: string\n parallel: number\n pickleFilterOptions: IPickleFilterOptions\n predictableIds: boolean\n profiles: string[]\n runtimeOptions: IRuntimeOptions\n shouldExitImmediately: boolean\n supportCodePaths: string[]\n supportCodeRequiredModules: string[]\n suppressPublishAdvertisement: boolean\n}\n\nexport interface INewConfigurationBuilderOptions {\n argv: string[]\n cwd: string\n}\n\nconst DEFAULT_CUCUMBER_PUBLISH_URL = 'https://messages.cucumber.io/api/reports'\n\nexport default class ConfigurationBuilder {\n static async build(\n options: INewConfigurationBuilderOptions\n ): Promise<IConfiguration> {\n const builder = new ConfigurationBuilder(options)\n return await builder.build()\n }\n\n private readonly cwd: string\n private readonly args: string[]\n private readonly options: IParsedArgvOptions\n\n constructor({ argv, cwd }: INewConfigurationBuilderOptions) {\n this.cwd = cwd\n\n ArgvParser.lint(argv)\n const parsedArgv = ArgvParser.parse(argv)\n this.args = parsedArgv.args\n this.options = parsedArgv.options\n }\n\n async build(): Promise<IConfiguration> {\n const listI18nKeywordsFor = this.options.i18nKeywords\n const listI18nLanguages = this.options.i18nLanguages\n const unexpandedFeaturePaths = await this.getUnexpandedFeaturePaths()\n let featurePaths: string[] = []\n let supportCodePaths: string[] = []\n if (listI18nKeywordsFor === '' && !listI18nLanguages) {\n featurePaths = await this.expandFeaturePaths(unexpandedFeaturePaths)\n let unexpandedSupportCodePaths = this.options.require\n if (unexpandedSupportCodePaths.length === 0) {\n unexpandedSupportCodePaths = this.getFeatureDirectoryPaths(featurePaths)\n }\n supportCodePaths = await this.expandPaths(\n unexpandedSupportCodePaths,\n '.js'\n )\n }\n return {\n featureDefaultLanguage: this.options.language,\n featurePaths,\n formats: this.getFormats(),\n formatOptions: this.options.formatOptions,\n publishing: this.isPublishing(),\n listI18nKeywordsFor,\n listI18nLanguages,\n order: this.options.order,\n parallel: this.options.parallel,\n pickleFilterOptions: {\n cwd: this.cwd,\n featurePaths: unexpandedFeaturePaths,\n names: this.options.name,\n tagExpression: this.options.tags,\n },\n predictableIds: this.options.predictableIds,\n profiles: this.options.profile,\n runtimeOptions: {\n dryRun: this.options.dryRun,\n predictableIds: this.options.predictableIds,\n failFast: this.options.failFast,\n filterStacktraces: !this.options.backtrace,\n retry: this.options.retry,\n retryTagFilter: this.options.retryTagFilter,\n strict: this.options.strict,\n worldParameters: this.options.worldParameters,\n },\n shouldExitImmediately: this.options.exit,\n supportCodePaths,\n supportCodeRequiredModules: this.options.requireModule,\n suppressPublishAdvertisement: this.isPublishAdvertisementSuppressed(),\n }\n }\n\n async expandPaths(\n unexpandedPaths: string[],\n defaultExtension: string\n ): Promise<string[]> {\n const expandedPaths = await bluebird.map(\n unexpandedPaths,\n async (unexpandedPath) => {\n const matches = await promisify(glob)(unexpandedPath, {\n absolute: true,\n cwd: this.cwd,\n })\n const expanded = await bluebird.map(matches, async (match) => {\n if (path.extname(match) === '') {\n return await promisify(glob)(`${match}/**/*${defaultExtension}`)\n }\n return [match]\n })\n return _.flatten(expanded)\n }\n )\n return _.flatten(expandedPaths).map((x) => path.normalize(x))\n }\n\n async expandFeaturePaths(featurePaths: string[]): Promise<string[]> {\n featurePaths = featurePaths.map((p) => p.replace(/(:\\d+)*$/g, '')) // Strip line numbers\n featurePaths = [...new Set(featurePaths)] // Deduplicate the feature files\n return this.expandPaths(featurePaths, '.feature')\n }\n\n getFeatureDirectoryPaths(featurePaths: string[]): string[] {\n const featureDirs = featurePaths.map((featurePath) => {\n let featureDir = path.dirname(featurePath)\n let childDir: string\n let parentDir = featureDir\n while (childDir !== parentDir) {\n childDir = parentDir\n parentDir = path.dirname(childDir)\n if (path.basename(parentDir) === 'features') {\n featureDir = parentDir\n break\n }\n }\n return path.relative(this.cwd, featureDir)\n })\n return _.uniq(featureDirs)\n }\n\n isPublishing(): boolean {\n return (\n this.options.publish ||\n this.isTruthyString(process.env.CUCUMBER_PUBLISH_ENABLED) ||\n process.env.CUCUMBER_PUBLISH_TOKEN !== undefined\n )\n }\n\n isPublishAdvertisementSuppressed(): boolean {\n return (\n this.options.publishQuiet ||\n this.isTruthyString(process.env.CUCUMBER_PUBLISH_QUIET)\n )\n }\n\n getFormats(): IConfigurationFormat[] {\n const mapping: { [key: string]: string } = { '': 'progress' }\n this.options.format.forEach((format) => {\n const [type, outputTo] = OptionSplitter.split(format)\n mapping[outputTo] = type\n })\n if (this.isPublishing()) {\n const publishUrl = valueOrDefault(\n process.env.CUCUMBER_PUBLISH_URL,\n DEFAULT_CUCUMBER_PUBLISH_URL\n )\n\n mapping[publishUrl] = 'message'\n }\n return _.map(mapping, (type, outputTo) => ({ outputTo, type }))\n }\n\n isTruthyString(s: string | undefined): boolean {\n if (s === undefined) {\n return false\n }\n return s.match(/^(false|no|0)$/i) === null\n }\n\n async getUnexpandedFeaturePaths(): Promise<string[]> {\n if (this.args.length > 0) {\n const nestedFeaturePaths = await bluebird.map(this.args, async (arg) => {\n const filename = path.basename(arg)\n if (filename[0] === '@') {\n const filePath = path.join(this.cwd, arg)\n const content = await fs.readFile(filePath, 'utf8')\n return _.chain(content).split('\\n').map(_.trim).value()\n }\n return [arg]\n })\n const featurePaths = _.flatten(nestedFeaturePaths)\n if (featurePaths.length > 0) {\n return _.compact(featurePaths)\n }\n }\n return ['features/**/*.{feature,feature.md}']\n }\n}\n"]}
|
package/lib/cli/helpers.js
CHANGED
|
@@ -1,4 +1,23 @@
|
|
|
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
|
+
};
|
|
2
21
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
22
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
23
|
};
|
|
@@ -8,20 +27,15 @@ const lodash_1 = __importDefault(require("lodash"));
|
|
|
8
27
|
const argv_parser_1 = __importDefault(require("./argv_parser"));
|
|
9
28
|
const profile_loader_1 = __importDefault(require("./profile_loader"));
|
|
10
29
|
const knuth_shuffle_seeded_1 = __importDefault(require("knuth-shuffle-seeded"));
|
|
11
|
-
const path_1 = __importDefault(require("path"));
|
|
12
30
|
const value_checker_1 = require("../value_checker");
|
|
13
31
|
const option_splitter_1 = __importDefault(require("./option_splitter"));
|
|
14
|
-
const
|
|
32
|
+
const messages = __importStar(require("@cucumber/messages"));
|
|
15
33
|
const create_meta_1 = __importDefault(require("@cucumber/create-meta"));
|
|
16
34
|
const support_code_library_builder_1 = require("../support_code_library_builder");
|
|
17
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
18
|
-
const importers = require('../importers');
|
|
19
|
-
const StepDefinitionPatternType = messages_1.messages.StepDefinition.StepDefinitionPattern.StepDefinitionPatternType;
|
|
20
35
|
async function getExpandedArgv({ argv, cwd, }) {
|
|
21
36
|
const { options } = argv_parser_1.default.parse(argv);
|
|
22
|
-
const importer = options.esm ? importers.esm : importers.legacy;
|
|
23
37
|
let fullArgv = argv;
|
|
24
|
-
const profileArgv = await new profile_loader_1.default(cwd
|
|
38
|
+
const profileArgv = await new profile_loader_1.default(cwd).getArgv(options.profile);
|
|
25
39
|
if (profileArgv.length > 0) {
|
|
26
40
|
fullArgv = lodash_1.default.concat(argv.slice(0, 2), profileArgv, argv.slice(2));
|
|
27
41
|
}
|
|
@@ -42,7 +56,7 @@ async function parseGherkinMessageStream({ cwd, eventBroadcaster, eventDataColle
|
|
|
42
56
|
}
|
|
43
57
|
}
|
|
44
58
|
if (value_checker_1.doesHaveValue(envelope.parseError)) {
|
|
45
|
-
reject(new Error(`Parse error in '${
|
|
59
|
+
reject(new Error(`Parse error in '${envelope.parseError.source.uri}': ${envelope.parseError.message}`));
|
|
46
60
|
}
|
|
47
61
|
});
|
|
48
62
|
gherkinMessageStream.on('end', () => {
|
|
@@ -74,9 +88,9 @@ exports.orderPickleIds = orderPickleIds;
|
|
|
74
88
|
async function emitMetaMessage(eventBroadcaster) {
|
|
75
89
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
76
90
|
const { version } = require('../../package.json');
|
|
77
|
-
eventBroadcaster.emit('envelope',
|
|
91
|
+
eventBroadcaster.emit('envelope', {
|
|
78
92
|
meta: create_meta_1.default('cucumber-js', version, process.env),
|
|
79
|
-
})
|
|
93
|
+
});
|
|
80
94
|
}
|
|
81
95
|
exports.emitMetaMessage = emitMetaMessage;
|
|
82
96
|
function emitParameterTypes(supportCodeLibrary, eventBroadcaster, newId) {
|
|
@@ -85,7 +99,7 @@ function emitParameterTypes(supportCodeLibrary, eventBroadcaster, newId) {
|
|
|
85
99
|
if (support_code_library_builder_1.builtinParameterTypes.includes(parameterType.name)) {
|
|
86
100
|
continue;
|
|
87
101
|
}
|
|
88
|
-
|
|
102
|
+
const envelope = {
|
|
89
103
|
parameterType: {
|
|
90
104
|
id: newId(),
|
|
91
105
|
name: parameterType.name,
|
|
@@ -93,26 +107,28 @@ function emitParameterTypes(supportCodeLibrary, eventBroadcaster, newId) {
|
|
|
93
107
|
regularExpressions: parameterType.regexpStrings,
|
|
94
108
|
useForSnippets: parameterType.useForSnippets,
|
|
95
109
|
},
|
|
96
|
-
}
|
|
110
|
+
};
|
|
111
|
+
eventBroadcaster.emit('envelope', envelope);
|
|
97
112
|
}
|
|
98
113
|
}
|
|
99
114
|
function emitUndefinedParameterTypes(supportCodeLibrary, eventBroadcaster) {
|
|
100
115
|
for (const undefinedParameterType of supportCodeLibrary.undefinedParameterTypes) {
|
|
101
|
-
|
|
116
|
+
const envelope = {
|
|
102
117
|
undefinedParameterType,
|
|
103
|
-
}
|
|
118
|
+
};
|
|
119
|
+
eventBroadcaster.emit('envelope', envelope);
|
|
104
120
|
}
|
|
105
121
|
}
|
|
106
122
|
function emitStepDefinitions(supportCodeLibrary, eventBroadcaster) {
|
|
107
123
|
supportCodeLibrary.stepDefinitions.forEach((stepDefinition) => {
|
|
108
|
-
|
|
124
|
+
const envelope = {
|
|
109
125
|
stepDefinition: {
|
|
110
126
|
id: stepDefinition.id,
|
|
111
127
|
pattern: {
|
|
112
128
|
source: stepDefinition.pattern.toString(),
|
|
113
129
|
type: typeof stepDefinition.pattern === 'string'
|
|
114
|
-
? StepDefinitionPatternType.CUCUMBER_EXPRESSION
|
|
115
|
-
: StepDefinitionPatternType.REGULAR_EXPRESSION,
|
|
130
|
+
? messages.StepDefinitionPatternType.CUCUMBER_EXPRESSION
|
|
131
|
+
: messages.StepDefinitionPatternType.REGULAR_EXPRESSION,
|
|
116
132
|
},
|
|
117
133
|
sourceReference: {
|
|
118
134
|
uri: stepDefinition.uri,
|
|
@@ -121,7 +137,8 @@ function emitStepDefinitions(supportCodeLibrary, eventBroadcaster) {
|
|
|
121
137
|
},
|
|
122
138
|
},
|
|
123
139
|
},
|
|
124
|
-
}
|
|
140
|
+
};
|
|
141
|
+
eventBroadcaster.emit('envelope', envelope);
|
|
125
142
|
});
|
|
126
143
|
}
|
|
127
144
|
function emitTestCaseHooks(supportCodeLibrary, eventBroadcaster) {
|
|
@@ -129,7 +146,7 @@ function emitTestCaseHooks(supportCodeLibrary, eventBroadcaster) {
|
|
|
129
146
|
[]
|
|
130
147
|
.concat(supportCodeLibrary.beforeTestCaseHookDefinitions, supportCodeLibrary.afterTestCaseHookDefinitions)
|
|
131
148
|
.forEach((testCaseHookDefinition) => {
|
|
132
|
-
|
|
149
|
+
const envelope = {
|
|
133
150
|
hook: {
|
|
134
151
|
id: testCaseHookDefinition.id,
|
|
135
152
|
tagExpression: testCaseHookDefinition.tagExpression,
|
|
@@ -140,7 +157,8 @@ function emitTestCaseHooks(supportCodeLibrary, eventBroadcaster) {
|
|
|
140
157
|
},
|
|
141
158
|
},
|
|
142
159
|
},
|
|
143
|
-
}
|
|
160
|
+
};
|
|
161
|
+
eventBroadcaster.emit('envelope', envelope);
|
|
144
162
|
});
|
|
145
163
|
}
|
|
146
164
|
function emitTestRunHooks(supportCodeLibrary, eventBroadcaster) {
|
|
@@ -148,7 +166,7 @@ function emitTestRunHooks(supportCodeLibrary, eventBroadcaster) {
|
|
|
148
166
|
[]
|
|
149
167
|
.concat(supportCodeLibrary.beforeTestRunHookDefinitions, supportCodeLibrary.afterTestRunHookDefinitions)
|
|
150
168
|
.forEach((testRunHookDefinition) => {
|
|
151
|
-
|
|
169
|
+
const envelope = {
|
|
152
170
|
hook: {
|
|
153
171
|
id: testRunHookDefinition.id,
|
|
154
172
|
sourceReference: {
|
|
@@ -158,7 +176,8 @@ function emitTestRunHooks(supportCodeLibrary, eventBroadcaster) {
|
|
|
158
176
|
},
|
|
159
177
|
},
|
|
160
178
|
},
|
|
161
|
-
}
|
|
179
|
+
};
|
|
180
|
+
eventBroadcaster.emit('envelope', envelope);
|
|
162
181
|
});
|
|
163
182
|
}
|
|
164
183
|
function emitSupportCodeMessages({ eventBroadcaster, supportCodeLibrary, newId, }) {
|
package/lib/cli/helpers.js.map
CHANGED
|
@@ -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 path from 'path'\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, 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\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst importers = require('../importers')\n\nconst StepDefinitionPatternType =\n messages.StepDefinition.StepDefinitionPattern.StepDefinitionPatternType\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 const importer = options.esm ? importers.esm : importers.legacy\n let fullArgv = argv\n const profileArgv = await new ProfileLoader(cwd, importer).getArgv(\n options.profile\n )\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.IEnvelope) => {\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 '${path.relative(\n cwd,\n envelope.parseError.source.uri\n )}': ${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(\n 'envelope',\n new messages.Envelope({\n meta: createMeta('cucumber-js', version, process.env),\n })\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 eventBroadcaster.emit(\n 'envelope',\n messages.Envelope.fromObject({\n parameterType: {\n id: newId(),\n name: parameterType.name,\n preferForRegularExpressionMatch: parameterType.preferForRegexpMatch,\n regularExpressions: parameterType.regexpStrings,\n useForSnippets: parameterType.useForSnippets,\n },\n })\n )\n }\n}\n\nfunction emitUndefinedParameterTypes(\n supportCodeLibrary: ISupportCodeLibrary,\n eventBroadcaster: EventEmitter\n): void {\n for (const undefinedParameterType of supportCodeLibrary.undefinedParameterTypes) {\n eventBroadcaster.emit(\n 'envelope',\n messages.Envelope.fromObject({\n undefinedParameterType,\n })\n )\n }\n}\n\nfunction emitStepDefinitions(\n supportCodeLibrary: ISupportCodeLibrary,\n eventBroadcaster: EventEmitter\n): void {\n supportCodeLibrary.stepDefinitions.forEach((stepDefinition) => {\n eventBroadcaster.emit(\n 'envelope',\n messages.Envelope.fromObject({\n stepDefinition: {\n id: stepDefinition.id,\n pattern: {\n source: stepDefinition.pattern.toString(),\n type:\n typeof stepDefinition.pattern === 'string'\n ? StepDefinitionPatternType.CUCUMBER_EXPRESSION\n : StepDefinitionPatternType.REGULAR_EXPRESSION,\n },\n sourceReference: {\n uri: stepDefinition.uri,\n location: {\n line: stepDefinition.line,\n },\n },\n },\n })\n )\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 eventBroadcaster.emit(\n 'envelope',\n messages.Envelope.fromObject({\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 )\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 eventBroadcaster.emit(\n 'envelope',\n messages.Envelope.fromObject({\n hook: {\n id: testRunHookDefinition.id,\n sourceReference: {\n uri: testRunHookDefinition.uri,\n location: {\n line: testRunHookDefinition.line,\n },\n },\n },\n })\n )\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 _ 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"]}
|
package/lib/cli/index.d.ts
CHANGED
|
@@ -22,12 +22,10 @@ interface IGetSupportCodeLibraryRequest {
|
|
|
22
22
|
supportCodeRequiredModules: string[];
|
|
23
23
|
supportCodePaths: string[];
|
|
24
24
|
}
|
|
25
|
-
export declare type IUserCodeImporter = (path: string, isFilePath?: boolean) => Promise<any>;
|
|
26
25
|
export default class Cli {
|
|
27
26
|
private readonly argv;
|
|
28
27
|
private readonly cwd;
|
|
29
28
|
private readonly stdout;
|
|
30
|
-
private importer;
|
|
31
29
|
constructor({ argv, cwd, stdout, }: {
|
|
32
30
|
argv: string[];
|
|
33
31
|
cwd: string;
|
|
@@ -35,7 +33,7 @@ export default class Cli {
|
|
|
35
33
|
});
|
|
36
34
|
getConfiguration(): Promise<IConfiguration>;
|
|
37
35
|
initializeFormatters({ eventBroadcaster, eventDataCollector, formatOptions, formats, supportCodeLibrary, }: IInitializeFormattersRequest): Promise<() => Promise<void>>;
|
|
38
|
-
getSupportCodeLibrary({ newId, supportCodeRequiredModules, supportCodePaths, }: IGetSupportCodeLibraryRequest):
|
|
36
|
+
getSupportCodeLibrary({ newId, supportCodeRequiredModules, supportCodePaths, }: IGetSupportCodeLibraryRequest): ISupportCodeLibrary;
|
|
39
37
|
run(): Promise<ICliRunResult>;
|
|
40
38
|
}
|
|
41
39
|
export {};
|
package/lib/cli/index.js
CHANGED
|
@@ -41,12 +41,9 @@ const value_checker_1 = require("../value_checker");
|
|
|
41
41
|
const gherkin_streams_1 = require("@cucumber/gherkin-streams");
|
|
42
42
|
const http_stream_1 = __importDefault(require("../formatter/http_stream"));
|
|
43
43
|
const stream_1 = require("stream");
|
|
44
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
45
|
-
const importers = require('../importers');
|
|
46
44
|
const { incrementing, uuid } = messages_1.IdGenerator;
|
|
47
45
|
class Cli {
|
|
48
46
|
constructor({ argv, cwd, stdout, }) {
|
|
49
|
-
this.importer = importers.legacy;
|
|
50
47
|
this.argv = argv;
|
|
51
48
|
this.cwd = cwd;
|
|
52
49
|
this.stdout = stdout;
|
|
@@ -95,7 +92,6 @@ class Cli {
|
|
|
95
92
|
eventDataCollector,
|
|
96
93
|
log: stream.write.bind(stream),
|
|
97
94
|
parsedArgvOptions: formatOptions,
|
|
98
|
-
importer: this.importer,
|
|
99
95
|
stream,
|
|
100
96
|
cleanup: stream === this.stdout
|
|
101
97
|
? async () => await Promise.resolve()
|
|
@@ -110,7 +106,7 @@ class Cli {
|
|
|
110
106
|
console.warn(`Cannot use 'progress-bar' formatter for output to '${outputToName}' as not a TTY. Switching to 'progress' formatter.`);
|
|
111
107
|
type = 'progress';
|
|
112
108
|
}
|
|
113
|
-
return
|
|
109
|
+
return builder_1.default.build(type, typeOptions);
|
|
114
110
|
});
|
|
115
111
|
return async function () {
|
|
116
112
|
await bluebird_1.default.each(formatters, async (formatter) => {
|
|
@@ -118,14 +114,18 @@ class Cli {
|
|
|
118
114
|
});
|
|
119
115
|
};
|
|
120
116
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
await this.importer(requiredModule);
|
|
124
|
-
}
|
|
117
|
+
getSupportCodeLibrary({ newId, supportCodeRequiredModules, supportCodePaths, }) {
|
|
118
|
+
supportCodeRequiredModules.map((module) => require(module));
|
|
125
119
|
support_code_library_builder_1.default.reset(this.cwd, newId);
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
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
129
|
return support_code_library_builder_1.default.finalize();
|
|
130
130
|
}
|
|
131
131
|
async run() {
|
|
@@ -142,10 +142,7 @@ class Cli {
|
|
|
142
142
|
const newId = configuration.predictableIds && configuration.parallel <= 1
|
|
143
143
|
? incrementing()
|
|
144
144
|
: uuid();
|
|
145
|
-
|
|
146
|
-
this.importer = importers.esm;
|
|
147
|
-
}
|
|
148
|
-
const supportCodeLibrary = await this.getSupportCodeLibrary({
|
|
145
|
+
const supportCodeLibrary = this.getSupportCodeLibrary({
|
|
149
146
|
newId,
|
|
150
147
|
supportCodePaths: configuration.supportCodePaths,
|
|
151
148
|
supportCodeRequiredModules: configuration.supportCodeRequiredModules,
|
|
@@ -163,15 +160,19 @@ class Cli {
|
|
|
163
160
|
const gherkinMessageStream = gherkin_streams_1.GherkinStreams.fromPaths(configuration.featurePaths, {
|
|
164
161
|
defaultDialect: configuration.featureDefaultLanguage,
|
|
165
162
|
newId,
|
|
163
|
+
relativeTo: this.cwd,
|
|
166
164
|
});
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
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
|
+
}
|
|
175
176
|
helpers_2.emitSupportCodeMessages({
|
|
176
177
|
eventBroadcaster,
|
|
177
178
|
supportCodeLibrary,
|
|
@@ -184,17 +185,13 @@ class Cli {
|
|
|
184
185
|
eventBroadcaster,
|
|
185
186
|
eventDataCollector,
|
|
186
187
|
options: configuration.runtimeOptions,
|
|
188
|
+
newId,
|
|
187
189
|
pickleIds,
|
|
188
190
|
supportCodeLibrary,
|
|
189
191
|
supportCodePaths: configuration.supportCodePaths,
|
|
190
192
|
supportCodeRequiredModules: configuration.supportCodeRequiredModules,
|
|
191
193
|
});
|
|
192
|
-
await
|
|
193
|
-
parallelRuntimeCoordinator.run(configuration.parallel, (s) => {
|
|
194
|
-
success = s;
|
|
195
|
-
resolve();
|
|
196
|
-
});
|
|
197
|
-
});
|
|
194
|
+
success = await parallelRuntimeCoordinator.run(configuration.parallel);
|
|
198
195
|
}
|
|
199
196
|
else {
|
|
200
197
|
const runtime = new runtime_1.default({
|
package/lib/cli/index.js.map
CHANGED
|
@@ -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\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst importers = require('../importers')\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 type IUserCodeImporter = (\n path: string,\n isFilePath?: boolean\n) => Promise<any>\n\nexport default class Cli {\n private readonly argv: string[]\n private readonly cwd: string\n private readonly stdout: IFormatterStream\n private importer: IUserCodeImporter = importers.legacy\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 importer: this.importer,\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 = (stream as TtyWriteStream).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 await 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 async getSupportCodeLibrary({\n newId,\n supportCodeRequiredModules,\n supportCodePaths,\n }: IGetSupportCodeLibraryRequest): Promise<ISupportCodeLibrary> {\n for (const requiredModule of supportCodeRequiredModules) {\n await this.importer(requiredModule)\n }\n supportCodeLibraryBuilder.reset(this.cwd, newId)\n for (const codePath of supportCodePaths) {\n await this.importer(codePath, true)\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 if (configuration.esm) {\n this.importer = importers.esm\n }\n const supportCodeLibrary = await 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 }\n )\n const 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 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 pickleIds,\n supportCodeLibrary,\n supportCodePaths: configuration.supportCodePaths,\n supportCodeRequiredModules: configuration.supportCodeRequiredModules,\n })\n await new Promise<void>((resolve) => {\n parallelRuntimeCoordinator.run(configuration.parallel, (s) => {\n success = s\n resolve()\n })\n })\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":"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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"]}
|