@cucumber/cucumber 12.3.0 → 12.5.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 (52) hide show
  1. package/README.md +2 -0
  2. package/lib/api/convert_configuration.js +4 -0
  3. package/lib/api/convert_configuration.js.map +1 -1
  4. package/lib/api/index.d.ts +4 -2
  5. package/lib/api/index.js.map +1 -1
  6. package/lib/api/plugins.d.ts +1 -1
  7. package/lib/api/plugins.js +51 -2
  8. package/lib/api/plugins.js.map +1 -1
  9. package/lib/api/types.d.ts +25 -0
  10. package/lib/api/types.js.map +1 -1
  11. package/lib/configuration/argv_parser.d.ts +2 -0
  12. package/lib/configuration/argv_parser.js +2 -0
  13. package/lib/configuration/argv_parser.js.map +1 -1
  14. package/lib/configuration/default_configuration.js +2 -0
  15. package/lib/configuration/default_configuration.js.map +1 -1
  16. package/lib/configuration/from_file.js +66 -37
  17. package/lib/configuration/from_file.js.map +1 -1
  18. package/lib/configuration/types.d.ts +20 -0
  19. package/lib/configuration/types.js.map +1 -1
  20. package/lib/environment/console_logger.d.ts +1 -0
  21. package/lib/environment/console_logger.js +3 -0
  22. package/lib/environment/console_logger.js.map +1 -1
  23. package/lib/environment/types.d.ts +7 -0
  24. package/lib/environment/types.js.map +1 -1
  25. package/lib/filter/filter_plugin.d.ts +2 -3
  26. package/lib/filter/filter_plugin.js +3 -3
  27. package/lib/filter/filter_plugin.js.map +1 -1
  28. package/lib/filter/types.d.ts +4 -0
  29. package/lib/filter/types.js.map +1 -1
  30. package/lib/formatter/helpers/event_data_collector.js +0 -1
  31. package/lib/formatter/helpers/event_data_collector.js.map +1 -1
  32. package/lib/paths/types.d.ts +7 -0
  33. package/lib/paths/types.js.map +1 -1
  34. package/lib/plugin/plugin_manager.d.ts +9 -7
  35. package/lib/plugin/plugin_manager.js +67 -16
  36. package/lib/plugin/plugin_manager.js.map +1 -1
  37. package/lib/plugin/types.d.ts +120 -32
  38. package/lib/plugin/types.js.map +1 -1
  39. package/lib/publish/publish_plugin.d.ts +2 -3
  40. package/lib/publish/publish_plugin.js +18 -12
  41. package/lib/publish/publish_plugin.js.map +1 -1
  42. package/lib/sharding/sharding_plugin.d.ts +2 -3
  43. package/lib/sharding/sharding_plugin.js +2 -2
  44. package/lib/sharding/sharding_plugin.js.map +1 -1
  45. package/lib/tsconfig.node.tsbuildinfo +1 -1
  46. package/lib/version.d.ts +1 -1
  47. package/lib/version.js +1 -1
  48. package/lib/version.js.map +1 -1
  49. package/package.json +8 -8
  50. package/lib/plugin/events.d.ts +0 -2
  51. package/lib/plugin/events.js +0 -9
  52. package/lib/plugin/events.js.map +0 -1
@@ -4,11 +4,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.publishPlugin = void 0;
7
+ const promises_1 = require("node:stream/promises");
7
8
  const node_util_1 = require("node:util");
8
- const promises_1 = require("node:fs/promises");
9
+ const promises_2 = require("node:fs/promises");
9
10
  const node_path_1 = __importDefault(require("node:path"));
10
11
  const node_os_1 = require("node:os");
11
12
  const node_fs_1 = require("node:fs");
13
+ const node_zlib_1 = require("node:zlib");
12
14
  const supports_color_1 = require("supports-color");
13
15
  const has_ansi_1 = __importDefault(require("has-ansi"));
14
16
  const DEFAULT_CUCUMBER_PUBLISH_URL = 'https://messages.cucumber.io/api/reports';
@@ -37,22 +39,26 @@ exports.publishPlugin = {
37
39
  };
38
40
  }
39
41
  const uploadUrl = touchResponse.headers.get('Location');
40
- const tempDir = await (0, promises_1.mkdtemp)(node_path_1.default.join((0, node_os_1.tmpdir)(), `cucumber-js-publish-`));
41
- const tempFilePath = node_path_1.default.join(tempDir, 'envelopes.ndjson');
42
- const tempFileStream = (0, node_fs_1.createWriteStream)(tempFilePath, {
43
- encoding: 'utf-8',
44
- });
45
- on('message', (value) => tempFileStream.write(JSON.stringify(value) + '\n'));
42
+ const tempDir = await (0, promises_2.mkdtemp)(node_path_1.default.join((0, node_os_1.tmpdir)(), `cucumber-js-publish-`));
43
+ const tempFilePath = node_path_1.default.join(tempDir, 'envelopes.jsonl.gz');
44
+ const writeStream = (0, node_zlib_1.createGzip)();
45
+ const finishedWriting = (0, promises_1.pipeline)(writeStream, (0, node_fs_1.createWriteStream)(tempFilePath));
46
+ on('message', (value) => writeStream.write(JSON.stringify(value) + '\n'));
46
47
  return () => {
47
48
  return new Promise((resolve) => {
48
- tempFileStream.end(async () => {
49
- const stats = await (0, promises_1.stat)(tempFilePath);
49
+ writeStream.end(async () => {
50
+ await finishedWriting;
51
+ const stats = await (0, promises_2.stat)(tempFilePath);
52
+ const contentLength = stats.size.toString();
53
+ logger.debug('Uploading envelopes to Cucumber Reports with content length:', contentLength);
50
54
  const uploadResponse = await fetch(uploadUrl, {
51
55
  method: 'PUT',
52
56
  headers: {
53
- 'Content-Length': stats.size.toString(),
57
+ 'Content-Type': 'application/jsonl',
58
+ 'Content-Encoding': 'gzip',
59
+ 'Content-Length': contentLength,
54
60
  },
55
- body: (0, node_fs_1.createReadStream)(tempFilePath, { encoding: 'utf-8' }),
61
+ body: (0, node_fs_1.createReadStream)(tempFilePath),
56
62
  duplex: 'half',
57
63
  });
58
64
  if (uploadResponse.ok) {
@@ -60,7 +66,7 @@ exports.publishPlugin = {
60
66
  }
61
67
  else {
62
68
  logger.error(`Failed to upload report to ${new URL(uploadUrl).origin} with status ${uploadResponse.status}`);
63
- logger.debug(uploadResponse);
69
+ logger.debug(await uploadResponse.text());
64
70
  }
65
71
  resolve();
66
72
  });
@@ -1 +1 @@
1
- {"version":3,"file":"publish_plugin.js","sourceRoot":"","sources":["../../src/publish/publish_plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import { Writable } from 'node:stream'\nimport { stripVTControlCharacters } from 'node:util'\nimport { mkdtemp, stat } from 'node:fs/promises'\nimport path from 'node:path'\nimport { tmpdir } from 'node:os'\nimport { createReadStream, createWriteStream } from 'node:fs'\nimport { supportsColor } from 'supports-color'\nimport hasAnsi from 'has-ansi'\nimport { InternalPlugin } from '../plugin'\nimport { IPublishConfig } from './types'\n\nconst DEFAULT_CUCUMBER_PUBLISH_URL = 'https://messages.cucumber.io/api/reports'\n\nexport const publishPlugin: InternalPlugin<IPublishConfig | false> = {\n type: 'plugin',\n coordinator: async ({ on, logger, options, environment }) => {\n if (!options) {\n return undefined\n }\n const { url = DEFAULT_CUCUMBER_PUBLISH_URL, token } = options\n const headers: { [key: string]: string } = {}\n if (token !== undefined) {\n headers.Authorization = `Bearer ${token}`\n }\n const touchResponse = await fetch(url, { headers })\n const banner = await touchResponse.text()\n\n if (!touchResponse.ok) {\n return () => {\n if (touchResponse.status < 500) {\n environment.stderr.write(\n sanitisePublishOutput(banner, environment.stderr) + '\\n'\n )\n } else {\n logger.error(\n `Failed to publish report to ${new URL(url).origin} with status ${\n touchResponse.status\n }`\n )\n logger.debug(touchResponse)\n }\n }\n }\n\n const uploadUrl = touchResponse.headers.get('Location')\n const tempDir = await mkdtemp(path.join(tmpdir(), `cucumber-js-publish-`))\n const tempFilePath = path.join(tempDir, 'envelopes.ndjson')\n const tempFileStream = createWriteStream(tempFilePath, {\n encoding: 'utf-8',\n })\n on('message', (value) => tempFileStream.write(JSON.stringify(value) + '\\n'))\n\n return () => {\n return new Promise<void>((resolve) => {\n tempFileStream.end(async () => {\n const stats = await stat(tempFilePath)\n const uploadResponse = await fetch(uploadUrl, {\n method: 'PUT',\n headers: {\n 'Content-Length': stats.size.toString(),\n },\n body: createReadStream(tempFilePath, { encoding: 'utf-8' }),\n duplex: 'half',\n })\n if (uploadResponse.ok) {\n environment.stderr.write(\n sanitisePublishOutput(banner, environment.stderr) + '\\n'\n )\n } else {\n logger.error(\n `Failed to upload report to ${\n new URL(uploadUrl).origin\n } with status ${uploadResponse.status}`\n )\n logger.debug(uploadResponse)\n }\n resolve()\n })\n })\n }\n },\n}\n\n/*\nThis is because the Cucumber Reports service returns a pre-formatted console message\nincluding ANSI escapes, so if our stderr stream doesn't support those we need to\nstrip them back out. Ideally we should get structured data from the service and\ncompose the console message on this end.\n */\nfunction sanitisePublishOutput(raw: string, stderr: Writable) {\n if (!supportsColor(stderr) && hasAnsi(raw)) {\n return stripVTControlCharacters(raw)\n }\n return raw\n}\n"]}
1
+ {"version":3,"file":"publish_plugin.js","sourceRoot":"","sources":["../../src/publish/publish_plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import { Writable } from 'node:stream'\nimport { pipeline } from 'node:stream/promises'\nimport { stripVTControlCharacters } from 'node:util'\nimport { mkdtemp, stat } from 'node:fs/promises'\nimport path from 'node:path'\nimport { tmpdir } from 'node:os'\nimport { createReadStream, createWriteStream } from 'node:fs'\nimport { createGzip } from 'node:zlib'\nimport { supportsColor } from 'supports-color'\nimport hasAnsi from 'has-ansi'\nimport { Plugin } from '../plugin'\n\nconst DEFAULT_CUCUMBER_PUBLISH_URL = 'https://messages.cucumber.io/api/reports'\n\nexport const publishPlugin: Plugin = {\n type: 'plugin',\n coordinator: async ({ on, logger, options, environment }) => {\n if (!options) {\n return undefined\n }\n const { url = DEFAULT_CUCUMBER_PUBLISH_URL, token } = options\n const headers: { [key: string]: string } = {}\n if (token !== undefined) {\n headers.Authorization = `Bearer ${token}`\n }\n const touchResponse = await fetch(url, { headers })\n const banner = await touchResponse.text()\n\n if (!touchResponse.ok) {\n return () => {\n if (touchResponse.status < 500) {\n environment.stderr.write(\n sanitisePublishOutput(banner, environment.stderr) + '\\n'\n )\n } else {\n logger.error(\n `Failed to publish report to ${new URL(url).origin} with status ${\n touchResponse.status\n }`\n )\n logger.debug(touchResponse)\n }\n }\n }\n\n const uploadUrl = touchResponse.headers.get('Location')\n const tempDir = await mkdtemp(path.join(tmpdir(), `cucumber-js-publish-`))\n const tempFilePath = path.join(tempDir, 'envelopes.jsonl.gz')\n const writeStream = createGzip()\n const finishedWriting = pipeline(\n writeStream,\n createWriteStream(tempFilePath)\n )\n on('message', (value) => writeStream.write(JSON.stringify(value) + '\\n'))\n\n return () => {\n return new Promise<void>((resolve) => {\n writeStream.end(async () => {\n await finishedWriting\n const stats = await stat(tempFilePath)\n const contentLength = stats.size.toString()\n logger.debug(\n 'Uploading envelopes to Cucumber Reports with content length:',\n contentLength\n )\n const uploadResponse = await fetch(uploadUrl, {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/jsonl',\n 'Content-Encoding': 'gzip',\n 'Content-Length': contentLength,\n },\n body: createReadStream(tempFilePath),\n duplex: 'half',\n })\n if (uploadResponse.ok) {\n environment.stderr.write(\n sanitisePublishOutput(banner, environment.stderr) + '\\n'\n )\n } else {\n logger.error(\n `Failed to upload report to ${\n new URL(uploadUrl).origin\n } with status ${uploadResponse.status}`\n )\n logger.debug(await uploadResponse.text())\n }\n resolve()\n })\n })\n }\n },\n}\n\n/*\nThis is because the Cucumber Reports service returns a pre-formatted console message\nincluding ANSI escapes, so if our stderr stream doesn't support those we need to\nstrip them back out. Ideally we should get structured data from the service and\ncompose the console message on this end.\n */\nfunction sanitisePublishOutput(raw: string, stderr: Writable) {\n if (!supportsColor(stderr) && hasAnsi(raw)) {\n return stripVTControlCharacters(raw)\n }\n return raw\n}\n"]}
@@ -1,3 +1,2 @@
1
- import { InternalPlugin } from '../plugin';
2
- import { ISourcesCoordinates } from '../api';
3
- export declare const shardingPlugin: InternalPlugin<ISourcesCoordinates>;
1
+ import { Plugin } from '../plugin';
2
+ export declare const shardingPlugin: Plugin;
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.shardingPlugin = void 0;
4
4
  exports.shardingPlugin = {
5
5
  type: 'plugin',
6
- coordinator: async ({ on, options }) => {
7
- on('pickles:filter', async (allPickles) => {
6
+ coordinator: async ({ transform, options }) => {
7
+ transform('pickles:filter', async (allPickles) => {
8
8
  if (!options.shard) {
9
9
  return allPickles;
10
10
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sharding_plugin.js","sourceRoot":"","sources":["../../src/sharding/sharding_plugin.ts"],"names":[],"mappings":";;;AAGa,QAAA,cAAc,GAAwC;IACjE,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACrC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;YACxC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACnB,OAAO,UAAU,CAAA;YACnB,CAAC;YAED,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAC/D,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,GAAG,CAAC,CAAA;YAClD,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;YAE9C,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,UAAU,KAAK,UAAU,CAAC,CAAA;QACnE,CAAC,CAAC,CAAA;IACJ,CAAC;CACF,CAAA","sourcesContent":["import { InternalPlugin } from '../plugin'\nimport { ISourcesCoordinates } from '../api'\n\nexport const shardingPlugin: InternalPlugin<ISourcesCoordinates> = {\n type: 'plugin',\n coordinator: async ({ on, options }) => {\n on('pickles:filter', async (allPickles) => {\n if (!options.shard) {\n return allPickles\n }\n\n const [shardIndexStr, shardTotalStr] = options.shard.split('/')\n const shardIndex = parseInt(shardIndexStr, 10) - 1\n const shardTotal = parseInt(shardTotalStr, 10)\n\n return allPickles.filter((_, i) => i % shardTotal === shardIndex)\n })\n },\n}\n"]}
1
+ {"version":3,"file":"sharding_plugin.js","sourceRoot":"","sources":["../../src/sharding/sharding_plugin.ts"],"names":[],"mappings":";;;AAEa,QAAA,cAAc,GAAW;IACpC,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE;QAC5C,SAAS,CAAC,gBAAgB,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;YAC/C,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACnB,OAAO,UAAU,CAAA;YACnB,CAAC;YAED,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAC/D,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,GAAG,CAAC,CAAA;YAClD,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;YAE9C,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,UAAU,KAAK,UAAU,CAAC,CAAA;QACnE,CAAC,CAAC,CAAA;IACJ,CAAC;CACF,CAAA","sourcesContent":["import { Plugin } from '../plugin'\n\nexport const shardingPlugin: Plugin = {\n type: 'plugin',\n coordinator: async ({ transform, options }) => {\n transform('pickles:filter', async (allPickles) => {\n if (!options.shard) {\n return allPickles\n }\n\n const [shardIndexStr, shardTotalStr] = options.shard.split('/')\n const shardIndex = parseInt(shardIndexStr, 10) - 1\n const shardTotal = parseInt(shardTotalStr, 10)\n\n return allPickles.filter((_, i) => i % shardTotal === shardIndex)\n })\n },\n}\n"]}
@@ -1 +1 @@
1
- {"root":["../src/filter_stack_trace.ts","../src/index.ts","../src/pickle_filter.ts","../src/step_arguments.ts","../src/time.ts","../src/try_require.ts","../src/uncaught_exception_manager.ts","../src/user_code_runner.ts","../src/value_checker.ts","../src/version.ts","../src/api/convert_configuration.ts","../src/api/formatters.ts","../src/api/gherkin.ts","../src/api/index.ts","../src/api/load_configuration.ts","../src/api/load_sources.ts","../src/api/load_support.ts","../src/api/plugins.ts","../src/api/run_cucumber.ts","../src/api/support.ts","../src/api/test_helpers.ts","../src/api/types.ts","../src/assemble/assemble_test_cases.ts","../src/assemble/index.ts","../src/assemble/types.ts","../src/cli/helpers.ts","../src/cli/i18n.ts","../src/cli/index.ts","../src/cli/install_validator.ts","../src/cli/run.ts","../src/cli/validate_node_engine_version.ts","../src/configuration/argv_parser.ts","../src/configuration/check_schema.ts","../src/configuration/default_configuration.ts","../src/configuration/from_file.ts","../src/configuration/helpers.ts","../src/configuration/index.ts","../src/configuration/locate_file.ts","../src/configuration/merge_configurations.ts","../src/configuration/parse_configuration.ts","../src/configuration/split_format_descriptor.ts","../src/configuration/types.ts","../src/configuration/validate_configuration.ts","../src/environment/console_logger.ts","../src/environment/index.ts","../src/environment/make_environment.ts","../src/environment/types.ts","../src/filter/filter_plugin.ts","../src/filter/index.ts","../src/filter/types.ts","../src/formatter/builder.ts","../src/formatter/create_stream.ts","../src/formatter/find_class_or_plugin.ts","../src/formatter/get_color_fns.ts","../src/formatter/import_code.ts","../src/formatter/index.ts","../src/formatter/json_formatter.ts","../src/formatter/progress_bar_formatter.ts","../src/formatter/progress_formatter.ts","../src/formatter/rerun_formatter.ts","../src/formatter/resolve_implementation.ts","../src/formatter/snippets_formatter.ts","../src/formatter/summary_formatter.ts","../src/formatter/usage_formatter.ts","../src/formatter/usage_json_formatter.ts","../src/formatter/builtin/html.ts","../src/formatter/builtin/index.ts","../src/formatter/builtin/message.ts","../src/formatter/helpers/duration_helpers.ts","../src/formatter/helpers/event_data_collector.ts","../src/formatter/helpers/formatters.ts","../src/formatter/helpers/gherkin_document_parser.ts","../src/formatter/helpers/index.ts","../src/formatter/helpers/issue_helpers.ts","../src/formatter/helpers/keyword_type.ts","../src/formatter/helpers/location_helpers.ts","../src/formatter/helpers/pickle_parser.ts","../src/formatter/helpers/step_argument_formatter.ts","../src/formatter/helpers/summary_helpers.ts","../src/formatter/helpers/test_case_attempt_formatter.ts","../src/formatter/helpers/test_case_attempt_parser.ts","../src/formatter/helpers/usage_helpers/index.ts","../src/formatter/step_definition_snippet_builder/index.ts","../src/formatter/step_definition_snippet_builder/javascript_snippet_syntax.ts","../src/formatter/step_definition_snippet_builder/snippet_syntax.ts","../src/models/data_table.ts","../src/models/definition.ts","../src/models/gherkin_step_keyword.ts","../src/models/step_definition.ts","../src/models/test_case_hook_definition.ts","../src/models/test_run_hook_definition.ts","../src/models/test_step_hook_definition.ts","../src/paths/index.ts","../src/paths/paths.ts","../src/paths/types.ts","../src/plugin/events.ts","../src/plugin/index.ts","../src/plugin/plugin_manager.ts","../src/plugin/types.ts","../src/publish/index.ts","../src/publish/publish_plugin.ts","../src/publish/types.ts","../src/runtime/coordinator.ts","../src/runtime/format_error.ts","../src/runtime/helpers.ts","../src/runtime/index.ts","../src/runtime/make_runtime.ts","../src/runtime/make_suggestion.ts","../src/runtime/step_runner.ts","../src/runtime/stopwatch.ts","../src/runtime/test_case_runner.ts","../src/runtime/types.ts","../src/runtime/worker.ts","../src/runtime/attachment_manager/index.ts","../src/runtime/parallel/adapter.ts","../src/runtime/parallel/run_worker.ts","../src/runtime/parallel/types.ts","../src/runtime/parallel/worker.ts","../src/runtime/scope/index.ts","../src/runtime/scope/make_proxy.ts","../src/runtime/scope/test_case_scope.ts","../src/runtime/scope/test_run_scope.ts","../src/runtime/serial/adapter.ts","../src/sharding/index.ts","../src/sharding/sharding_plugin.ts","../src/support_code_library_builder/build_parameter_type.ts","../src/support_code_library_builder/context.ts","../src/support_code_library_builder/get_definition_line_and_uri.ts","../src/support_code_library_builder/index.ts","../src/support_code_library_builder/parallel_can_assign_helpers.ts","../src/support_code_library_builder/sourced_parameter_type_registry.ts","../src/support_code_library_builder/types.ts","../src/support_code_library_builder/validate_arguments.ts","../src/support_code_library_builder/world.ts","../src/types/index.ts","../src/types/assertion-error-formatter/index.d.ts","../src/types/is-generator/index.d.ts","../src/types/knuth-shuffle-seeded/index.d.ts","../src/types/stack-chain/index.d.ts","../src/types/supports-color/index.d.ts"],"version":"5.8.3"}
1
+ {"root":["../src/filter_stack_trace.ts","../src/index.ts","../src/pickle_filter.ts","../src/step_arguments.ts","../src/time.ts","../src/try_require.ts","../src/uncaught_exception_manager.ts","../src/user_code_runner.ts","../src/value_checker.ts","../src/version.ts","../src/api/convert_configuration.ts","../src/api/formatters.ts","../src/api/gherkin.ts","../src/api/index.ts","../src/api/load_configuration.ts","../src/api/load_sources.ts","../src/api/load_support.ts","../src/api/plugins.ts","../src/api/run_cucumber.ts","../src/api/support.ts","../src/api/test_helpers.ts","../src/api/types.ts","../src/assemble/assemble_test_cases.ts","../src/assemble/index.ts","../src/assemble/types.ts","../src/cli/helpers.ts","../src/cli/i18n.ts","../src/cli/index.ts","../src/cli/install_validator.ts","../src/cli/run.ts","../src/cli/validate_node_engine_version.ts","../src/configuration/argv_parser.ts","../src/configuration/check_schema.ts","../src/configuration/default_configuration.ts","../src/configuration/from_file.ts","../src/configuration/helpers.ts","../src/configuration/index.ts","../src/configuration/locate_file.ts","../src/configuration/merge_configurations.ts","../src/configuration/parse_configuration.ts","../src/configuration/split_format_descriptor.ts","../src/configuration/types.ts","../src/configuration/validate_configuration.ts","../src/environment/console_logger.ts","../src/environment/index.ts","../src/environment/make_environment.ts","../src/environment/types.ts","../src/filter/filter_plugin.ts","../src/filter/index.ts","../src/filter/types.ts","../src/formatter/builder.ts","../src/formatter/create_stream.ts","../src/formatter/find_class_or_plugin.ts","../src/formatter/get_color_fns.ts","../src/formatter/import_code.ts","../src/formatter/index.ts","../src/formatter/json_formatter.ts","../src/formatter/progress_bar_formatter.ts","../src/formatter/progress_formatter.ts","../src/formatter/rerun_formatter.ts","../src/formatter/resolve_implementation.ts","../src/formatter/snippets_formatter.ts","../src/formatter/summary_formatter.ts","../src/formatter/usage_formatter.ts","../src/formatter/usage_json_formatter.ts","../src/formatter/builtin/html.ts","../src/formatter/builtin/index.ts","../src/formatter/builtin/message.ts","../src/formatter/helpers/duration_helpers.ts","../src/formatter/helpers/event_data_collector.ts","../src/formatter/helpers/formatters.ts","../src/formatter/helpers/gherkin_document_parser.ts","../src/formatter/helpers/index.ts","../src/formatter/helpers/issue_helpers.ts","../src/formatter/helpers/keyword_type.ts","../src/formatter/helpers/location_helpers.ts","../src/formatter/helpers/pickle_parser.ts","../src/formatter/helpers/step_argument_formatter.ts","../src/formatter/helpers/summary_helpers.ts","../src/formatter/helpers/test_case_attempt_formatter.ts","../src/formatter/helpers/test_case_attempt_parser.ts","../src/formatter/helpers/usage_helpers/index.ts","../src/formatter/step_definition_snippet_builder/index.ts","../src/formatter/step_definition_snippet_builder/javascript_snippet_syntax.ts","../src/formatter/step_definition_snippet_builder/snippet_syntax.ts","../src/models/data_table.ts","../src/models/definition.ts","../src/models/gherkin_step_keyword.ts","../src/models/step_definition.ts","../src/models/test_case_hook_definition.ts","../src/models/test_run_hook_definition.ts","../src/models/test_step_hook_definition.ts","../src/paths/index.ts","../src/paths/paths.ts","../src/paths/types.ts","../src/plugin/index.ts","../src/plugin/plugin_manager.ts","../src/plugin/types.ts","../src/publish/index.ts","../src/publish/publish_plugin.ts","../src/publish/types.ts","../src/runtime/coordinator.ts","../src/runtime/format_error.ts","../src/runtime/helpers.ts","../src/runtime/index.ts","../src/runtime/make_runtime.ts","../src/runtime/make_suggestion.ts","../src/runtime/step_runner.ts","../src/runtime/stopwatch.ts","../src/runtime/test_case_runner.ts","../src/runtime/types.ts","../src/runtime/worker.ts","../src/runtime/attachment_manager/index.ts","../src/runtime/parallel/adapter.ts","../src/runtime/parallel/run_worker.ts","../src/runtime/parallel/types.ts","../src/runtime/parallel/worker.ts","../src/runtime/scope/index.ts","../src/runtime/scope/make_proxy.ts","../src/runtime/scope/test_case_scope.ts","../src/runtime/scope/test_run_scope.ts","../src/runtime/serial/adapter.ts","../src/sharding/index.ts","../src/sharding/sharding_plugin.ts","../src/support_code_library_builder/build_parameter_type.ts","../src/support_code_library_builder/context.ts","../src/support_code_library_builder/get_definition_line_and_uri.ts","../src/support_code_library_builder/index.ts","../src/support_code_library_builder/parallel_can_assign_helpers.ts","../src/support_code_library_builder/sourced_parameter_type_registry.ts","../src/support_code_library_builder/types.ts","../src/support_code_library_builder/validate_arguments.ts","../src/support_code_library_builder/world.ts","../src/types/index.ts","../src/types/assertion-error-formatter/index.d.ts","../src/types/is-generator/index.d.ts","../src/types/knuth-shuffle-seeded/index.d.ts","../src/types/stack-chain/index.d.ts","../src/types/supports-color/index.d.ts"],"version":"5.8.3"}
package/lib/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const version = "12.3.0";
1
+ export declare const version = "12.5.0";
package/lib/version.js CHANGED
@@ -2,5 +2,5 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.version = void 0;
4
4
  // Generated by genversion.
5
- exports.version = '12.3.0';
5
+ exports.version = '12.5.0';
6
6
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":";;;AAAA,2BAA2B;AACd,QAAA,OAAO,GAAG,QAAQ,CAAA","sourcesContent":["// Generated by genversion.\nexport const version = '12.3.0'\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":";;;AAAA,2BAA2B;AACd,QAAA,OAAO,GAAG,QAAQ,CAAA","sourcesContent":["// Generated by genversion.\nexport const version = '12.5.0'\n"]}
package/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "gherkin",
9
9
  "tests"
10
10
  ],
11
- "version": "12.3.0",
11
+ "version": "12.5.0",
12
12
  "funding": "https://opencollective.com/cucumber",
13
13
  "homepage": "https://github.com/cucumber/cucumber-js",
14
14
  "author": "Julien Biezemans <jb@jbpros.com>",
@@ -219,13 +219,13 @@
219
219
  "dependencies": {
220
220
  "@cucumber/ci-environment": "12.0.0",
221
221
  "@cucumber/cucumber-expressions": "18.0.1",
222
- "@cucumber/gherkin": "37.0.0",
222
+ "@cucumber/gherkin": "37.0.1",
223
223
  "@cucumber/gherkin-streams": "6.0.0",
224
224
  "@cucumber/gherkin-utils": "10.0.0",
225
- "@cucumber/html-formatter": "22.2.0",
225
+ "@cucumber/html-formatter": "22.3.0",
226
226
  "@cucumber/junit-xml-formatter": "0.9.0",
227
227
  "@cucumber/message-streams": "4.0.1",
228
- "@cucumber/messages": "31.0.0",
228
+ "@cucumber/messages": "31.1.0",
229
229
  "@cucumber/pretty-formatter": "1.0.1",
230
230
  "@cucumber/tag-expressions": "8.1.0",
231
231
  "assertion-error-formatter": "^3.0.0",
@@ -260,12 +260,12 @@
260
260
  },
261
261
  "devDependencies": {
262
262
  "@cucumber/compatibility-kit": "^26.0.0",
263
- "@cucumber/query": "14.6.0",
263
+ "@cucumber/query": "14.7.0",
264
264
  "@eslint/compat": "^2.0.0",
265
265
  "@eslint/eslintrc": "^3.3.1",
266
266
  "@eslint/js": "^9.29.0",
267
- "@microsoft/api-extractor": "7.55.1",
268
- "@sinonjs/fake-timers": "15.0.0",
267
+ "@microsoft/api-extractor": "7.55.2",
268
+ "@sinonjs/fake-timers": "15.1.0",
269
269
  "@types/chai": "4.3.20",
270
270
  "@types/debug": "4.1.12",
271
271
  "@types/dirty-chai": "2.0.5",
@@ -305,7 +305,7 @@
305
305
  "prettier": "^3.5.3",
306
306
  "reindent-template-literals": "1.1.0",
307
307
  "shx": "0.4.0",
308
- "sinon": "21.0.0",
308
+ "sinon": "21.0.1",
309
309
  "sinon-chai": "3.7.0",
310
310
  "stream-to-string": "1.2.1",
311
311
  "tmp": "0.2.5",
@@ -1,2 +0,0 @@
1
- export declare const coordinatorVoidKeys: readonly ["message", "paths:resolve"];
2
- export declare const coordinatorTransformKeys: readonly ["pickles:filter", "pickles:order"];
@@ -1,9 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.coordinatorTransformKeys = exports.coordinatorVoidKeys = void 0;
4
- exports.coordinatorVoidKeys = ['message', 'paths:resolve'];
5
- exports.coordinatorTransformKeys = [
6
- 'pickles:filter',
7
- 'pickles:order',
8
- ];
9
- //# sourceMappingURL=events.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/plugin/events.ts"],"names":[],"mappings":";;;AAAa,QAAA,mBAAmB,GAAG,CAAC,SAAS,EAAE,eAAe,CAAU,CAAA;AAC3D,QAAA,wBAAwB,GAAG;IACtC,gBAAgB;IAChB,eAAe;CACP,CAAA","sourcesContent":["export const coordinatorVoidKeys = ['message', 'paths:resolve'] as const\nexport const coordinatorTransformKeys = [\n 'pickles:filter',\n 'pickles:order',\n] as const\n"]}