@lynxwall/cucumber-tsflow 7.4.0 → 7.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.
package/README.md CHANGED
@@ -12,10 +12,6 @@ This is a detached fork of <https://github.com/timjroberts/cucumber-js-tsflow>.
12
12
 
13
13
  This fork has been drastically modified from the original and will eventually be moved to a new project. In addition, the SpecFlow project has reached [end of life](https://reqnroll.net/news/2025/01/specflow-end-of-life-has-been-announced/), and this project will be rebranded. Further details will be provided in future updates. However, the new project will support the same functionality as cucumber-tsflow while providing additional tools and extensions.
14
14
 
15
- ## Release Updates (7.4.0)
16
-
17
- This release shifts from importing @cumber/cumber as a dependency to making it a peer dependency. This update was necessary to avoid cucumber runtime instance conflicts when importing cucumber-tsflow into the companion VS Code extension. Importing @cucumber/cucumber as a peer dependency is also recommended in Cucumber.JS documentation.
18
-
19
15
  ## Release Updates (7.3.0)
20
16
 
21
17
  With this release, we've finally added support for ESM Modules. For details on the new transpilers/loaders please see: [cucumber-tsflow ESM implementation](https://github.com/LynxWall/cucumber-js-tsflow/blob/master/cucumber-tsflow/src/transpilers/esm/README.md).
@@ -4,7 +4,7 @@ exports.loadSupport = loadSupport;
4
4
  const messages_1 = require("@cucumber/messages");
5
5
  const index_1 = require("@cucumber/cucumber/lib/paths/index");
6
6
  const index_2 = require("@cucumber/cucumber/lib/environment/index");
7
- const support_1 = require("@cucumber/cucumber/lib/api/support");
7
+ const support_1 = require("./support");
8
8
  const plugins_1 = require("@cucumber/cucumber/lib/api/plugins");
9
9
  const binding_registry_1 = require("../bindings/binding-registry");
10
10
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"load-support.js","sourceRoot":"","sources":["../../src/api/load-support.ts"],"names":[],"mappings":";;AAeA,kCAsCC;AArDD,iDAAiD;AACjD,8DAAkE;AAClE,oEAA4F;AAE5F,gEAA2E;AAC3E,gEAA8E;AAC9E,mEAA+D;AAE/D;;;;;;GAMG;AACI,KAAK,UAAU,WAAW,CAChC,OAA4B,EAC5B,cAA+B,EAAE;IAEjC,MAAM,iBAAiB,GAAG,IAAA,uBAAe,EAAC,WAAW,CAAC,CAAC;IACvD,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAAC;IAC1C,MAAM,KAAK,GAAG,sBAAW,CAAC,IAAI,EAAE,CAAC;IACjC,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CACvC;QACC,cAAc,EAAE,EAAE;QAClB,YAAY,EAAE,EAAE;QAChB,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,EAAE;KACf,EACD,OAAO,CAAC,OAAO,CACf,CAAC;IACF,MAAM,aAAa,GAAG,MAAM,IAAA,kCAAwB,EAAC,iBAAiB,CAAC,CAAC;IACxE,MAAM,aAAa,GAAG,MAAM,IAAA,oBAAY,EAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;IAC3F,aAAa,CAAC,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;IACnD,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,aAAa,CAAC;IACpD,IAAI,kBAAkB,GAAG,MAAM,IAAA,+BAAqB,EAAC;QACpD,MAAM;QACN,GAAG;QACH,KAAK;QACL,cAAc,EAAE,kBAAkB,CAAC,cAAc;QACjD,YAAY;QACZ,OAAO,EAAE,kBAAkB,CAAC,OAAO;QACnC,WAAW;KACX,CAAC,CAAC;IACH,MAAM,aAAa,CAAC,OAAO,EAAE,CAAC;IAE9B,uDAAuD;IACvD,4EAA4E;IAC5E,iCAAiC;IACjC,kBAAkB,GAAG,kCAAe,CAAC,QAAQ,CAAC,wBAAwB,CAAC,kBAAkB,CAAC,CAAC;IAC3F,kBAAkB,GAAG,EAAE,GAAG,kBAAkB,EAAE,GAAG,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,EAAE,CAAC;IAE/F,OAAO,kBAAkB,CAAC;AAC3B,CAAC","sourcesContent":["import { IdGenerator } from '@cucumber/messages';\r\nimport { resolvePaths } from '@cucumber/cucumber/lib/paths/index';\r\nimport { IRunEnvironment, makeEnvironment } from '@cucumber/cucumber/lib/environment/index';\r\nimport { ILoadSupportOptions, ISupportCodeLibrary } from '@cucumber/cucumber/lib/api/types';\r\nimport { getSupportCodeLibrary } from '@cucumber/cucumber/lib/api/support';\r\nimport { initializeForLoadSupport } from '@cucumber/cucumber/lib/api/plugins';\r\nimport { BindingRegistry } from '../bindings/binding-registry';\r\n\r\n/**\r\n * Load support code for use in test runs\r\n *\r\n * @public\r\n * @param options - Options required to find the support code\r\n * @param environment - Project environment\r\n */\r\nexport async function loadSupport(\r\n\toptions: ILoadSupportOptions,\r\n\tenvironment: IRunEnvironment = {}\r\n): Promise<ISupportCodeLibrary> {\r\n\tconst mergedEnvironment = makeEnvironment(environment);\r\n\tconst { cwd, logger } = mergedEnvironment;\r\n\tconst newId = IdGenerator.uuid();\r\n\tconst supportCoordinates = Object.assign(\r\n\t\t{\r\n\t\t\trequireModules: [],\r\n\t\t\trequirePaths: [],\r\n\t\t\tloaders: [],\r\n\t\t\timportPaths: []\r\n\t\t},\r\n\t\toptions.support\r\n\t);\r\n\tconst pluginManager = await initializeForLoadSupport(mergedEnvironment);\r\n\tconst resolvedPaths = await resolvePaths(logger, cwd, options.sources, supportCoordinates);\r\n\tpluginManager.emit('paths:resolve', resolvedPaths);\r\n\tconst { requirePaths, importPaths } = resolvedPaths;\r\n\tlet supportCodeLibrary = await getSupportCodeLibrary({\r\n\t\tlogger,\r\n\t\tcwd,\r\n\t\tnewId,\r\n\t\trequireModules: supportCoordinates.requireModules,\r\n\t\trequirePaths,\r\n\t\tloaders: supportCoordinates.loaders,\r\n\t\timportPaths\r\n\t});\r\n\tawait pluginManager.cleanup();\r\n\r\n\t// Set support to the updated step and hook definitions\r\n\t// in the supportCodeLibrary. We also need to initialize originalCoordinates\r\n\t// to support parallel execution.\r\n\tsupportCodeLibrary = BindingRegistry.instance.updateSupportCodeLibrary(supportCodeLibrary);\r\n\tsupportCodeLibrary = { ...supportCodeLibrary, ...{ originalCoordinates: supportCoordinates } };\r\n\r\n\treturn supportCodeLibrary;\r\n}\r\n"]}
1
+ {"version":3,"file":"load-support.js","sourceRoot":"","sources":["../../src/api/load-support.ts"],"names":[],"mappings":";;AAeA,kCAsCC;AArDD,iDAAiD;AACjD,8DAAkE;AAClE,oEAA4F;AAE5F,uCAAkD;AAClD,gEAA8E;AAC9E,mEAA+D;AAE/D;;;;;;GAMG;AACI,KAAK,UAAU,WAAW,CAChC,OAA4B,EAC5B,cAA+B,EAAE;IAEjC,MAAM,iBAAiB,GAAG,IAAA,uBAAe,EAAC,WAAW,CAAC,CAAC;IACvD,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAAC;IAC1C,MAAM,KAAK,GAAG,sBAAW,CAAC,IAAI,EAAE,CAAC;IACjC,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CACvC;QACC,cAAc,EAAE,EAAE;QAClB,YAAY,EAAE,EAAE;QAChB,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,EAAE;KACf,EACD,OAAO,CAAC,OAAO,CACf,CAAC;IACF,MAAM,aAAa,GAAG,MAAM,IAAA,kCAAwB,EAAC,iBAAiB,CAAC,CAAC;IACxE,MAAM,aAAa,GAAG,MAAM,IAAA,oBAAY,EAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;IAC3F,aAAa,CAAC,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;IACnD,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,aAAa,CAAC;IACpD,IAAI,kBAAkB,GAAG,MAAM,IAAA,+BAAqB,EAAC;QACpD,MAAM;QACN,GAAG;QACH,KAAK;QACL,cAAc,EAAE,kBAAkB,CAAC,cAAc;QACjD,YAAY;QACZ,OAAO,EAAE,kBAAkB,CAAC,OAAO;QACnC,WAAW;KACX,CAAC,CAAC;IACH,MAAM,aAAa,CAAC,OAAO,EAAE,CAAC;IAE9B,uDAAuD;IACvD,4EAA4E;IAC5E,iCAAiC;IACjC,kBAAkB,GAAG,kCAAe,CAAC,QAAQ,CAAC,wBAAwB,CAAC,kBAAkB,CAAC,CAAC;IAC3F,kBAAkB,GAAG,EAAE,GAAG,kBAAkB,EAAE,GAAG,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,EAAE,CAAC;IAE/F,OAAO,kBAAkB,CAAC;AAC3B,CAAC","sourcesContent":["import { IdGenerator } from '@cucumber/messages';\r\nimport { resolvePaths } from '@cucumber/cucumber/lib/paths/index';\r\nimport { IRunEnvironment, makeEnvironment } from '@cucumber/cucumber/lib/environment/index';\r\nimport { ILoadSupportOptions, ISupportCodeLibrary } from '@cucumber/cucumber/lib/api/types';\r\nimport { getSupportCodeLibrary } from './support';\r\nimport { initializeForLoadSupport } from '@cucumber/cucumber/lib/api/plugins';\r\nimport { BindingRegistry } from '../bindings/binding-registry';\r\n\r\n/**\r\n * Load support code for use in test runs\r\n *\r\n * @public\r\n * @param options - Options required to find the support code\r\n * @param environment - Project environment\r\n */\r\nexport async function loadSupport(\r\n\toptions: ILoadSupportOptions,\r\n\tenvironment: IRunEnvironment = {}\r\n): Promise<ISupportCodeLibrary> {\r\n\tconst mergedEnvironment = makeEnvironment(environment);\r\n\tconst { cwd, logger } = mergedEnvironment;\r\n\tconst newId = IdGenerator.uuid();\r\n\tconst supportCoordinates = Object.assign(\r\n\t\t{\r\n\t\t\trequireModules: [],\r\n\t\t\trequirePaths: [],\r\n\t\t\tloaders: [],\r\n\t\t\timportPaths: []\r\n\t\t},\r\n\t\toptions.support\r\n\t);\r\n\tconst pluginManager = await initializeForLoadSupport(mergedEnvironment);\r\n\tconst resolvedPaths = await resolvePaths(logger, cwd, options.sources, supportCoordinates);\r\n\tpluginManager.emit('paths:resolve', resolvedPaths);\r\n\tconst { requirePaths, importPaths } = resolvedPaths;\r\n\tlet supportCodeLibrary = await getSupportCodeLibrary({\r\n\t\tlogger,\r\n\t\tcwd,\r\n\t\tnewId,\r\n\t\trequireModules: supportCoordinates.requireModules,\r\n\t\trequirePaths,\r\n\t\tloaders: supportCoordinates.loaders,\r\n\t\timportPaths\r\n\t});\r\n\tawait pluginManager.cleanup();\r\n\r\n\t// Set support to the updated step and hook definitions\r\n\t// in the supportCodeLibrary. We also need to initialize originalCoordinates\r\n\t// to support parallel execution.\r\n\tsupportCodeLibrary = BindingRegistry.instance.updateSupportCodeLibrary(supportCodeLibrary);\r\n\tsupportCodeLibrary = { ...supportCodeLibrary, ...{ originalCoordinates: supportCoordinates } };\r\n\r\n\treturn supportCodeLibrary;\r\n}\r\n"]}
@@ -10,7 +10,7 @@ const helpers_1 = require("@cucumber/cucumber/lib/cli/helpers");
10
10
  const index_1 = require("@cucumber/cucumber/lib/paths/index");
11
11
  const make_runtime_1 = require("../runtime/make-runtime");
12
12
  const formatters_1 = require("@cucumber/cucumber/lib/api/formatters");
13
- const support_1 = require("@cucumber/cucumber/lib/api/support");
13
+ const support_1 = require("./support");
14
14
  const index_2 = require("@cucumber/cucumber/lib/environment/index");
15
15
  const gherkin_1 = require("@cucumber/cucumber/lib/api/gherkin");
16
16
  const message_collector_1 = __importDefault(require("../runtime/message-collector"));
@@ -1 +1 @@
1
- {"version":3,"file":"run-cucumber.js","sourceRoot":"","sources":["../../src/api/run-cucumber.ts"],"names":[],"mappings":"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","sourcesContent":["import { Envelope, IdGenerator, ParseError } from '@cucumber/messages';\r\nimport { EventEmitter } from 'events';\r\nimport { EventDataCollector } from '@cucumber/cucumber/lib/formatter/helpers/index';\r\nimport { emitMetaMessage, emitSupportCodeMessages } from '@cucumber/cucumber/lib/cli/helpers';\r\nimport { IRunOptions, IRunResult } from '@cucumber/cucumber/lib/api/types';\r\nimport { resolvePaths } from '@cucumber/cucumber/lib/paths/index';\r\nimport { SupportCodeLibrary } from '@cucumber/cucumber/lib/support_code_library_builder/types';\r\nimport { makeRuntime } from '../runtime/make-runtime';\r\nimport { initializeFormatters } from '@cucumber/cucumber/lib/api/formatters';\r\nimport { getSupportCodeLibrary } from '@cucumber/cucumber/lib/api/support';\r\nimport { IRunEnvironment, makeEnvironment } from '@cucumber/cucumber/lib/environment/index';\r\nimport { getPicklesAndErrors } from '@cucumber/cucumber/lib/api/gherkin';\r\nimport MessageCollector from '../runtime/message-collector';\r\nimport { version } from '../version';\r\nimport { initializeForRunCucumber } from '@cucumber/cucumber/lib/api/plugins';\r\nimport { IFilterablePickle } from '@cucumber/cucumber/lib/filter/index';\r\nimport 'polyfill-symbol-metadata';\r\nimport { BindingRegistry } from '../bindings/binding-registry';\r\nimport { ITsFlowRunOptionsRuntime } from '../runtime/types';\r\nimport { Console } from 'console';\r\nimport ansis from 'ansis';\r\n\r\nexport interface ITsFlowRunOptions extends IRunOptions {\r\n\truntime: ITsFlowRunOptionsRuntime;\r\n}\r\n\r\n/**\r\n * Execute a Cucumber test run.\r\n *\r\n * Extended from cucumber.js so that we can use our own implementation\r\n * of makeRuntime\r\n *\r\n * @public\r\n * @param options - Configuration loaded from `loadConfiguration`.\r\n * @param environment - Project environment.\r\n * @param onMessage - Callback fired each time Cucumber emits a message.\r\n */\r\nexport async function runCucumber(\r\n\toptions: ITsFlowRunOptions,\r\n\tenvironment: IRunEnvironment = {},\r\n\tonMessage?: (message: Envelope) => void\r\n): Promise<IRunResult> {\r\n\tconst mergedEnvironment = makeEnvironment(environment);\r\n\tconst { cwd, stdout, stderr, env, logger } = mergedEnvironment;\r\n\r\n\tlogger.debug(`Running cucumber-tsflow ${version}\r\nWorking directory: ${cwd}\r\nRunning from: ${__dirname}\r\n`);\r\n\tconst consoleLogger = new Console(environment.stdout as any, environment.stderr);\r\n\tif (options.runtime.experimentalDecorators) {\r\n\t\tconsoleLogger.info(ansis.yellowBright('Using Experimental Decorators.'));\r\n\t}\r\n\tif (options.runtime.parallel > 0) {\r\n\t\tconsoleLogger.info(\r\n\t\t\tansis.cyanBright(`Running Cucumber-TsFlow in Parallel with ${options.runtime.parallel} worker(s).\\n`)\r\n\t\t);\r\n\t} else {\r\n\t\tconsoleLogger.info(ansis.cyanBright('Running Cucumber-TsFlow in Serial mode.\\n'));\r\n\t}\r\n\r\n\tconst newId = IdGenerator.uuid();\r\n\r\n\tconst supportCoordinates =\r\n\t\t'originalCoordinates' in options.support\r\n\t\t\t? options.support.originalCoordinates\r\n\t\t\t: Object.assign(\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\trequireModules: [],\r\n\t\t\t\t\t\trequirePaths: [],\r\n\t\t\t\t\t\tloaders: [],\r\n\t\t\t\t\t\timportPaths: []\r\n\t\t\t\t\t},\r\n\t\t\t\t\toptions.support\r\n\t\t\t\t);\r\n\r\n\tconst pluginManager = await initializeForRunCucumber(\r\n\t\t{\r\n\t\t\t...options,\r\n\t\t\tsupport: supportCoordinates\r\n\t\t},\r\n\t\tmergedEnvironment\r\n\t);\r\n\r\n\tconst resolvedPaths = await resolvePaths(logger, cwd, options.sources, supportCoordinates);\r\n\tpluginManager.emit('paths:resolve', resolvedPaths);\r\n\tconst { sourcePaths, requirePaths, importPaths } = resolvedPaths;\r\n\r\n\t/**\r\n\t * The support code library contains all of the hook and step definitions.\r\n\t * These are loaded into the library when calling getSupportCodeLibrary,\r\n\t * which loads all of the step definitions using require or import.\r\n\t */\r\n\tlet supportCodeLibrary =\r\n\t\t'originalCoordinates' in options.support\r\n\t\t\t? (options.support as SupportCodeLibrary)\r\n\t\t\t: await getSupportCodeLibrary({\r\n\t\t\t\t\tlogger,\r\n\t\t\t\t\tcwd,\r\n\t\t\t\t\tnewId,\r\n\t\t\t\t\trequirePaths,\r\n\t\t\t\t\trequireModules: supportCoordinates.requireModules,\r\n\t\t\t\t\timportPaths,\r\n\t\t\t\t\tloaders: supportCoordinates.loaders\r\n\t\t\t\t});\r\n\r\n\t// Set support to the updated step and hook definitions\r\n\t// in the supportCodeLibrary. We also need to initialize originalCoordinates\r\n\t// to support parallel execution.\r\n\tsupportCodeLibrary = BindingRegistry.instance.updateSupportCodeLibrary(supportCodeLibrary);\r\n\tsupportCodeLibrary = { ...supportCodeLibrary, ...{ originalCoordinates: supportCoordinates } };\r\n\toptions.support = supportCodeLibrary;\r\n\r\n\tconst eventBroadcaster = new EventEmitter();\r\n\tif (onMessage) {\r\n\t\teventBroadcaster.on('envelope', onMessage);\r\n\t}\r\n\teventBroadcaster.on('envelope', value => pluginManager.emit('message', value));\r\n\r\n\t// create a global instance of the message collector and bind it\r\n\t// to the event broadcaster. This is used by cucumber and for tests\r\n\t// that are not running in parallel.\r\n\tglobal.messageCollector = new MessageCollector(eventBroadcaster);\r\n\r\n\t// cast the MessageCollector to an EventDataCollector\r\n\tconst eventDataCollector = global.messageCollector as unknown as EventDataCollector;\r\n\r\n\tlet formatterStreamError = false;\r\n\tconst cleanupFormatters = await initializeFormatters({\r\n\t\tenv,\r\n\t\tcwd,\r\n\t\tstdout,\r\n\t\tstderr,\r\n\t\tlogger,\r\n\t\tonStreamError: () => (formatterStreamError = true),\r\n\t\teventBroadcaster,\r\n\t\teventDataCollector: eventDataCollector,\r\n\t\tconfiguration: options.formats,\r\n\t\tsupportCodeLibrary,\r\n\t\tpluginManager\r\n\t});\r\n\tawait emitMetaMessage(eventBroadcaster, env);\r\n\r\n\tlet filteredPickles: ReadonlyArray<IFilterablePickle> = [];\r\n\tlet parseErrors: ParseError[] = [];\r\n\tif (sourcePaths.length > 0) {\r\n\t\tconst gherkinResult = await getPicklesAndErrors({\r\n\t\t\tnewId,\r\n\t\t\tcwd,\r\n\t\t\tsourcePaths,\r\n\t\t\tcoordinates: options.sources,\r\n\t\t\tonEnvelope: envelope => eventBroadcaster.emit('envelope', envelope)\r\n\t\t});\r\n\t\tfilteredPickles = await pluginManager.transform('pickles:filter', gherkinResult.filterablePickles);\r\n\t\tfilteredPickles = await pluginManager.transform('pickles:order', filteredPickles);\r\n\t\tparseErrors = gherkinResult.parseErrors;\r\n\t}\r\n\tif (parseErrors.length) {\r\n\t\tparseErrors.forEach(parseError => {\r\n\t\t\tlogger.error(`Parse error in \"${parseError.source.uri}\" ${parseError.message}`);\r\n\t\t});\r\n\t\tawait cleanupFormatters();\r\n\t\tawait pluginManager.cleanup();\r\n\t\treturn {\r\n\t\t\tsuccess: false,\r\n\t\t\tsupport: supportCodeLibrary\r\n\t\t};\r\n\t}\r\n\r\n\temitSupportCodeMessages({\r\n\t\teventBroadcaster,\r\n\t\tsupportCodeLibrary,\r\n\t\tnewId\r\n\t});\r\n\r\n\tconst runtime = await makeRuntime({\r\n\t\tenvironment,\r\n\t\tlogger,\r\n\t\teventBroadcaster,\r\n\t\tsourcedPickles: filteredPickles,\r\n\t\tnewId,\r\n\t\tsupportCodeLibrary,\r\n\t\toptions: options.runtime,\r\n\t\tcoordinates: options.sources\r\n\t});\r\n\tconst success = await runtime.run();\r\n\tawait pluginManager.cleanup();\r\n\tawait cleanupFormatters();\r\n\r\n\treturn {\r\n\t\tsuccess: success && !formatterStreamError,\r\n\t\tsupport: supportCodeLibrary\r\n\t};\r\n}\r\n"]}
1
+ {"version":3,"file":"run-cucumber.js","sourceRoot":"","sources":["../../src/api/run-cucumber.ts"],"names":[],"mappings":"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","sourcesContent":["import { Envelope, IdGenerator, ParseError } from '@cucumber/messages';\r\nimport { EventEmitter } from 'events';\r\nimport { EventDataCollector } from '@cucumber/cucumber/lib/formatter/helpers/index';\r\nimport { emitMetaMessage, emitSupportCodeMessages } from '@cucumber/cucumber/lib/cli/helpers';\r\nimport { IRunOptions, IRunResult } from '@cucumber/cucumber/lib/api/types';\r\nimport { resolvePaths } from '@cucumber/cucumber/lib/paths/index';\r\nimport { SupportCodeLibrary } from '@cucumber/cucumber/lib/support_code_library_builder/types';\r\nimport { makeRuntime } from '../runtime/make-runtime';\r\nimport { initializeFormatters } from '@cucumber/cucumber/lib/api/formatters';\r\nimport { getSupportCodeLibrary } from './support';\r\nimport { IRunEnvironment, makeEnvironment } from '@cucumber/cucumber/lib/environment/index';\r\nimport { getPicklesAndErrors } from '@cucumber/cucumber/lib/api/gherkin';\r\nimport MessageCollector from '../runtime/message-collector';\r\nimport { version } from '../version';\r\nimport { initializeForRunCucumber } from '@cucumber/cucumber/lib/api/plugins';\r\nimport { IFilterablePickle } from '@cucumber/cucumber/lib/filter/index';\r\nimport 'polyfill-symbol-metadata';\r\nimport { BindingRegistry } from '../bindings/binding-registry';\r\nimport { ITsFlowRunOptionsRuntime } from '../runtime/types';\r\nimport { Console } from 'console';\r\nimport ansis from 'ansis';\r\nimport { supportCodeLibraryBuilder } from '@cucumber/cucumber';\r\n\r\nexport interface ITsFlowRunOptions extends IRunOptions {\r\n\truntime: ITsFlowRunOptionsRuntime;\r\n}\r\n\r\n/**\r\n * Execute a Cucumber test run.\r\n *\r\n * Extended from cucumber.js so that we can use our own implementation\r\n * of makeRuntime\r\n *\r\n * @public\r\n * @param options - Configuration loaded from `loadConfiguration`.\r\n * @param environment - Project environment.\r\n * @param onMessage - Callback fired each time Cucumber emits a message.\r\n */\r\nexport async function runCucumber(\r\n\toptions: ITsFlowRunOptions,\r\n\tenvironment: IRunEnvironment = {},\r\n\tonMessage?: (message: Envelope) => void\r\n): Promise<IRunResult> {\r\n\tconst mergedEnvironment = makeEnvironment(environment);\r\n\tconst { cwd, stdout, stderr, env, logger } = mergedEnvironment;\r\n\r\n\tlogger.debug(`Running cucumber-tsflow ${version}\r\nWorking directory: ${cwd}\r\nRunning from: ${__dirname}\r\n`);\r\n\tconst consoleLogger = new Console(environment.stdout as any, environment.stderr);\r\n\tif (options.runtime.experimentalDecorators) {\r\n\t\tconsoleLogger.info(ansis.yellowBright('Using Experimental Decorators.'));\r\n\t}\r\n\tif (options.runtime.parallel > 0) {\r\n\t\tconsoleLogger.info(\r\n\t\t\tansis.cyanBright(`Running Cucumber-TsFlow in Parallel with ${options.runtime.parallel} worker(s).\\n`)\r\n\t\t);\r\n\t} else {\r\n\t\tconsoleLogger.info(ansis.cyanBright('Running Cucumber-TsFlow in Serial mode.\\n'));\r\n\t}\r\n\r\n\tconst newId = IdGenerator.uuid();\r\n\r\n\tconst supportCoordinates =\r\n\t\t'originalCoordinates' in options.support\r\n\t\t\t? options.support.originalCoordinates\r\n\t\t\t: Object.assign(\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\trequireModules: [],\r\n\t\t\t\t\t\trequirePaths: [],\r\n\t\t\t\t\t\tloaders: [],\r\n\t\t\t\t\t\timportPaths: []\r\n\t\t\t\t\t},\r\n\t\t\t\t\toptions.support\r\n\t\t\t\t);\r\n\r\n\tconst pluginManager = await initializeForRunCucumber(\r\n\t\t{\r\n\t\t\t...options,\r\n\t\t\tsupport: supportCoordinates\r\n\t\t},\r\n\t\tmergedEnvironment\r\n\t);\r\n\r\n\tconst resolvedPaths = await resolvePaths(logger, cwd, options.sources, supportCoordinates);\r\n\tpluginManager.emit('paths:resolve', resolvedPaths);\r\n\tconst { sourcePaths, requirePaths, importPaths } = resolvedPaths;\r\n\r\n\t/**\r\n\t * The support code library contains all of the hook and step definitions.\r\n\t * These are loaded into the library when calling getSupportCodeLibrary,\r\n\t * which loads all of the step definitions using require or import.\r\n\t */\r\n\tlet supportCodeLibrary =\r\n\t\t'originalCoordinates' in options.support\r\n\t\t\t? (options.support as SupportCodeLibrary)\r\n\t\t\t: await getSupportCodeLibrary({\r\n\t\t\t\t\tlogger,\r\n\t\t\t\t\tcwd,\r\n\t\t\t\t\tnewId,\r\n\t\t\t\t\trequirePaths,\r\n\t\t\t\t\trequireModules: supportCoordinates.requireModules,\r\n\t\t\t\t\timportPaths,\r\n\t\t\t\t\tloaders: supportCoordinates.loaders\r\n\t\t\t\t});\r\n\r\n\t// Set support to the updated step and hook definitions\r\n\t// in the supportCodeLibrary. We also need to initialize originalCoordinates\r\n\t// to support parallel execution.\r\n\tsupportCodeLibrary = BindingRegistry.instance.updateSupportCodeLibrary(supportCodeLibrary);\r\n\tsupportCodeLibrary = { ...supportCodeLibrary, ...{ originalCoordinates: supportCoordinates } };\r\n\toptions.support = supportCodeLibrary;\r\n\r\n\tconst eventBroadcaster = new EventEmitter();\r\n\tif (onMessage) {\r\n\t\teventBroadcaster.on('envelope', onMessage);\r\n\t}\r\n\teventBroadcaster.on('envelope', value => pluginManager.emit('message', value));\r\n\r\n\t// create a global instance of the message collector and bind it\r\n\t// to the event broadcaster. This is used by cucumber and for tests\r\n\t// that are not running in parallel.\r\n\tglobal.messageCollector = new MessageCollector(eventBroadcaster);\r\n\r\n\t// cast the MessageCollector to an EventDataCollector\r\n\tconst eventDataCollector = global.messageCollector as unknown as EventDataCollector;\r\n\r\n\tlet formatterStreamError = false;\r\n\tconst cleanupFormatters = await initializeFormatters({\r\n\t\tenv,\r\n\t\tcwd,\r\n\t\tstdout,\r\n\t\tstderr,\r\n\t\tlogger,\r\n\t\tonStreamError: () => (formatterStreamError = true),\r\n\t\teventBroadcaster,\r\n\t\teventDataCollector: eventDataCollector,\r\n\t\tconfiguration: options.formats,\r\n\t\tsupportCodeLibrary,\r\n\t\tpluginManager\r\n\t});\r\n\tawait emitMetaMessage(eventBroadcaster, env);\r\n\r\n\tlet filteredPickles: ReadonlyArray<IFilterablePickle> = [];\r\n\tlet parseErrors: ParseError[] = [];\r\n\tif (sourcePaths.length > 0) {\r\n\t\tconst gherkinResult = await getPicklesAndErrors({\r\n\t\t\tnewId,\r\n\t\t\tcwd,\r\n\t\t\tsourcePaths,\r\n\t\t\tcoordinates: options.sources,\r\n\t\t\tonEnvelope: envelope => eventBroadcaster.emit('envelope', envelope)\r\n\t\t});\r\n\t\tfilteredPickles = await pluginManager.transform('pickles:filter', gherkinResult.filterablePickles);\r\n\t\tfilteredPickles = await pluginManager.transform('pickles:order', filteredPickles);\r\n\t\tparseErrors = gherkinResult.parseErrors;\r\n\t}\r\n\tif (parseErrors.length) {\r\n\t\tparseErrors.forEach(parseError => {\r\n\t\t\tlogger.error(`Parse error in \"${parseError.source.uri}\" ${parseError.message}`);\r\n\t\t});\r\n\t\tawait cleanupFormatters();\r\n\t\tawait pluginManager.cleanup();\r\n\t\treturn {\r\n\t\t\tsuccess: false,\r\n\t\t\tsupport: supportCodeLibrary\r\n\t\t};\r\n\t}\r\n\r\n\temitSupportCodeMessages({\r\n\t\teventBroadcaster,\r\n\t\tsupportCodeLibrary,\r\n\t\tnewId\r\n\t});\r\n\r\n\tconst runtime = await makeRuntime({\r\n\t\tenvironment,\r\n\t\tlogger,\r\n\t\teventBroadcaster,\r\n\t\tsourcedPickles: filteredPickles,\r\n\t\tnewId,\r\n\t\tsupportCodeLibrary,\r\n\t\toptions: options.runtime,\r\n\t\tcoordinates: options.sources\r\n\t});\r\n\tconst success = await runtime.run();\r\n\tawait pluginManager.cleanup();\r\n\tawait cleanupFormatters();\r\n\r\n\treturn {\r\n\t\tsuccess: success && !formatterStreamError,\r\n\t\tsupport: supportCodeLibrary\r\n\t};\r\n}\r\n"]}
@@ -0,0 +1,12 @@
1
+ import { IdGenerator } from '@cucumber/messages';
2
+ import { SupportCodeLibrary } from '@cucumber/cucumber/lib/support_code_library_builder/types';
3
+ import { ILogger } from '@cucumber/cucumber/lib/environment/index';
4
+ export declare function getSupportCodeLibrary({ logger, cwd, newId, requireModules, requirePaths, importPaths, loaders }: {
5
+ logger: ILogger;
6
+ cwd: string;
7
+ newId: IdGenerator.NewId;
8
+ requireModules: string[];
9
+ requirePaths: string[];
10
+ importPaths: string[];
11
+ loaders: string[];
12
+ }): Promise<SupportCodeLibrary>;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getSupportCodeLibrary = getSupportCodeLibrary;
7
+ const node_module_1 = require("node:module");
8
+ const node_url_1 = require("node:url");
9
+ const index_1 = __importDefault(require("@cucumber/cucumber/lib/support_code_library_builder/index"));
10
+ const try_require_1 = __importDefault(require("@cucumber/cucumber/lib/try_require"));
11
+ async function getSupportCodeLibrary({ logger, cwd, newId, requireModules, requirePaths, importPaths, loaders }) {
12
+ index_1.default.reset(cwd, newId, {
13
+ requireModules,
14
+ requirePaths,
15
+ importPaths,
16
+ loaders
17
+ });
18
+ // Define the boolean type before loading any support code
19
+ index_1.default.defineParameterType({
20
+ name: 'boolean',
21
+ regexp: /true|false/,
22
+ transformer: s => (s === 'true' ? true : false)
23
+ });
24
+ requireModules.map(path => {
25
+ logger.debug(`Attempting to require code from "${path}"`);
26
+ (0, try_require_1.default)(path);
27
+ });
28
+ requirePaths.map(path => {
29
+ logger.debug(`Attempting to require code from "${path}"`);
30
+ (0, try_require_1.default)(path);
31
+ });
32
+ for (const specifier of loaders) {
33
+ logger.debug(`Attempting to register loader "${specifier}"`);
34
+ (0, node_module_1.register)(specifier, (0, node_url_1.pathToFileURL)('./'));
35
+ }
36
+ for (const path of importPaths) {
37
+ logger.debug(`Attempting to import code from "${path}"`);
38
+ await import((0, node_url_1.pathToFileURL)(path).toString());
39
+ }
40
+ return index_1.default.finalize();
41
+ }
42
+ //# sourceMappingURL=support.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"support.js","sourceRoot":"","sources":["../../src/api/support.ts"],"names":[],"mappings":";;;;;AAQA,sDAmDC;AA3DD,6CAAuC;AACvC,uCAAyC;AAGzC,sGAAkG;AAClG,qFAA4D;AAGrD,KAAK,UAAU,qBAAqB,CAAC,EAC3C,MAAM,EACN,GAAG,EACH,KAAK,EACL,cAAc,EACd,YAAY,EACZ,WAAW,EACX,OAAO,EASP;IACA,eAAyB,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE;QAC3C,cAAc;QACd,YAAY;QACZ,WAAW;QACX,OAAO;KACP,CAAC,CAAC;IAEH,0DAA0D;IAC1D,eAAyB,CAAC,mBAAmB,CAAC;QAC7C,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,YAAY;QACpB,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;KAC/C,CAAC,CAAC;IAEH,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACzB,MAAM,CAAC,KAAK,CAAC,oCAAoC,IAAI,GAAG,CAAC,CAAC;QAC1D,IAAA,qBAAU,EAAC,IAAI,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACvB,MAAM,CAAC,KAAK,CAAC,oCAAoC,IAAI,GAAG,CAAC,CAAC;QAC1D,IAAA,qBAAU,EAAC,IAAI,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE,CAAC;QACjC,MAAM,CAAC,KAAK,CAAC,kCAAkC,SAAS,GAAG,CAAC,CAAC;QAC7D,IAAA,sBAAQ,EAAC,SAAS,EAAE,IAAA,wBAAa,EAAC,IAAI,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAChC,MAAM,CAAC,KAAK,CAAC,mCAAmC,IAAI,GAAG,CAAC,CAAC;QACzD,MAAM,MAAM,CAAC,IAAA,wBAAa,EAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,eAAyB,CAAC,QAAQ,EAAE,CAAC;AAC7C,CAAC","sourcesContent":["import { register } from 'node:module';\r\nimport { pathToFileURL } from 'node:url';\r\nimport { IdGenerator } from '@cucumber/messages';\r\nimport { SupportCodeLibrary } from '@cucumber/cucumber/lib/support_code_library_builder/types';\r\nimport supportCodeLibraryBuilder from '@cucumber/cucumber/lib/support_code_library_builder/index';\r\nimport tryRequire from '@cucumber/cucumber/lib/try_require';\r\nimport { ILogger } from '@cucumber/cucumber/lib/environment/index';\r\n\r\nexport async function getSupportCodeLibrary({\r\n\tlogger,\r\n\tcwd,\r\n\tnewId,\r\n\trequireModules,\r\n\trequirePaths,\r\n\timportPaths,\r\n\tloaders\r\n}: {\r\n\tlogger: ILogger;\r\n\tcwd: string;\r\n\tnewId: IdGenerator.NewId;\r\n\trequireModules: string[];\r\n\trequirePaths: string[];\r\n\timportPaths: string[];\r\n\tloaders: string[];\r\n}): Promise<SupportCodeLibrary> {\r\n\tsupportCodeLibraryBuilder.reset(cwd, newId, {\r\n\t\trequireModules,\r\n\t\trequirePaths,\r\n\t\timportPaths,\r\n\t\tloaders\r\n\t});\r\n\r\n\t// Define the boolean type before loading any support code\r\n\tsupportCodeLibraryBuilder.defineParameterType({\r\n\t\tname: 'boolean',\r\n\t\tregexp: /true|false/,\r\n\t\ttransformer: s => (s === 'true' ? true : false)\r\n\t});\r\n\r\n\trequireModules.map(path => {\r\n\t\tlogger.debug(`Attempting to require code from \"${path}\"`);\r\n\t\ttryRequire(path);\r\n\t});\r\n\trequirePaths.map(path => {\r\n\t\tlogger.debug(`Attempting to require code from \"${path}\"`);\r\n\t\ttryRequire(path);\r\n\t});\r\n\r\n\tfor (const specifier of loaders) {\r\n\t\tlogger.debug(`Attempting to register loader \"${specifier}\"`);\r\n\t\tregister(specifier, pathToFileURL('./'));\r\n\t}\r\n\r\n\tfor (const path of importPaths) {\r\n\t\tlogger.debug(`Attempting to import code from \"${path}\"`);\r\n\t\tawait import(pathToFileURL(path).toString());\r\n\t}\r\n\r\n\treturn supportCodeLibraryBuilder.finalize();\r\n}\r\n"]}
@@ -1,15 +1,10 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.binding = binding;
7
4
  const cucumber_1 = require("@cucumber/cucumber");
8
5
  const binding_context_1 = require("./binding-context");
9
6
  const binding_registry_1 = require("./binding-registry");
10
7
  const step_binding_1 = require("./step-binding");
11
- const index_1 = require("../index");
12
- const underscore_1 = __importDefault(require("underscore"));
13
8
  /**
14
9
  * A set of step patterns that have been registered with Cucumber.
15
10
  *
@@ -32,7 +27,6 @@ function binding(requiredContextTypes) {
32
27
  return (target) => {
33
28
  const bindingRegistry = binding_registry_1.BindingRegistry.instance;
34
29
  bindingRegistry.registerContextTypesForClass(target.prototype, requiredContextTypes);
35
- defineParameters();
36
30
  // the class decorator is called last when decorators on a type are initialized. All other decorators
37
31
  // are added to DecoratorContext.metadata before this is called.
38
32
  // This will get all those bindings and then clear metadata for the next type that's loaded.
@@ -55,7 +49,6 @@ function binding(requiredContextTypes) {
55
49
  return function classDecorator(target, context) {
56
50
  const bindingRegistry = binding_registry_1.BindingRegistry.instance;
57
51
  bindingRegistry.registerContextTypesForClass(target.prototype, requiredContextTypes);
58
- defineParameters();
59
52
  // the class decorator is called last when decorators on a type are initialized. All other decorators
60
53
  // are added to DecoratorContext.metadata before this is called.
61
54
  // This will get all those bindings and then clear metadata for the next type that's loaded.
@@ -83,19 +76,6 @@ function binding(requiredContextTypes) {
83
76
  };
84
77
  }
85
78
  }
86
- /**
87
- * Called only once to register new parameters. This has to be
88
- * executed here during binding initialization for cucumber to
89
- * to use it when matching expressions. Attempting to add it
90
- * before the test run doesn't work
91
- */
92
- const defineParameters = underscore_1.default.once(() => {
93
- (0, index_1.defineParameterType)({
94
- name: 'boolean',
95
- regexp: /true|false/,
96
- transformer: s => (s === 'true' ? true : false)
97
- });
98
- });
99
79
  /**
100
80
  * Common helper used to add StepBindings to the binding registry
101
81
  * @param stepBinding
@@ -1 +1 @@
1
- {"version":3,"file":"binding-decorator.js","sourceRoot":"","sources":["../../src/bindings/binding-decorator.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n\tAfter,\r\n\tAfterStep,\r\n\tAfterAll,\r\n\tBefore,\r\n\tBeforeStep,\r\n\tBeforeAll,\r\n\tGiven,\r\n\tThen,\r\n\tWhen,\r\n\tWorld\r\n} from '@cucumber/cucumber';\r\nimport { getStepBindings, getStepBindingsExp, getCollectedBindings } from './binding-context';\r\nimport { BindingRegistry, DEFAULT_TAG } from './binding-registry';\r\nimport { StepBinding, StepBindingFlags } from './step-binding';\r\nimport { ContextType, StepPattern } from './types';\r\nimport { defineParameterType } from '../index';\r\nimport _ from 'underscore';\r\n\r\ninterface WritableWorld extends World {\r\n\t[key: string]: any;\r\n}\r\n\r\n/**\r\n * A set of step patterns that have been registered with Cucumber.\r\n *\r\n * In order to support scoped (or tagged) step definitions, we must ensure that any step binding is\r\n * only registered with Cucumber once. The binding function for that step pattern then becomes\r\n * responsible for looking up and execuing the step binding based on the context that is in scope at\r\n * the point of invocation.\r\n */\r\nconst stepPatternRegistrations = new Map<StepPattern, StepBindingFlags>();\r\n\r\n/**\r\n * A class decorator that marks the associated class as a CucumberJS binding.\r\n *\r\n * @param requiredContextTypes An optional array of Types that will be created and passed into the created\r\n * object for each scenario.\r\n *\r\n * An instance of the decorated class will be created for each scenario.\r\n */\r\nexport function binding(requiredContextTypes?: ContextType[]): any {\r\n\tif (global.experimentalDecorators) {\r\n\t\treturn <T>(target: { new (...args: any[]): T }) => {\r\n\t\t\tconst bindingRegistry = BindingRegistry.instance;\r\n\t\t\tbindingRegistry.registerContextTypesForClass(target.prototype, requiredContextTypes);\r\n\t\t\tdefineParameters();\r\n\r\n\t\t\t// the class decorator is called last when decorators on a type are initialized. All other decorators\r\n\t\t\t// are added to DecoratorContext.metadata before this is called.\r\n\t\t\t// This will get all those bindings and then clear metadata for the next type that's loaded.\r\n\t\t\tconst allBindings: StepBinding[] = getStepBindingsExp();\r\n\t\t\tallBindings.forEach(stepBinding => {\r\n\t\t\t\t// For static methods, we need to set the classPrototype to the class itself, not the prototype\r\n\t\t\t\tif (stepBinding.stepIsStatic) {\r\n\t\t\t\t\tstepBinding.classPrototype = target;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstepBinding.classPrototype = target.prototype;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbindingRegistry.registerStepBinding(stepBinding);\r\n\r\n\t\t\t\t// Register with cucumber\r\n\t\t\t\taddStepBinding(stepBinding);\r\n\t\t\t});\r\n\t\t};\r\n\t} else {\r\n\t\treturn function classDecorator(target: Function, context: ClassDecoratorContext) {\r\n\t\t\tconst bindingRegistry = BindingRegistry.instance;\r\n\t\t\tbindingRegistry.registerContextTypesForClass(target.prototype, requiredContextTypes);\r\n\t\t\tdefineParameters();\r\n\r\n\t\t\t// the class decorator is called last when decorators on a type are initialized. All other decorators\r\n\t\t\t// are added to DecoratorContext.metadata before this is called.\r\n\t\t\t// This will get all those bindings and then clear metadata for the next type that's loaded.\r\n\t\t\tconst allBindings: StepBinding[] = getStepBindings(context);\r\n\t\t\tallBindings.forEach(stepBinding => {\r\n\t\t\t\t// Set the class prototype and then register the binding with the prototype\r\n\t\t\t\tstepBinding.classPrototype = target.prototype;\r\n\t\t\t\tbindingRegistry.registerStepBinding(stepBinding);\r\n\r\n\t\t\t\t// add the step binding to the binding registry\r\n\t\t\t\taddStepBinding(stepBinding);\r\n\t\t\t});\r\n\r\n\t\t\t// Process pending step bindings after class is decorated\r\n\t\t\tcontext.addInitializer(function () {\r\n\t\t\t\t// Get all the collected bindings\r\n\t\t\t\tconst allBindings = getCollectedBindings();\r\n\r\n\t\t\t\tallBindings.forEach(stepBinding => {\r\n\t\t\t\t\t// Set the class prototype and register\r\n\t\t\t\t\tstepBinding.classPrototype = target.prototype;\r\n\t\t\t\t\tbindingRegistry.registerStepBinding(stepBinding);\r\n\r\n\t\t\t\t\t// Register with cucumber - call the local addStepBinding function\r\n\t\t\t\t\taddStepBinding(stepBinding);\r\n\t\t\t\t});\r\n\t\t\t});\r\n\r\n\t\t\treturn target;\r\n\t\t};\r\n\t}\r\n}\r\n\r\n/**\r\n * Called only once to register new parameters. This has to be\r\n * executed here during binding initialization for cucumber to\r\n * to use it when matching expressions. Attempting to add it\r\n * before the test run doesn't work\r\n */\r\nconst defineParameters = _.once(() => {\r\n\tdefineParameterType({\r\n\t\tname: 'boolean',\r\n\t\tregexp: /true|false/,\r\n\t\ttransformer: s => (s === 'true' ? true : false)\r\n\t});\r\n});\r\n\r\n/**\r\n * Common helper used to add StepBindings to the binding registry\r\n * @param stepBinding\r\n * @returns\r\n */\r\nfunction addStepBinding(stepBinding: StepBinding): void {\r\n\tif (stepBinding.bindingType & StepBindingFlags.StepDefinitions) {\r\n\t\tlet stepBindingFlags = stepPatternRegistrations.get(stepBinding.stepPattern.toString());\r\n\t\tif (stepBindingFlags === undefined) {\r\n\t\t\tstepBindingFlags = StepBindingFlags.none;\r\n\t\t}\r\n\t\tif (stepBindingFlags & stepBinding.bindingType) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tbindStepDefinition(stepBinding);\r\n\t\tstepPatternRegistrations.set(stepBinding.stepPattern.toString(), stepBindingFlags | stepBinding.bindingType);\r\n\t} else if (stepBinding.bindingType & StepBindingFlags.Hooks) {\r\n\t\tbindHook(stepBinding);\r\n\t}\r\n}\r\n\r\n/**\r\n * Binds a step definition to Cucumber.\r\n *\r\n * @param stepBinding The [[StepBinding]] that represents a 'given', 'when', or 'then' step definition.\r\n */\r\nfunction bindStepDefinition(stepBinding: StepBinding): void {\r\n\tconst stepFunction = function (this: WritableWorld): any {\r\n\t\tconst bindingRegistry = BindingRegistry.instance;\r\n\r\n\t\tconst scenarioContext = global.messageCollector.getStepScenarioContext(stepBinding);\r\n\r\n\t\tif (scenarioContext) {\r\n\t\t\tconst matchingStepBindings = bindingRegistry.getStepBindings(\r\n\t\t\t\tstepBinding.stepPattern.toString(),\r\n\t\t\t\tscenarioContext.scenarioInfo.tags\r\n\t\t\t);\r\n\r\n\t\t\tif (matchingStepBindings.length > 1) {\r\n\t\t\t\tlet message = `Ambiguous step definitions for '${matchingStepBindings[0].stepPattern}':\\n`;\r\n\r\n\t\t\t\tmatchingStepBindings.forEach(matchingStepBinding => {\r\n\t\t\t\t\tmessage =\r\n\t\t\t\t\t\tmessage +\r\n\t\t\t\t\t\t`\\t\\t${String(matchingStepBinding.classPropertyKey)} (${matchingStepBinding.callsite.toString()})\\n`;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthrow new Error(message);\r\n\t\t\t} else if (matchingStepBindings.length === 0) {\r\n\t\t\t\tthrow new Error(\r\n\t\t\t\t\t`Cannot find matched step definition for ${stepBinding.stepPattern.toString()} with tag ${\r\n\t\t\t\t\t\tscenarioContext.scenarioInfo.tags\r\n\t\t\t\t\t} in binding registry`\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tconst contextTypes = bindingRegistry.getContextTypesForClass(matchingStepBindings[0].classPrototype);\r\n\t\t\tconst bindingObject = scenarioContext.getOrActivateBindingClass(\r\n\t\t\t\tmatchingStepBindings[0].classPrototype,\r\n\t\t\t\tcontextTypes,\r\n\t\t\t\tthis\r\n\t\t\t);\r\n\t\t\tbindingObject._worldObj = this;\r\n\r\n\t\t\treturn (bindingObject[matchingStepBindings[0].classPropertyKey] as Function).apply(\r\n\t\t\t\tbindingObject,\r\n\t\t\t\targuments as any\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\tthrow new Error('Unable to find the Scenario Context for a Step!');\r\n\t\t}\r\n\t};\r\n\r\n\tObject.defineProperty(stepFunction, 'length', {\r\n\t\tvalue: stepBinding.stepArgsLength\r\n\t});\r\n\r\n\t// initialize options used on all step bindings\r\n\tconst options = {\r\n\t\tcucumberKey: stepBinding.cucumberKey,\r\n\t\ttimeout: stepBinding.timeout,\r\n\t\twrapperOptions: stepBinding.wrapperOption\r\n\t};\r\n\t// call appropriate step\r\n\tif (stepBinding.bindingType & StepBindingFlags.given) {\r\n\t\tGiven(stepBinding.stepPattern, options, stepFunction);\r\n\t} else if (stepBinding.bindingType & StepBindingFlags.when) {\r\n\t\tWhen(stepBinding.stepPattern, options, stepFunction);\r\n\t} else if (stepBinding.bindingType & StepBindingFlags.then) {\r\n\t\tThen(stepBinding.stepPattern, options, stepFunction);\r\n\t}\r\n}\r\n\r\n/**\r\n * Binds a hook to Cucumber.\r\n *\r\n * @param stepBinding The [[StepBinding]] that represents a 'before', or 'after', step definition.\r\n */\r\nfunction bindHook(stepBinding: StepBinding): void {\r\n\tconst globalHookFunction = function (this: any): any {\r\n\t\t// Check if it's a static method\r\n\t\tif (stepBinding.stepIsStatic || !stepBinding.classPrototype[stepBinding.classPropertyKey]) {\r\n\t\t\tconst constructor = stepBinding.classPrototype.constructor;\r\n\r\n\t\t\tif (constructor && constructor[stepBinding.classPropertyKey]) {\r\n\t\t\t\treturn constructor[stepBinding.classPropertyKey].apply(constructor);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// For non-static methods\r\n\t\tif (stepBinding.classPrototype[stepBinding.classPropertyKey]) {\r\n\t\t\treturn stepBinding.classPrototype[stepBinding.classPropertyKey].apply(stepBinding.classPrototype);\r\n\t\t}\r\n\r\n\t\tthrow new Error(\r\n\t\t\t`Method ${String(stepBinding.classPropertyKey)} not found on class ${stepBinding.classPrototype?.constructor?.name}`\r\n\t\t);\r\n\t};\r\n\t// Main binding for all other hooks (before, after, beforeStep, afterStep)\r\n\tconst hookFunction = function (this: any, arg: any): any {\r\n\t\tconst scenarioContext = global.messageCollector.getHookScenarioContext(arg);\r\n\t\tif (scenarioContext) {\r\n\t\t\tconst contextTypes = BindingRegistry.instance.getContextTypesForClass(stepBinding.classPrototype);\r\n\t\t\tconst bindingObject = scenarioContext.getOrActivateBindingClass(stepBinding.classPrototype, contextTypes, this);\r\n\t\t\tbindingObject._worldObj = this;\r\n\t\t\treturn (bindingObject[stepBinding.classPropertyKey] as Function).apply(bindingObject, arguments as any);\r\n\t\t} else {\r\n\t\t\tthrow new Error('Unable to find the Scenario Context for Hook!');\r\n\t\t}\r\n\t};\r\n\t// length values need to be added to our binding functions.\r\n\t// These are used in cucumber to determine if the function is\r\n\t// a callback or promise.\r\n\tObject.defineProperty(globalHookFunction, 'length', {\r\n\t\tvalue: stepBinding.stepArgsLength\r\n\t});\r\n\tObject.defineProperty(hookFunction, 'length', {\r\n\t\tvalue: stepBinding.stepArgsLength\r\n\t});\r\n\r\n\tconst tags = stepBinding.tags === DEFAULT_TAG ? undefined : stepBinding.tags;\r\n\r\n\t// This binds the appropriate function above to the associated\r\n\t// cucumber step functions.\r\n\tswitch (stepBinding.bindingType) {\r\n\t\tcase StepBindingFlags.beforeAll: {\r\n\t\t\tconst options = { cucumberKey: stepBinding.cucumberKey, timeout: stepBinding.timeout };\r\n\t\t\tBeforeAll(options, globalHookFunction);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase StepBindingFlags.before: {\r\n\t\t\tconst options = { cucumberKey: stepBinding.cucumberKey, tags: tags, timeout: stepBinding.timeout };\r\n\t\t\tBefore(options, hookFunction);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase StepBindingFlags.beforeStep: {\r\n\t\t\tconst options = { cucumberKey: stepBinding.cucumberKey, tags: tags, timeout: stepBinding.timeout };\r\n\t\t\tBeforeStep(options, hookFunction);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase StepBindingFlags.afterAll: {\r\n\t\t\tconst options = { cucumberKey: stepBinding.cucumberKey, timeout: stepBinding.timeout };\r\n\t\t\tAfterAll(options, globalHookFunction);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase StepBindingFlags.after: {\r\n\t\t\tconst options = { cucumberKey: stepBinding.cucumberKey, tags: tags, timeout: stepBinding.timeout };\r\n\t\t\tAfter(options, hookFunction);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase StepBindingFlags.afterStep: {\r\n\t\t\tconst options = { cucumberKey: stepBinding.cucumberKey, tags: tags, timeout: stepBinding.timeout };\r\n\t\t\tAfterStep(options, hookFunction);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n}\r\n"]}
1
+ {"version":3,"file":"binding-decorator.js","sourceRoot":"","sources":["../../src/bindings/binding-decorator.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n\tAfter,\r\n\tAfterStep,\r\n\tAfterAll,\r\n\tBefore,\r\n\tBeforeStep,\r\n\tBeforeAll,\r\n\tGiven,\r\n\tThen,\r\n\tWhen,\r\n\tWorld\r\n} from '@cucumber/cucumber';\r\nimport { getStepBindings, getStepBindingsExp, getCollectedBindings } from './binding-context';\r\nimport { BindingRegistry, DEFAULT_TAG } from './binding-registry';\r\nimport { StepBinding, StepBindingFlags } from './step-binding';\r\nimport { ContextType, StepPattern } from './types';\r\nimport { defineParameterType } from '../index';\r\nimport _ from 'underscore';\r\n\r\ninterface WritableWorld extends World {\r\n\t[key: string]: any;\r\n}\r\n\r\n/**\r\n * A set of step patterns that have been registered with Cucumber.\r\n *\r\n * In order to support scoped (or tagged) step definitions, we must ensure that any step binding is\r\n * only registered with Cucumber once. The binding function for that step pattern then becomes\r\n * responsible for looking up and execuing the step binding based on the context that is in scope at\r\n * the point of invocation.\r\n */\r\nconst stepPatternRegistrations = new Map<StepPattern, StepBindingFlags>();\r\n\r\n/**\r\n * A class decorator that marks the associated class as a CucumberJS binding.\r\n *\r\n * @param requiredContextTypes An optional array of Types that will be created and passed into the created\r\n * object for each scenario.\r\n *\r\n * An instance of the decorated class will be created for each scenario.\r\n */\r\nexport function binding(requiredContextTypes?: ContextType[]): any {\r\n\tif (global.experimentalDecorators) {\r\n\t\treturn <T>(target: { new (...args: any[]): T }) => {\r\n\t\t\tconst bindingRegistry = BindingRegistry.instance;\r\n\t\t\tbindingRegistry.registerContextTypesForClass(target.prototype, requiredContextTypes);\r\n\r\n\t\t\t// the class decorator is called last when decorators on a type are initialized. All other decorators\r\n\t\t\t// are added to DecoratorContext.metadata before this is called.\r\n\t\t\t// This will get all those bindings and then clear metadata for the next type that's loaded.\r\n\t\t\tconst allBindings: StepBinding[] = getStepBindingsExp();\r\n\t\t\tallBindings.forEach(stepBinding => {\r\n\t\t\t\t// For static methods, we need to set the classPrototype to the class itself, not the prototype\r\n\t\t\t\tif (stepBinding.stepIsStatic) {\r\n\t\t\t\t\tstepBinding.classPrototype = target;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstepBinding.classPrototype = target.prototype;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbindingRegistry.registerStepBinding(stepBinding);\r\n\r\n\t\t\t\t// Register with cucumber\r\n\t\t\t\taddStepBinding(stepBinding);\r\n\t\t\t});\r\n\t\t};\r\n\t} else {\r\n\t\treturn function classDecorator(target: Function, context: ClassDecoratorContext) {\r\n\t\t\tconst bindingRegistry = BindingRegistry.instance;\r\n\t\t\tbindingRegistry.registerContextTypesForClass(target.prototype, requiredContextTypes);\r\n\r\n\t\t\t// the class decorator is called last when decorators on a type are initialized. All other decorators\r\n\t\t\t// are added to DecoratorContext.metadata before this is called.\r\n\t\t\t// This will get all those bindings and then clear metadata for the next type that's loaded.\r\n\t\t\tconst allBindings: StepBinding[] = getStepBindings(context);\r\n\t\t\tallBindings.forEach(stepBinding => {\r\n\t\t\t\t// Set the class prototype and then register the binding with the prototype\r\n\t\t\t\tstepBinding.classPrototype = target.prototype;\r\n\t\t\t\tbindingRegistry.registerStepBinding(stepBinding);\r\n\r\n\t\t\t\t// add the step binding to the binding registry\r\n\t\t\t\taddStepBinding(stepBinding);\r\n\t\t\t});\r\n\r\n\t\t\t// Process pending step bindings after class is decorated\r\n\t\t\tcontext.addInitializer(function () {\r\n\t\t\t\t// Get all the collected bindings\r\n\t\t\t\tconst allBindings = getCollectedBindings();\r\n\r\n\t\t\t\tallBindings.forEach(stepBinding => {\r\n\t\t\t\t\t// Set the class prototype and register\r\n\t\t\t\t\tstepBinding.classPrototype = target.prototype;\r\n\t\t\t\t\tbindingRegistry.registerStepBinding(stepBinding);\r\n\r\n\t\t\t\t\t// Register with cucumber - call the local addStepBinding function\r\n\t\t\t\t\taddStepBinding(stepBinding);\r\n\t\t\t\t});\r\n\t\t\t});\r\n\r\n\t\t\treturn target;\r\n\t\t};\r\n\t}\r\n}\r\n\r\n/**\r\n * Common helper used to add StepBindings to the binding registry\r\n * @param stepBinding\r\n * @returns\r\n */\r\nfunction addStepBinding(stepBinding: StepBinding): void {\r\n\tif (stepBinding.bindingType & StepBindingFlags.StepDefinitions) {\r\n\t\tlet stepBindingFlags = stepPatternRegistrations.get(stepBinding.stepPattern.toString());\r\n\t\tif (stepBindingFlags === undefined) {\r\n\t\t\tstepBindingFlags = StepBindingFlags.none;\r\n\t\t}\r\n\t\tif (stepBindingFlags & stepBinding.bindingType) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tbindStepDefinition(stepBinding);\r\n\t\tstepPatternRegistrations.set(stepBinding.stepPattern.toString(), stepBindingFlags | stepBinding.bindingType);\r\n\t} else if (stepBinding.bindingType & StepBindingFlags.Hooks) {\r\n\t\tbindHook(stepBinding);\r\n\t}\r\n}\r\n\r\n/**\r\n * Binds a step definition to Cucumber.\r\n *\r\n * @param stepBinding The [[StepBinding]] that represents a 'given', 'when', or 'then' step definition.\r\n */\r\nfunction bindStepDefinition(stepBinding: StepBinding): void {\r\n\tconst stepFunction = function (this: WritableWorld): any {\r\n\t\tconst bindingRegistry = BindingRegistry.instance;\r\n\r\n\t\tconst scenarioContext = global.messageCollector.getStepScenarioContext(stepBinding);\r\n\r\n\t\tif (scenarioContext) {\r\n\t\t\tconst matchingStepBindings = bindingRegistry.getStepBindings(\r\n\t\t\t\tstepBinding.stepPattern.toString(),\r\n\t\t\t\tscenarioContext.scenarioInfo.tags\r\n\t\t\t);\r\n\r\n\t\t\tif (matchingStepBindings.length > 1) {\r\n\t\t\t\tlet message = `Ambiguous step definitions for '${matchingStepBindings[0].stepPattern}':\\n`;\r\n\r\n\t\t\t\tmatchingStepBindings.forEach(matchingStepBinding => {\r\n\t\t\t\t\tmessage =\r\n\t\t\t\t\t\tmessage +\r\n\t\t\t\t\t\t`\\t\\t${String(matchingStepBinding.classPropertyKey)} (${matchingStepBinding.callsite.toString()})\\n`;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthrow new Error(message);\r\n\t\t\t} else if (matchingStepBindings.length === 0) {\r\n\t\t\t\tthrow new Error(\r\n\t\t\t\t\t`Cannot find matched step definition for ${stepBinding.stepPattern.toString()} with tag ${\r\n\t\t\t\t\t\tscenarioContext.scenarioInfo.tags\r\n\t\t\t\t\t} in binding registry`\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tconst contextTypes = bindingRegistry.getContextTypesForClass(matchingStepBindings[0].classPrototype);\r\n\t\t\tconst bindingObject = scenarioContext.getOrActivateBindingClass(\r\n\t\t\t\tmatchingStepBindings[0].classPrototype,\r\n\t\t\t\tcontextTypes,\r\n\t\t\t\tthis\r\n\t\t\t);\r\n\t\t\tbindingObject._worldObj = this;\r\n\r\n\t\t\treturn (bindingObject[matchingStepBindings[0].classPropertyKey] as Function).apply(\r\n\t\t\t\tbindingObject,\r\n\t\t\t\targuments as any\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\tthrow new Error('Unable to find the Scenario Context for a Step!');\r\n\t\t}\r\n\t};\r\n\r\n\tObject.defineProperty(stepFunction, 'length', {\r\n\t\tvalue: stepBinding.stepArgsLength\r\n\t});\r\n\r\n\t// initialize options used on all step bindings\r\n\tconst options = {\r\n\t\tcucumberKey: stepBinding.cucumberKey,\r\n\t\ttimeout: stepBinding.timeout,\r\n\t\twrapperOptions: stepBinding.wrapperOption\r\n\t};\r\n\t// call appropriate step\r\n\tif (stepBinding.bindingType & StepBindingFlags.given) {\r\n\t\tGiven(stepBinding.stepPattern, options, stepFunction);\r\n\t} else if (stepBinding.bindingType & StepBindingFlags.when) {\r\n\t\tWhen(stepBinding.stepPattern, options, stepFunction);\r\n\t} else if (stepBinding.bindingType & StepBindingFlags.then) {\r\n\t\tThen(stepBinding.stepPattern, options, stepFunction);\r\n\t}\r\n}\r\n\r\n/**\r\n * Binds a hook to Cucumber.\r\n *\r\n * @param stepBinding The [[StepBinding]] that represents a 'before', or 'after', step definition.\r\n */\r\nfunction bindHook(stepBinding: StepBinding): void {\r\n\tconst globalHookFunction = function (this: any): any {\r\n\t\t// Check if it's a static method\r\n\t\tif (stepBinding.stepIsStatic || !stepBinding.classPrototype[stepBinding.classPropertyKey]) {\r\n\t\t\tconst constructor = stepBinding.classPrototype.constructor;\r\n\r\n\t\t\tif (constructor && constructor[stepBinding.classPropertyKey]) {\r\n\t\t\t\treturn constructor[stepBinding.classPropertyKey].apply(constructor);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// For non-static methods\r\n\t\tif (stepBinding.classPrototype[stepBinding.classPropertyKey]) {\r\n\t\t\treturn stepBinding.classPrototype[stepBinding.classPropertyKey].apply(stepBinding.classPrototype);\r\n\t\t}\r\n\r\n\t\tthrow new Error(\r\n\t\t\t`Method ${String(stepBinding.classPropertyKey)} not found on class ${stepBinding.classPrototype?.constructor?.name}`\r\n\t\t);\r\n\t};\r\n\t// Main binding for all other hooks (before, after, beforeStep, afterStep)\r\n\tconst hookFunction = function (this: any, arg: any): any {\r\n\t\tconst scenarioContext = global.messageCollector.getHookScenarioContext(arg);\r\n\t\tif (scenarioContext) {\r\n\t\t\tconst contextTypes = BindingRegistry.instance.getContextTypesForClass(stepBinding.classPrototype);\r\n\t\t\tconst bindingObject = scenarioContext.getOrActivateBindingClass(stepBinding.classPrototype, contextTypes, this);\r\n\t\t\tbindingObject._worldObj = this;\r\n\t\t\treturn (bindingObject[stepBinding.classPropertyKey] as Function).apply(bindingObject, arguments as any);\r\n\t\t} else {\r\n\t\t\tthrow new Error('Unable to find the Scenario Context for Hook!');\r\n\t\t}\r\n\t};\r\n\t// length values need to be added to our binding functions.\r\n\t// These are used in cucumber to determine if the function is\r\n\t// a callback or promise.\r\n\tObject.defineProperty(globalHookFunction, 'length', {\r\n\t\tvalue: stepBinding.stepArgsLength\r\n\t});\r\n\tObject.defineProperty(hookFunction, 'length', {\r\n\t\tvalue: stepBinding.stepArgsLength\r\n\t});\r\n\r\n\tconst tags = stepBinding.tags === DEFAULT_TAG ? undefined : stepBinding.tags;\r\n\r\n\t// This binds the appropriate function above to the associated\r\n\t// cucumber step functions.\r\n\tswitch (stepBinding.bindingType) {\r\n\t\tcase StepBindingFlags.beforeAll: {\r\n\t\t\tconst options = { cucumberKey: stepBinding.cucumberKey, timeout: stepBinding.timeout };\r\n\t\t\tBeforeAll(options, globalHookFunction);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase StepBindingFlags.before: {\r\n\t\t\tconst options = { cucumberKey: stepBinding.cucumberKey, tags: tags, timeout: stepBinding.timeout };\r\n\t\t\tBefore(options, hookFunction);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase StepBindingFlags.beforeStep: {\r\n\t\t\tconst options = { cucumberKey: stepBinding.cucumberKey, tags: tags, timeout: stepBinding.timeout };\r\n\t\t\tBeforeStep(options, hookFunction);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase StepBindingFlags.afterAll: {\r\n\t\t\tconst options = { cucumberKey: stepBinding.cucumberKey, timeout: stepBinding.timeout };\r\n\t\t\tAfterAll(options, globalHookFunction);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase StepBindingFlags.after: {\r\n\t\t\tconst options = { cucumberKey: stepBinding.cucumberKey, tags: tags, timeout: stepBinding.timeout };\r\n\t\t\tAfter(options, hookFunction);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase StepBindingFlags.afterStep: {\r\n\t\t\tconst options = { cucumberKey: stepBinding.cucumberKey, tags: tags, timeout: stepBinding.timeout };\r\n\t\t\tAfterStep(options, hookFunction);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n}\r\n"]}
@@ -60,6 +60,12 @@ class ChildProcessWorker {
60
60
  importPaths,
61
61
  loaders: supportCodeCoordinates.loaders
62
62
  });
63
+ // Define the boolean type before loading any support code
64
+ index_1.default.defineParameterType({
65
+ name: 'boolean',
66
+ regexp: /true|false/,
67
+ transformer: s => (s === 'true' ? true : false)
68
+ });
63
69
  // Load any require modules for CommonJS or loaders and imports for ESM
64
70
  supportCodeCoordinates.requireModules.map(module => (0, try_require_1.default)(module));
65
71
  requirePaths.map(module => (0, try_require_1.default)(module));
@@ -1 +1 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/runtime/parallel/worker.ts"],"names":[],"mappings":"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","sourcesContent":["import { EventEmitter } from 'node:events';\r\nimport { pathToFileURL } from 'node:url';\r\nimport { register } from 'node:module';\r\nimport { Envelope, IdGenerator } from '@cucumber/messages';\r\nimport supportCodeLibraryBuilder from '@cucumber/cucumber/lib/support_code_library_builder/index';\r\nimport { SupportCodeLibrary } from '@cucumber/cucumber/lib/support_code_library_builder/types';\r\nimport tryRequire from '@cucumber/cucumber/lib/try_require';\r\nimport { Worker } from '../worker';\r\nimport { WorkerToCoordinatorEvent, RunCommand } from '@cucumber/cucumber/lib/runtime/parallel/types';\r\nimport logger from '../../utils/logger';\r\nimport { resolvePaths } from '@cucumber/cucumber/lib/paths/paths';\r\nimport { BindingRegistry } from '../../bindings/binding-registry';\r\nimport { InitializeTsflowCommand, CoordinatorToWorkerCommand, TsFlowRuntimeOptions } from '../types';\r\nimport MessageCollector from '../message-collector';\r\n\r\nconst { uuid } = IdGenerator;\r\n\r\ntype IExitFunction = (exitCode: number, error?: Error, message?: string) => void;\r\ntype IMessageSender = (command: WorkerToCoordinatorEvent) => void;\r\n\r\n/**\r\n * Represents a child process running in parallel executions\r\n */\r\nexport class ChildProcessWorker {\r\n\tprivate readonly cwd: string;\r\n\tprivate readonly exit: IExitFunction;\r\n\r\n\tprivate readonly id: string;\r\n\tprivate readonly eventBroadcaster: EventEmitter;\r\n\tprivate readonly newId: IdGenerator.NewId;\r\n\tprivate readonly sendMessage: IMessageSender;\r\n\tprivate options!: TsFlowRuntimeOptions;\r\n\tprivate supportCodeLibrary!: SupportCodeLibrary;\r\n\tprivate worker!: Worker;\r\n\r\n\tconstructor({\r\n\t\tcwd,\r\n\t\texit,\r\n\t\tid,\r\n\t\tsendMessage,\r\n\t\texperimentalDecorators\r\n\t}: {\r\n\t\tcwd: string;\r\n\t\texit: IExitFunction;\r\n\t\tid: string;\r\n\t\tsendMessage: IMessageSender;\r\n\t\texperimentalDecorators: boolean;\r\n\t}) {\r\n\t\tthis.id = id;\r\n\t\tthis.newId = uuid();\r\n\t\tthis.cwd = cwd;\r\n\t\tthis.exit = exit;\r\n\t\tthis.sendMessage = sendMessage;\r\n\t\tthis.eventBroadcaster = new EventEmitter();\r\n\r\n\t\t// initialize a message collector for this process to handle our\r\n\t\t// integration with event data\r\n\t\tglobal.messageCollector = new MessageCollector(this.eventBroadcaster);\r\n\r\n\t\t// initialize the global experimentalDecorators setting\r\n\t\tglobal.experimentalDecorators = experimentalDecorators;\r\n\r\n\t\t// pass any envelope messages up to the parent process to keep our main\r\n\t\t// message collector in sync with this one.\r\n\t\tthis.eventBroadcaster.on('envelope', (envelope: Envelope) => this.sendMessage({ type: 'ENVELOPE', envelope }));\r\n\t}\r\n\r\n\t/**\r\n\t * Initialize this child process worker\r\n\t */\r\n\tasync initialize({\r\n\t\tsupportCodeCoordinates,\r\n\t\tsupportCodeIds,\r\n\t\toptions,\r\n\t\tmessageData\r\n\t}: InitializeTsflowCommand): Promise<void> {\r\n\t\t// reset the message collector with message data passed in\r\n\t\tglobal.messageCollector.reset(messageData);\r\n\r\n\t\t// Get correct paths and reset the support code library\r\n\t\tconst resolvedPaths = await resolvePaths(logger, this.cwd, messageData.coordinates, supportCodeCoordinates);\r\n\t\tconst { requirePaths, importPaths } = resolvedPaths;\r\n\t\tsupportCodeLibraryBuilder.reset(this.cwd, this.newId, {\r\n\t\t\trequirePaths,\r\n\t\t\trequireModules: supportCodeCoordinates.requireModules,\r\n\t\t\timportPaths,\r\n\t\t\tloaders: supportCodeCoordinates.loaders\r\n\t\t});\r\n\t\t// Load any require modules for CommonJS or loaders and imports for ESM\r\n\t\tsupportCodeCoordinates.requireModules.map(module => tryRequire(module));\r\n\t\trequirePaths.map(module => tryRequire(module));\r\n\t\tfor (const specifier of supportCodeCoordinates.loaders) {\r\n\t\t\tregister(specifier, pathToFileURL('./'));\r\n\t\t}\r\n\t\tfor (const path of importPaths) {\r\n\t\t\tawait import(pathToFileURL(path).toString());\r\n\t\t}\r\n\t\t// Finalize the support code library with IDs passed in and\r\n\t\t// update entries in the library with info from our binding registry.\r\n\t\tthis.supportCodeLibrary = supportCodeLibraryBuilder.finalize(supportCodeIds);\r\n\t\tthis.supportCodeLibrary = BindingRegistry.instance.updateSupportCodeLibrary(this.supportCodeLibrary);\r\n\r\n\t\t// Initialize a worker and run BeforeAll hooks\r\n\t\tthis.options = options;\r\n\t\tthis.worker = new Worker(this.id, this.eventBroadcaster, this.newId, this.options, this.supportCodeLibrary);\r\n\t\tawait this.worker.runBeforeAllHooks();\r\n\t\tthis.sendMessage({ type: 'READY' });\r\n\t}\r\n\r\n\t/**\r\n\t * Finialize the worker, which runs AfterAll hooks\r\n\t */\r\n\tasync finalize(): Promise<void> {\r\n\t\tawait this.worker.runAfterAllHooks();\r\n\t\tthis.exit(0);\r\n\t}\r\n\r\n\t/**\r\n\t * Interaction with the main process and child workers is done through IPC communications\r\n\t * This receives commands from the parent process and calls appropriate child operations.\r\n\t * @param command commands sent to this worker\r\n\t */\r\n\tasync receiveMessage(command: CoordinatorToWorkerCommand): Promise<void> {\r\n\t\tswitch (command.type) {\r\n\t\t\tcase 'INITIALIZE':\r\n\t\t\t\tawait this.initialize(command);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'RUN':\r\n\t\t\t\tawait this.runTestCase(command);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'FINALIZE':\r\n\t\t\t\tawait this.finalize();\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Run all test cases on the worker\r\n\t * @param command RunCommand\r\n\t */\r\n\tasync runTestCase(command: RunCommand): Promise<void> {\r\n\t\tconst success = await this.worker.runTestCase(command.assembledTestCase, command.failing);\r\n\t\tthis.sendMessage({\r\n\t\t\ttype: 'FINISHED',\r\n\t\t\tsuccess\r\n\t\t});\r\n\t}\r\n}\r\n"]}
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/runtime/parallel/worker.ts"],"names":[],"mappings":"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","sourcesContent":["import { EventEmitter } from 'node:events';\r\nimport { pathToFileURL } from 'node:url';\r\nimport { register } from 'node:module';\r\nimport { Envelope, IdGenerator } from '@cucumber/messages';\r\nimport supportCodeLibraryBuilder from '@cucumber/cucumber/lib/support_code_library_builder/index';\r\nimport { SupportCodeLibrary } from '@cucumber/cucumber/lib/support_code_library_builder/types';\r\nimport tryRequire from '@cucumber/cucumber/lib/try_require';\r\nimport { Worker } from '../worker';\r\nimport { WorkerToCoordinatorEvent, RunCommand } from '@cucumber/cucumber/lib/runtime/parallel/types';\r\nimport logger from '../../utils/logger';\r\nimport { resolvePaths } from '@cucumber/cucumber/lib/paths/paths';\r\nimport { BindingRegistry } from '../../bindings/binding-registry';\r\nimport { InitializeTsflowCommand, CoordinatorToWorkerCommand, TsFlowRuntimeOptions } from '../types';\r\nimport MessageCollector from '../message-collector';\r\n\r\nconst { uuid } = IdGenerator;\r\n\r\ntype IExitFunction = (exitCode: number, error?: Error, message?: string) => void;\r\ntype IMessageSender = (command: WorkerToCoordinatorEvent) => void;\r\n\r\n/**\r\n * Represents a child process running in parallel executions\r\n */\r\nexport class ChildProcessWorker {\r\n\tprivate readonly cwd: string;\r\n\tprivate readonly exit: IExitFunction;\r\n\r\n\tprivate readonly id: string;\r\n\tprivate readonly eventBroadcaster: EventEmitter;\r\n\tprivate readonly newId: IdGenerator.NewId;\r\n\tprivate readonly sendMessage: IMessageSender;\r\n\tprivate options!: TsFlowRuntimeOptions;\r\n\tprivate supportCodeLibrary!: SupportCodeLibrary;\r\n\tprivate worker!: Worker;\r\n\r\n\tconstructor({\r\n\t\tcwd,\r\n\t\texit,\r\n\t\tid,\r\n\t\tsendMessage,\r\n\t\texperimentalDecorators\r\n\t}: {\r\n\t\tcwd: string;\r\n\t\texit: IExitFunction;\r\n\t\tid: string;\r\n\t\tsendMessage: IMessageSender;\r\n\t\texperimentalDecorators: boolean;\r\n\t}) {\r\n\t\tthis.id = id;\r\n\t\tthis.newId = uuid();\r\n\t\tthis.cwd = cwd;\r\n\t\tthis.exit = exit;\r\n\t\tthis.sendMessage = sendMessage;\r\n\t\tthis.eventBroadcaster = new EventEmitter();\r\n\r\n\t\t// initialize a message collector for this process to handle our\r\n\t\t// integration with event data\r\n\t\tglobal.messageCollector = new MessageCollector(this.eventBroadcaster);\r\n\r\n\t\t// initialize the global experimentalDecorators setting\r\n\t\tglobal.experimentalDecorators = experimentalDecorators;\r\n\r\n\t\t// pass any envelope messages up to the parent process to keep our main\r\n\t\t// message collector in sync with this one.\r\n\t\tthis.eventBroadcaster.on('envelope', (envelope: Envelope) => this.sendMessage({ type: 'ENVELOPE', envelope }));\r\n\t}\r\n\r\n\t/**\r\n\t * Initialize this child process worker\r\n\t */\r\n\tasync initialize({\r\n\t\tsupportCodeCoordinates,\r\n\t\tsupportCodeIds,\r\n\t\toptions,\r\n\t\tmessageData\r\n\t}: InitializeTsflowCommand): Promise<void> {\r\n\t\t// reset the message collector with message data passed in\r\n\t\tglobal.messageCollector.reset(messageData);\r\n\r\n\t\t// Get correct paths and reset the support code library\r\n\t\tconst resolvedPaths = await resolvePaths(logger, this.cwd, messageData.coordinates, supportCodeCoordinates);\r\n\t\tconst { requirePaths, importPaths } = resolvedPaths;\r\n\t\tsupportCodeLibraryBuilder.reset(this.cwd, this.newId, {\r\n\t\t\trequirePaths,\r\n\t\t\trequireModules: supportCodeCoordinates.requireModules,\r\n\t\t\timportPaths,\r\n\t\t\tloaders: supportCodeCoordinates.loaders\r\n\t\t});\r\n\r\n\t\t// Define the boolean type before loading any support code\r\n\t\tsupportCodeLibraryBuilder.defineParameterType({\r\n\t\t\tname: 'boolean',\r\n\t\t\tregexp: /true|false/,\r\n\t\t\ttransformer: s => (s === 'true' ? true : false)\r\n\t\t});\r\n\r\n\t\t// Load any require modules for CommonJS or loaders and imports for ESM\r\n\t\tsupportCodeCoordinates.requireModules.map(module => tryRequire(module));\r\n\t\trequirePaths.map(module => tryRequire(module));\r\n\t\tfor (const specifier of supportCodeCoordinates.loaders) {\r\n\t\t\tregister(specifier, pathToFileURL('./'));\r\n\t\t}\r\n\t\tfor (const path of importPaths) {\r\n\t\t\tawait import(pathToFileURL(path).toString());\r\n\t\t}\r\n\t\t// Finalize the support code library with IDs passed in and\r\n\t\t// update entries in the library with info from our binding registry.\r\n\t\tthis.supportCodeLibrary = supportCodeLibraryBuilder.finalize(supportCodeIds);\r\n\t\tthis.supportCodeLibrary = BindingRegistry.instance.updateSupportCodeLibrary(this.supportCodeLibrary);\r\n\r\n\t\t// Initialize a worker and run BeforeAll hooks\r\n\t\tthis.options = options;\r\n\t\tthis.worker = new Worker(this.id, this.eventBroadcaster, this.newId, this.options, this.supportCodeLibrary);\r\n\t\tawait this.worker.runBeforeAllHooks();\r\n\t\tthis.sendMessage({ type: 'READY' });\r\n\t}\r\n\r\n\t/**\r\n\t * Finialize the worker, which runs AfterAll hooks\r\n\t */\r\n\tasync finalize(): Promise<void> {\r\n\t\tawait this.worker.runAfterAllHooks();\r\n\t\tthis.exit(0);\r\n\t}\r\n\r\n\t/**\r\n\t * Interaction with the main process and child workers is done through IPC communications\r\n\t * This receives commands from the parent process and calls appropriate child operations.\r\n\t * @param command commands sent to this worker\r\n\t */\r\n\tasync receiveMessage(command: CoordinatorToWorkerCommand): Promise<void> {\r\n\t\tswitch (command.type) {\r\n\t\t\tcase 'INITIALIZE':\r\n\t\t\t\tawait this.initialize(command);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'RUN':\r\n\t\t\t\tawait this.runTestCase(command);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'FINALIZE':\r\n\t\t\t\tawait this.finalize();\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Run all test cases on the worker\r\n\t * @param command RunCommand\r\n\t */\r\n\tasync runTestCase(command: RunCommand): Promise<void> {\r\n\t\tconst success = await this.worker.runTestCase(command.assembledTestCase, command.failing);\r\n\t\tthis.sendMessage({\r\n\t\t\ttype: 'FINISHED',\r\n\t\t\tsuccess\r\n\t\t});\r\n\t}\r\n}\r\n"]}
@@ -0,0 +1,80 @@
1
+ import { IdGenerator } from '@cucumber/messages';
2
+ import * as messages from '@cucumber/messages';
3
+ import TestCaseHookDefinition from '@cucumber/cucumber/lib/models/test_case_hook_definition';
4
+ import TestStepHookDefinition from '@cucumber/cucumber/lib/models/test_step_hook_definition';
5
+ import TestRunHookDefinition from '@cucumber/cucumber/lib/models/test_run_hook_definition';
6
+ import StepDefinition from '@cucumber/cucumber/lib/models/step_definition';
7
+ import { GherkinStepKeyword } from '@cucumber/cucumber/lib/models/gherkin_step_keyword';
8
+ import { IDefineSupportCodeMethods, IDefineTestCaseHookOptions, IDefineTestStepHookOptions, IDefineTestRunHookOptions, IParameterTypeDefinition, SupportCodeLibrary, TestCaseHookFunction, TestStepHookFunction, ISupportCodeCoordinates, IDefineStep, CanonicalSupportCodeIds } from '@cucumber/cucumber/lib/support_code_library_builder/types';
9
+ interface IStepDefinitionConfig {
10
+ code: Function;
11
+ line: number;
12
+ options: any;
13
+ keyword: GherkinStepKeyword;
14
+ pattern: string | RegExp;
15
+ uri: string;
16
+ }
17
+ interface ITestCaseHookDefinitionConfig {
18
+ code: any;
19
+ line: number;
20
+ options: any;
21
+ uri: string;
22
+ }
23
+ interface ITestStepHookDefinitionConfig {
24
+ code: Function;
25
+ line: number;
26
+ options: any;
27
+ uri: string;
28
+ }
29
+ interface ITestRunHookDefinitionConfig {
30
+ code: Function;
31
+ line: number;
32
+ options: any;
33
+ uri: string;
34
+ }
35
+ export declare class SupportCodeLibraryBuilder {
36
+ readonly methods: IDefineSupportCodeMethods;
37
+ private originalCoordinates;
38
+ private afterTestCaseHookDefinitionConfigs;
39
+ private afterTestRunHookDefinitionConfigs;
40
+ private afterTestStepHookDefinitionConfigs;
41
+ private beforeTestCaseHookDefinitionConfigs;
42
+ private beforeTestRunHookDefinitionConfigs;
43
+ private beforeTestStepHookDefinitionConfigs;
44
+ private cwd;
45
+ private defaultTimeout;
46
+ private definitionFunctionWrapper;
47
+ private newId;
48
+ private parameterTypeRegistry;
49
+ private stepDefinitionConfigs;
50
+ private World;
51
+ private parallelCanAssign;
52
+ private status;
53
+ /**
54
+ * Gets the SupportCodeLibraryBuilder singleton.
55
+ *
56
+ * @returns A [[SupportCodeLibraryBuilder]].
57
+ */
58
+ static get instance(): SupportCodeLibraryBuilder;
59
+ constructor();
60
+ defineParameterType(options: IParameterTypeDefinition<any>): void;
61
+ defineStep(keyword: GherkinStepKeyword, getCollection: () => IStepDefinitionConfig[]): IDefineStep;
62
+ defineTestCaseHook(getCollection: () => ITestCaseHookDefinitionConfig[]): <WorldType>(options: string | IDefineTestCaseHookOptions | TestCaseHookFunction<WorldType>, code?: TestCaseHookFunction<WorldType>) => void;
63
+ defineTestStepHook(getCollection: () => ITestStepHookDefinitionConfig[]): <WorldType>(options: string | IDefineTestStepHookOptions | TestStepHookFunction<WorldType>, code?: TestStepHookFunction<WorldType>) => void;
64
+ defineTestRunHook(getCollection: () => ITestRunHookDefinitionConfig[]): (options: IDefineTestRunHookOptions | Function, code?: Function) => void;
65
+ wrapCode({ code, wrapperOptions }: {
66
+ code: Function;
67
+ wrapperOptions: any;
68
+ }): Function;
69
+ buildTestCaseHookDefinitions(configs: ITestCaseHookDefinitionConfig[], canonicalIds?: string[]): TestCaseHookDefinition[];
70
+ buildTestStepHookDefinitions(configs: ITestStepHookDefinitionConfig[]): TestStepHookDefinition[];
71
+ buildTestRunHookDefinitions(configs: ITestRunHookDefinitionConfig[]): TestRunHookDefinition[];
72
+ buildStepDefinitions(canonicalIds?: string[]): {
73
+ stepDefinitions: StepDefinition[];
74
+ undefinedParameterTypes: messages.UndefinedParameterType[];
75
+ };
76
+ finalize(canonicalIds?: CanonicalSupportCodeIds): SupportCodeLibrary;
77
+ reset(cwd: string, newId: IdGenerator.NewId, originalCoordinates?: ISupportCodeCoordinates): void;
78
+ }
79
+ declare const _default: SupportCodeLibraryBuilder;
80
+ export default _default;
@@ -0,0 +1,337 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SupportCodeLibraryBuilder = void 0;
7
+ const util_arity_1 = __importDefault(require("util-arity"));
8
+ const cucumber_expressions_1 = require("@cucumber/cucumber-expressions");
9
+ const test_case_hook_definition_1 = __importDefault(require("@cucumber/cucumber/lib/models/test_case_hook_definition"));
10
+ const test_step_hook_definition_1 = __importDefault(require("@cucumber/cucumber/lib/models/test_step_hook_definition"));
11
+ const test_run_hook_definition_1 = __importDefault(require("@cucumber/cucumber/lib/models/test_run_hook_definition"));
12
+ const step_definition_1 = __importDefault(require("@cucumber/cucumber/lib/models/step_definition"));
13
+ const index_1 = require("@cucumber/cucumber/lib/formatter/helpers/index");
14
+ const value_checker_1 = require("@cucumber/cucumber/lib/value_checker");
15
+ const validate_arguments_1 = __importDefault(require("@cucumber/cucumber/lib/support_code_library_builder/validate_arguments"));
16
+ const world_1 = __importDefault(require("@cucumber/cucumber/lib/support_code_library_builder/world"));
17
+ const get_definition_line_and_uri_1 = require("@cucumber/cucumber/lib/support_code_library_builder/get_definition_line_and_uri");
18
+ const build_parameter_type_1 = require("@cucumber/cucumber/lib/support_code_library_builder/build_parameter_type");
19
+ const sourced_parameter_type_registry_1 = require("@cucumber/cucumber/lib/support_code_library_builder/sourced_parameter_type_registry");
20
+ class SupportCodeLibraryBuilder {
21
+ methods;
22
+ originalCoordinates;
23
+ afterTestCaseHookDefinitionConfigs;
24
+ afterTestRunHookDefinitionConfigs;
25
+ afterTestStepHookDefinitionConfigs;
26
+ beforeTestCaseHookDefinitionConfigs;
27
+ beforeTestRunHookDefinitionConfigs;
28
+ beforeTestStepHookDefinitionConfigs;
29
+ cwd;
30
+ defaultTimeout;
31
+ definitionFunctionWrapper;
32
+ newId;
33
+ parameterTypeRegistry;
34
+ stepDefinitionConfigs;
35
+ World;
36
+ parallelCanAssign;
37
+ status = 'PENDING';
38
+ /**
39
+ * Gets the SupportCodeLibraryBuilder singleton.
40
+ *
41
+ * @returns A [[SupportCodeLibraryBuilder]].
42
+ */
43
+ static get instance() {
44
+ const SUPPORT_CODE_BUILDER_SLOTNAME = '__CUCUMBER_TSFLOW_SUPPORTCODEBUILDER';
45
+ const builder = global[SUPPORT_CODE_BUILDER_SLOTNAME];
46
+ if (!builder) {
47
+ global[SUPPORT_CODE_BUILDER_SLOTNAME] = new SupportCodeLibraryBuilder();
48
+ }
49
+ return builder || global[SUPPORT_CODE_BUILDER_SLOTNAME];
50
+ }
51
+ constructor() {
52
+ const methods = {
53
+ After: this.defineTestCaseHook(() => this.afterTestCaseHookDefinitionConfigs),
54
+ AfterAll: this.defineTestRunHook(() => this.afterTestRunHookDefinitionConfigs),
55
+ AfterStep: this.defineTestStepHook(() => this.afterTestStepHookDefinitionConfigs),
56
+ Before: this.defineTestCaseHook(() => this.beforeTestCaseHookDefinitionConfigs),
57
+ BeforeAll: this.defineTestRunHook(() => this.beforeTestRunHookDefinitionConfigs),
58
+ BeforeStep: this.defineTestStepHook(() => this.beforeTestStepHookDefinitionConfigs),
59
+ defineParameterType: this.defineParameterType.bind(this),
60
+ defineStep: this.defineStep('Unknown', () => this.stepDefinitionConfigs),
61
+ Given: this.defineStep('Given', () => this.stepDefinitionConfigs),
62
+ setDefaultTimeout: milliseconds => {
63
+ this.defaultTimeout = milliseconds;
64
+ },
65
+ setDefinitionFunctionWrapper: fn => {
66
+ this.definitionFunctionWrapper = fn;
67
+ },
68
+ setWorldConstructor: fn => {
69
+ this.World = fn;
70
+ },
71
+ setParallelCanAssign: (fn) => {
72
+ this.parallelCanAssign = fn;
73
+ },
74
+ Then: this.defineStep('Then', () => this.stepDefinitionConfigs),
75
+ When: this.defineStep('When', () => this.stepDefinitionConfigs)
76
+ };
77
+ const checkInstall = (method) => {
78
+ if (this.status === 'PENDING') {
79
+ throw new Error(`
80
+ You're calling functions (e.g. "${method}") on an instance of Cucumber that isn't running (status: ${this.status}).
81
+ This means you may have an invalid installation, potentially due to:
82
+ - Cucumber being installed globally
83
+ - A project structure where your support code is depending on a different instance of Cucumber
84
+ Either way, you'll need to address this in order for Cucumber to work.
85
+ See https://github.com/cucumber/cucumber-js/blob/main/docs/installation.md#invalid-installations
86
+ `);
87
+ }
88
+ };
89
+ this.methods = new Proxy(methods, {
90
+ get(target, method) {
91
+ return (...args) => {
92
+ checkInstall(method);
93
+ // @ts-expect-error difficult to type this correctly
94
+ return target[method](...args);
95
+ };
96
+ }
97
+ });
98
+ }
99
+ defineParameterType(options) {
100
+ const parameterType = (0, build_parameter_type_1.buildParameterType)(options);
101
+ const source = (0, get_definition_line_and_uri_1.getDefinitionLineAndUri)(this.cwd);
102
+ this.parameterTypeRegistry.defineSourcedParameterType(parameterType, source);
103
+ }
104
+ defineStep(keyword, getCollection) {
105
+ return (pattern, options, code) => {
106
+ if (typeof options === 'function') {
107
+ code = options;
108
+ options = {};
109
+ }
110
+ const { line, uri } = (0, get_definition_line_and_uri_1.getDefinitionLineAndUri)(this.cwd);
111
+ (0, validate_arguments_1.default)({
112
+ args: { code, pattern, options },
113
+ fnName: 'defineStep',
114
+ location: (0, index_1.formatLocation)({ line, uri })
115
+ });
116
+ getCollection().push({
117
+ code,
118
+ line,
119
+ options,
120
+ keyword,
121
+ pattern,
122
+ uri
123
+ });
124
+ };
125
+ }
126
+ defineTestCaseHook(getCollection) {
127
+ return (options, code) => {
128
+ if (typeof options === 'string') {
129
+ options = { tags: options };
130
+ }
131
+ else if (typeof options === 'function') {
132
+ code = options;
133
+ options = {};
134
+ }
135
+ const { line, uri } = (0, get_definition_line_and_uri_1.getDefinitionLineAndUri)(this.cwd);
136
+ (0, validate_arguments_1.default)({
137
+ args: { code, options },
138
+ fnName: 'defineTestCaseHook',
139
+ location: (0, index_1.formatLocation)({ line, uri })
140
+ });
141
+ getCollection().push({
142
+ code,
143
+ line,
144
+ options,
145
+ uri
146
+ });
147
+ };
148
+ }
149
+ defineTestStepHook(getCollection) {
150
+ return (options, code) => {
151
+ if (typeof options === 'string') {
152
+ options = { tags: options };
153
+ }
154
+ else if (typeof options === 'function') {
155
+ code = options;
156
+ options = {};
157
+ }
158
+ const { line, uri } = (0, get_definition_line_and_uri_1.getDefinitionLineAndUri)(this.cwd);
159
+ (0, validate_arguments_1.default)({
160
+ args: { code, options },
161
+ fnName: 'defineTestStepHook',
162
+ location: (0, index_1.formatLocation)({ line, uri })
163
+ });
164
+ getCollection().push({
165
+ code,
166
+ line,
167
+ options,
168
+ uri
169
+ });
170
+ };
171
+ }
172
+ defineTestRunHook(getCollection) {
173
+ return (options, code) => {
174
+ if (typeof options === 'function') {
175
+ code = options;
176
+ options = {};
177
+ }
178
+ const { line, uri } = (0, get_definition_line_and_uri_1.getDefinitionLineAndUri)(this.cwd);
179
+ (0, validate_arguments_1.default)({
180
+ args: { code, options },
181
+ fnName: 'defineTestRunHook',
182
+ location: (0, index_1.formatLocation)({ line, uri })
183
+ });
184
+ getCollection().push({
185
+ code,
186
+ line,
187
+ options,
188
+ uri
189
+ });
190
+ };
191
+ }
192
+ wrapCode({ code, wrapperOptions }) {
193
+ if ((0, value_checker_1.doesHaveValue)(this.definitionFunctionWrapper)) {
194
+ const codeLength = code.length;
195
+ const wrappedCode = this.definitionFunctionWrapper(code, wrapperOptions);
196
+ if (wrappedCode !== code) {
197
+ return (0, util_arity_1.default)(codeLength, wrappedCode);
198
+ }
199
+ return wrappedCode;
200
+ }
201
+ return code;
202
+ }
203
+ buildTestCaseHookDefinitions(configs, canonicalIds) {
204
+ return configs.map(({ code, line, options, uri }, index) => {
205
+ const wrappedCode = this.wrapCode({
206
+ code,
207
+ wrapperOptions: options.wrapperOptions
208
+ });
209
+ return new test_case_hook_definition_1.default({
210
+ code: wrappedCode,
211
+ id: canonicalIds ? canonicalIds[index] : this.newId(),
212
+ line,
213
+ options,
214
+ unwrappedCode: code,
215
+ uri
216
+ });
217
+ });
218
+ }
219
+ buildTestStepHookDefinitions(configs) {
220
+ return configs.map(({ code, line, options, uri }) => {
221
+ const wrappedCode = this.wrapCode({
222
+ code,
223
+ wrapperOptions: options.wrapperOptions
224
+ });
225
+ return new test_step_hook_definition_1.default({
226
+ code: wrappedCode,
227
+ id: this.newId(),
228
+ line,
229
+ options,
230
+ unwrappedCode: code,
231
+ uri
232
+ });
233
+ });
234
+ }
235
+ buildTestRunHookDefinitions(configs) {
236
+ return configs.map(({ code, line, options, uri }) => {
237
+ const wrappedCode = this.wrapCode({
238
+ code,
239
+ wrapperOptions: options.wrapperOptions
240
+ });
241
+ return new test_run_hook_definition_1.default({
242
+ code: wrappedCode,
243
+ id: this.newId(),
244
+ line,
245
+ options,
246
+ unwrappedCode: code,
247
+ uri
248
+ });
249
+ });
250
+ }
251
+ buildStepDefinitions(canonicalIds) {
252
+ const stepDefinitions = [];
253
+ const undefinedParameterTypes = [];
254
+ this.stepDefinitionConfigs.forEach(({ code, line, options, keyword, pattern, uri }, index) => {
255
+ let expression;
256
+ if (typeof pattern === 'string') {
257
+ try {
258
+ expression = new cucumber_expressions_1.CucumberExpression(pattern, this.parameterTypeRegistry);
259
+ }
260
+ catch (e) {
261
+ if ((0, value_checker_1.doesHaveValue)(e.undefinedParameterTypeName)) {
262
+ undefinedParameterTypes.push({
263
+ name: e.undefinedParameterTypeName,
264
+ expression: pattern
265
+ });
266
+ return;
267
+ }
268
+ throw e;
269
+ }
270
+ }
271
+ else {
272
+ expression = new cucumber_expressions_1.RegularExpression(pattern, this.parameterTypeRegistry);
273
+ }
274
+ const wrappedCode = this.wrapCode({
275
+ code,
276
+ wrapperOptions: options.wrapperOptions
277
+ });
278
+ stepDefinitions.push(new step_definition_1.default({
279
+ code: wrappedCode,
280
+ expression,
281
+ id: canonicalIds ? canonicalIds[index] : this.newId(),
282
+ line,
283
+ options,
284
+ keyword,
285
+ pattern,
286
+ unwrappedCode: code,
287
+ uri
288
+ }));
289
+ });
290
+ return { stepDefinitions, undefinedParameterTypes };
291
+ }
292
+ finalize(canonicalIds) {
293
+ this.status = 'FINALIZED';
294
+ const stepDefinitionsResult = this.buildStepDefinitions(canonicalIds?.stepDefinitionIds);
295
+ return {
296
+ originalCoordinates: this.originalCoordinates,
297
+ afterTestCaseHookDefinitions: this.buildTestCaseHookDefinitions(this.afterTestCaseHookDefinitionConfigs, canonicalIds?.afterTestCaseHookDefinitionIds),
298
+ afterTestRunHookDefinitions: this.buildTestRunHookDefinitions(this.afterTestRunHookDefinitionConfigs),
299
+ afterTestStepHookDefinitions: this.buildTestStepHookDefinitions(this.afterTestStepHookDefinitionConfigs),
300
+ beforeTestCaseHookDefinitions: this.buildTestCaseHookDefinitions(this.beforeTestCaseHookDefinitionConfigs, canonicalIds?.beforeTestCaseHookDefinitionIds),
301
+ beforeTestRunHookDefinitions: this.buildTestRunHookDefinitions(this.beforeTestRunHookDefinitionConfigs),
302
+ beforeTestStepHookDefinitions: this.buildTestStepHookDefinitions(this.beforeTestStepHookDefinitionConfigs),
303
+ defaultTimeout: this.defaultTimeout,
304
+ parameterTypeRegistry: this.parameterTypeRegistry,
305
+ undefinedParameterTypes: stepDefinitionsResult.undefinedParameterTypes,
306
+ stepDefinitions: stepDefinitionsResult.stepDefinitions,
307
+ World: this.World,
308
+ parallelCanAssign: this.parallelCanAssign
309
+ };
310
+ }
311
+ reset(cwd, newId, originalCoordinates = {
312
+ requireModules: [],
313
+ requirePaths: [],
314
+ importPaths: [],
315
+ loaders: []
316
+ }) {
317
+ this.cwd = cwd;
318
+ this.newId = newId;
319
+ this.originalCoordinates = originalCoordinates;
320
+ this.afterTestCaseHookDefinitionConfigs = [];
321
+ this.afterTestRunHookDefinitionConfigs = [];
322
+ this.afterTestStepHookDefinitionConfigs = [];
323
+ this.beforeTestCaseHookDefinitionConfigs = [];
324
+ this.beforeTestRunHookDefinitionConfigs = [];
325
+ this.beforeTestStepHookDefinitionConfigs = [];
326
+ this.definitionFunctionWrapper = null;
327
+ this.defaultTimeout = 5000;
328
+ this.parameterTypeRegistry = new sourced_parameter_type_registry_1.SourcedParameterTypeRegistry();
329
+ this.stepDefinitionConfigs = [];
330
+ this.parallelCanAssign = () => true;
331
+ this.World = world_1.default;
332
+ this.status = 'OPEN';
333
+ }
334
+ }
335
+ exports.SupportCodeLibraryBuilder = SupportCodeLibraryBuilder;
336
+ exports.default = SupportCodeLibraryBuilder.instance;
337
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/support_code_library_builder/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { IdGenerator } from '@cucumber/messages';\r\nimport * as messages from '@cucumber/messages';\r\nimport arity from 'util-arity';\r\nimport { CucumberExpression, RegularExpression } from '@cucumber/cucumber-expressions';\r\nimport TestCaseHookDefinition from '@cucumber/cucumber/lib/models/test_case_hook_definition';\r\nimport TestStepHookDefinition from '@cucumber/cucumber/lib/models/test_step_hook_definition';\r\nimport TestRunHookDefinition from '@cucumber/cucumber/lib/models/test_run_hook_definition';\r\nimport StepDefinition from '@cucumber/cucumber/lib/models/step_definition';\r\nimport { formatLocation } from '@cucumber/cucumber/lib/formatter/helpers/index';\r\nimport { doesHaveValue } from '@cucumber/cucumber/lib/value_checker';\r\nimport { GherkinStepKeyword } from '@cucumber/cucumber/lib/models/gherkin_step_keyword';\r\nimport validateArguments from '@cucumber/cucumber/lib/support_code_library_builder/validate_arguments';\r\n\r\nimport {\r\n\tDefineStepPattern,\r\n\tIDefineStepOptions,\r\n\tIDefineSupportCodeMethods,\r\n\tIDefineTestCaseHookOptions,\r\n\tIDefineTestStepHookOptions,\r\n\tIDefineTestRunHookOptions,\r\n\tIParameterTypeDefinition,\r\n\tSupportCodeLibrary,\r\n\tTestCaseHookFunction,\r\n\tTestStepHookFunction,\r\n\tParallelAssignmentValidator,\r\n\tISupportCodeCoordinates,\r\n\tIDefineStep,\r\n\tCanonicalSupportCodeIds\r\n} from '@cucumber/cucumber/lib/support_code_library_builder/types';\r\nimport World from '@cucumber/cucumber/lib/support_code_library_builder/world';\r\nimport { getDefinitionLineAndUri } from '@cucumber/cucumber/lib/support_code_library_builder/get_definition_line_and_uri';\r\nimport { buildParameterType } from '@cucumber/cucumber/lib/support_code_library_builder/build_parameter_type';\r\nimport { SourcedParameterTypeRegistry } from '@cucumber/cucumber/lib/support_code_library_builder/sourced_parameter_type_registry';\r\n\r\ninterface IStepDefinitionConfig {\r\n\tcode: Function;\r\n\tline: number;\r\n\toptions: any;\r\n\tkeyword: GherkinStepKeyword;\r\n\tpattern: string | RegExp;\r\n\turi: string;\r\n}\r\n\r\ninterface ITestCaseHookDefinitionConfig {\r\n\tcode: any;\r\n\tline: number;\r\n\toptions: any;\r\n\turi: string;\r\n}\r\n\r\ninterface ITestStepHookDefinitionConfig {\r\n\tcode: Function;\r\n\tline: number;\r\n\toptions: any;\r\n\turi: string;\r\n}\r\n\r\ninterface ITestRunHookDefinitionConfig {\r\n\tcode: Function;\r\n\tline: number;\r\n\toptions: any;\r\n\turi: string;\r\n}\r\n\r\ntype LibraryStatus = 'PENDING' | 'OPEN' | 'FINALIZED';\r\n\r\nexport class SupportCodeLibraryBuilder {\r\n\tpublic readonly methods: IDefineSupportCodeMethods;\r\n\tprivate originalCoordinates: ISupportCodeCoordinates;\r\n\tprivate afterTestCaseHookDefinitionConfigs: ITestCaseHookDefinitionConfig[];\r\n\tprivate afterTestRunHookDefinitionConfigs: ITestRunHookDefinitionConfig[];\r\n\tprivate afterTestStepHookDefinitionConfigs: ITestStepHookDefinitionConfig[];\r\n\tprivate beforeTestCaseHookDefinitionConfigs: ITestCaseHookDefinitionConfig[];\r\n\tprivate beforeTestRunHookDefinitionConfigs: ITestRunHookDefinitionConfig[];\r\n\tprivate beforeTestStepHookDefinitionConfigs: ITestStepHookDefinitionConfig[];\r\n\tprivate cwd: string;\r\n\tprivate defaultTimeout: number;\r\n\tprivate definitionFunctionWrapper: any;\r\n\tprivate newId: IdGenerator.NewId;\r\n\tprivate parameterTypeRegistry: SourcedParameterTypeRegistry;\r\n\tprivate stepDefinitionConfigs: IStepDefinitionConfig[];\r\n\tprivate World: any;\r\n\tprivate parallelCanAssign: ParallelAssignmentValidator;\r\n\tprivate status: LibraryStatus = 'PENDING';\r\n\r\n\t/**\r\n\t * Gets the SupportCodeLibraryBuilder singleton.\r\n\t *\r\n\t * @returns A [[SupportCodeLibraryBuilder]].\r\n\t */\r\n\tpublic static get instance(): SupportCodeLibraryBuilder {\r\n\t\tconst SUPPORT_CODE_BUILDER_SLOTNAME = '__CUCUMBER_TSFLOW_SUPPORTCODEBUILDER';\r\n\r\n\t\tconst builder = (global as any)[SUPPORT_CODE_BUILDER_SLOTNAME];\r\n\r\n\t\tif (!builder) {\r\n\t\t\t(global as any)[SUPPORT_CODE_BUILDER_SLOTNAME] = new SupportCodeLibraryBuilder();\r\n\t\t}\r\n\r\n\t\treturn builder || (global as any)[SUPPORT_CODE_BUILDER_SLOTNAME];\r\n\t}\r\n\r\n\tconstructor() {\r\n\t\tconst methods: IDefineSupportCodeMethods = {\r\n\t\t\tAfter: this.defineTestCaseHook(() => this.afterTestCaseHookDefinitionConfigs),\r\n\t\t\tAfterAll: this.defineTestRunHook(() => this.afterTestRunHookDefinitionConfigs),\r\n\t\t\tAfterStep: this.defineTestStepHook(() => this.afterTestStepHookDefinitionConfigs),\r\n\t\t\tBefore: this.defineTestCaseHook(() => this.beforeTestCaseHookDefinitionConfigs),\r\n\t\t\tBeforeAll: this.defineTestRunHook(() => this.beforeTestRunHookDefinitionConfigs),\r\n\t\t\tBeforeStep: this.defineTestStepHook(() => this.beforeTestStepHookDefinitionConfigs),\r\n\t\t\tdefineParameterType: this.defineParameterType.bind(this),\r\n\t\t\tdefineStep: this.defineStep('Unknown', () => this.stepDefinitionConfigs),\r\n\t\t\tGiven: this.defineStep('Given', () => this.stepDefinitionConfigs),\r\n\t\t\tsetDefaultTimeout: milliseconds => {\r\n\t\t\t\tthis.defaultTimeout = milliseconds;\r\n\t\t\t},\r\n\t\t\tsetDefinitionFunctionWrapper: fn => {\r\n\t\t\t\tthis.definitionFunctionWrapper = fn;\r\n\t\t\t},\r\n\t\t\tsetWorldConstructor: fn => {\r\n\t\t\t\tthis.World = fn;\r\n\t\t\t},\r\n\t\t\tsetParallelCanAssign: (fn: ParallelAssignmentValidator): void => {\r\n\t\t\t\tthis.parallelCanAssign = fn;\r\n\t\t\t},\r\n\t\t\tThen: this.defineStep('Then', () => this.stepDefinitionConfigs),\r\n\t\t\tWhen: this.defineStep('When', () => this.stepDefinitionConfigs)\r\n\t\t};\r\n\t\tconst checkInstall = (method: string) => {\r\n\t\t\tif (this.status === 'PENDING') {\r\n\t\t\t\tthrow new Error(\r\n\t\t\t\t\t`\r\n You're calling functions (e.g. \"${method}\") on an instance of Cucumber that isn't running (status: ${this.status}).\r\n This means you may have an invalid installation, potentially due to:\r\n - Cucumber being installed globally\r\n - A project structure where your support code is depending on a different instance of Cucumber\r\n Either way, you'll need to address this in order for Cucumber to work.\r\n See https://github.com/cucumber/cucumber-js/blob/main/docs/installation.md#invalid-installations\r\n `\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t};\r\n\t\tthis.methods = new Proxy(methods, {\r\n\t\t\tget(target: IDefineSupportCodeMethods, method: keyof IDefineSupportCodeMethods): any {\r\n\t\t\t\treturn (...args: any[]) => {\r\n\t\t\t\t\tcheckInstall(method);\r\n\t\t\t\t\t// @ts-expect-error difficult to type this correctly\r\n\t\t\t\t\treturn target[method](...args);\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tdefineParameterType(options: IParameterTypeDefinition<any>): void {\r\n\t\tconst parameterType = buildParameterType(options);\r\n\t\tconst source = getDefinitionLineAndUri(this.cwd);\r\n\t\tthis.parameterTypeRegistry.defineSourcedParameterType(parameterType, source);\r\n\t}\r\n\r\n\tdefineStep(keyword: GherkinStepKeyword, getCollection: () => IStepDefinitionConfig[]): IDefineStep {\r\n\t\treturn (pattern: DefineStepPattern, options: IDefineStepOptions | Function, code?: Function) => {\r\n\t\t\tif (typeof options === 'function') {\r\n\t\t\t\tcode = options;\r\n\t\t\t\toptions = {};\r\n\t\t\t}\r\n\t\t\tconst { line, uri } = getDefinitionLineAndUri(this.cwd);\r\n\t\t\tvalidateArguments({\r\n\t\t\t\targs: { code, pattern, options },\r\n\t\t\t\tfnName: 'defineStep',\r\n\t\t\t\tlocation: formatLocation({ line, uri })\r\n\t\t\t});\r\n\t\t\tgetCollection().push({\r\n\t\t\t\tcode,\r\n\t\t\t\tline,\r\n\t\t\t\toptions,\r\n\t\t\t\tkeyword,\r\n\t\t\t\tpattern,\r\n\t\t\t\turi\r\n\t\t\t});\r\n\t\t};\r\n\t}\r\n\r\n\tdefineTestCaseHook(\r\n\t\tgetCollection: () => ITestCaseHookDefinitionConfig[]\r\n\t): <WorldType>(\r\n\t\toptions: string | IDefineTestCaseHookOptions | TestCaseHookFunction<WorldType>,\r\n\t\tcode?: TestCaseHookFunction<WorldType>\r\n\t) => void {\r\n\t\treturn <WorldType>(\r\n\t\t\toptions: string | IDefineTestCaseHookOptions | TestCaseHookFunction<WorldType>,\r\n\t\t\tcode?: TestCaseHookFunction<WorldType>\r\n\t\t) => {\r\n\t\t\tif (typeof options === 'string') {\r\n\t\t\t\toptions = { tags: options };\r\n\t\t\t} else if (typeof options === 'function') {\r\n\t\t\t\tcode = options;\r\n\t\t\t\toptions = {};\r\n\t\t\t}\r\n\t\t\tconst { line, uri } = getDefinitionLineAndUri(this.cwd);\r\n\t\t\tvalidateArguments({\r\n\t\t\t\targs: { code, options },\r\n\t\t\t\tfnName: 'defineTestCaseHook',\r\n\t\t\t\tlocation: formatLocation({ line, uri })\r\n\t\t\t});\r\n\t\t\tgetCollection().push({\r\n\t\t\t\tcode,\r\n\t\t\t\tline,\r\n\t\t\t\toptions,\r\n\t\t\t\turi\r\n\t\t\t});\r\n\t\t};\r\n\t}\r\n\r\n\tdefineTestStepHook(\r\n\t\tgetCollection: () => ITestStepHookDefinitionConfig[]\r\n\t): <WorldType>(\r\n\t\toptions: string | IDefineTestStepHookOptions | TestStepHookFunction<WorldType>,\r\n\t\tcode?: TestStepHookFunction<WorldType>\r\n\t) => void {\r\n\t\treturn <WorldType>(\r\n\t\t\toptions: string | IDefineTestStepHookOptions | TestStepHookFunction<WorldType>,\r\n\t\t\tcode?: TestStepHookFunction<WorldType>\r\n\t\t) => {\r\n\t\t\tif (typeof options === 'string') {\r\n\t\t\t\toptions = { tags: options };\r\n\t\t\t} else if (typeof options === 'function') {\r\n\t\t\t\tcode = options;\r\n\t\t\t\toptions = {};\r\n\t\t\t}\r\n\t\t\tconst { line, uri } = getDefinitionLineAndUri(this.cwd);\r\n\t\t\tvalidateArguments({\r\n\t\t\t\targs: { code, options },\r\n\t\t\t\tfnName: 'defineTestStepHook',\r\n\t\t\t\tlocation: formatLocation({ line, uri })\r\n\t\t\t});\r\n\t\t\tgetCollection().push({\r\n\t\t\t\tcode,\r\n\t\t\t\tline,\r\n\t\t\t\toptions,\r\n\t\t\t\turi\r\n\t\t\t});\r\n\t\t};\r\n\t}\r\n\r\n\tdefineTestRunHook(\r\n\t\tgetCollection: () => ITestRunHookDefinitionConfig[]\r\n\t): (options: IDefineTestRunHookOptions | Function, code?: Function) => void {\r\n\t\treturn (options: IDefineTestRunHookOptions | Function, code?: Function) => {\r\n\t\t\tif (typeof options === 'function') {\r\n\t\t\t\tcode = options;\r\n\t\t\t\toptions = {};\r\n\t\t\t}\r\n\t\t\tconst { line, uri } = getDefinitionLineAndUri(this.cwd);\r\n\t\t\tvalidateArguments({\r\n\t\t\t\targs: { code, options },\r\n\t\t\t\tfnName: 'defineTestRunHook',\r\n\t\t\t\tlocation: formatLocation({ line, uri })\r\n\t\t\t});\r\n\t\t\tgetCollection().push({\r\n\t\t\t\tcode,\r\n\t\t\t\tline,\r\n\t\t\t\toptions,\r\n\t\t\t\turi\r\n\t\t\t});\r\n\t\t};\r\n\t}\r\n\r\n\twrapCode({ code, wrapperOptions }: { code: Function; wrapperOptions: any }): Function {\r\n\t\tif (doesHaveValue(this.definitionFunctionWrapper)) {\r\n\t\t\tconst codeLength = code.length;\r\n\t\t\tconst wrappedCode = this.definitionFunctionWrapper(code, wrapperOptions);\r\n\t\t\tif (wrappedCode !== code) {\r\n\t\t\t\treturn arity(codeLength, wrappedCode);\r\n\t\t\t}\r\n\t\t\treturn wrappedCode;\r\n\t\t}\r\n\t\treturn code;\r\n\t}\r\n\r\n\tbuildTestCaseHookDefinitions(\r\n\t\tconfigs: ITestCaseHookDefinitionConfig[],\r\n\t\tcanonicalIds?: string[]\r\n\t): TestCaseHookDefinition[] {\r\n\t\treturn configs.map(({ code, line, options, uri }, index) => {\r\n\t\t\tconst wrappedCode = this.wrapCode({\r\n\t\t\t\tcode,\r\n\t\t\t\twrapperOptions: options.wrapperOptions\r\n\t\t\t});\r\n\t\t\treturn new TestCaseHookDefinition({\r\n\t\t\t\tcode: wrappedCode,\r\n\t\t\t\tid: canonicalIds ? canonicalIds[index] : this.newId(),\r\n\t\t\t\tline,\r\n\t\t\t\toptions,\r\n\t\t\t\tunwrappedCode: code,\r\n\t\t\t\turi\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tbuildTestStepHookDefinitions(configs: ITestStepHookDefinitionConfig[]): TestStepHookDefinition[] {\r\n\t\treturn configs.map(({ code, line, options, uri }) => {\r\n\t\t\tconst wrappedCode = this.wrapCode({\r\n\t\t\t\tcode,\r\n\t\t\t\twrapperOptions: options.wrapperOptions\r\n\t\t\t});\r\n\t\t\treturn new TestStepHookDefinition({\r\n\t\t\t\tcode: wrappedCode,\r\n\t\t\t\tid: this.newId(),\r\n\t\t\t\tline,\r\n\t\t\t\toptions,\r\n\t\t\t\tunwrappedCode: code,\r\n\t\t\t\turi\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tbuildTestRunHookDefinitions(configs: ITestRunHookDefinitionConfig[]): TestRunHookDefinition[] {\r\n\t\treturn configs.map(({ code, line, options, uri }) => {\r\n\t\t\tconst wrappedCode = this.wrapCode({\r\n\t\t\t\tcode,\r\n\t\t\t\twrapperOptions: options.wrapperOptions\r\n\t\t\t});\r\n\t\t\treturn new TestRunHookDefinition({\r\n\t\t\t\tcode: wrappedCode,\r\n\t\t\t\tid: this.newId(),\r\n\t\t\t\tline,\r\n\t\t\t\toptions,\r\n\t\t\t\tunwrappedCode: code,\r\n\t\t\t\turi\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tbuildStepDefinitions(canonicalIds?: string[]): {\r\n\t\tstepDefinitions: StepDefinition[];\r\n\t\tundefinedParameterTypes: messages.UndefinedParameterType[];\r\n\t} {\r\n\t\tconst stepDefinitions: StepDefinition[] = [];\r\n\t\tconst undefinedParameterTypes: messages.UndefinedParameterType[] = [];\r\n\t\tthis.stepDefinitionConfigs.forEach(({ code, line, options, keyword, pattern, uri }, index) => {\r\n\t\t\tlet expression;\r\n\t\t\tif (typeof pattern === 'string') {\r\n\t\t\t\ttry {\r\n\t\t\t\t\texpression = new CucumberExpression(pattern, this.parameterTypeRegistry);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tif (doesHaveValue(e.undefinedParameterTypeName)) {\r\n\t\t\t\t\t\tundefinedParameterTypes.push({\r\n\t\t\t\t\t\t\tname: e.undefinedParameterTypeName,\r\n\t\t\t\t\t\t\texpression: pattern\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthrow e;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\texpression = new RegularExpression(pattern, this.parameterTypeRegistry);\r\n\t\t\t}\r\n\r\n\t\t\tconst wrappedCode = this.wrapCode({\r\n\t\t\t\tcode,\r\n\t\t\t\twrapperOptions: options.wrapperOptions\r\n\t\t\t});\r\n\t\t\tstepDefinitions.push(\r\n\t\t\t\tnew StepDefinition({\r\n\t\t\t\t\tcode: wrappedCode,\r\n\t\t\t\t\texpression,\r\n\t\t\t\t\tid: canonicalIds ? canonicalIds[index] : this.newId(),\r\n\t\t\t\t\tline,\r\n\t\t\t\t\toptions,\r\n\t\t\t\t\tkeyword,\r\n\t\t\t\t\tpattern,\r\n\t\t\t\t\tunwrappedCode: code,\r\n\t\t\t\t\turi\r\n\t\t\t\t})\r\n\t\t\t);\r\n\t\t});\r\n\t\treturn { stepDefinitions, undefinedParameterTypes };\r\n\t}\r\n\r\n\tfinalize(canonicalIds?: CanonicalSupportCodeIds): SupportCodeLibrary {\r\n\t\tthis.status = 'FINALIZED';\r\n\t\tconst stepDefinitionsResult = this.buildStepDefinitions(canonicalIds?.stepDefinitionIds);\r\n\t\treturn {\r\n\t\t\toriginalCoordinates: this.originalCoordinates,\r\n\t\t\tafterTestCaseHookDefinitions: this.buildTestCaseHookDefinitions(\r\n\t\t\t\tthis.afterTestCaseHookDefinitionConfigs,\r\n\t\t\t\tcanonicalIds?.afterTestCaseHookDefinitionIds\r\n\t\t\t),\r\n\t\t\tafterTestRunHookDefinitions: this.buildTestRunHookDefinitions(this.afterTestRunHookDefinitionConfigs),\r\n\t\t\tafterTestStepHookDefinitions: this.buildTestStepHookDefinitions(this.afterTestStepHookDefinitionConfigs),\r\n\t\t\tbeforeTestCaseHookDefinitions: this.buildTestCaseHookDefinitions(\r\n\t\t\t\tthis.beforeTestCaseHookDefinitionConfigs,\r\n\t\t\t\tcanonicalIds?.beforeTestCaseHookDefinitionIds\r\n\t\t\t),\r\n\t\t\tbeforeTestRunHookDefinitions: this.buildTestRunHookDefinitions(this.beforeTestRunHookDefinitionConfigs),\r\n\t\t\tbeforeTestStepHookDefinitions: this.buildTestStepHookDefinitions(this.beforeTestStepHookDefinitionConfigs),\r\n\t\t\tdefaultTimeout: this.defaultTimeout,\r\n\t\t\tparameterTypeRegistry: this.parameterTypeRegistry,\r\n\t\t\tundefinedParameterTypes: stepDefinitionsResult.undefinedParameterTypes,\r\n\t\t\tstepDefinitions: stepDefinitionsResult.stepDefinitions,\r\n\t\t\tWorld: this.World,\r\n\t\t\tparallelCanAssign: this.parallelCanAssign\r\n\t\t};\r\n\t}\r\n\r\n\treset(\r\n\t\tcwd: string,\r\n\t\tnewId: IdGenerator.NewId,\r\n\t\toriginalCoordinates: ISupportCodeCoordinates = {\r\n\t\t\trequireModules: [],\r\n\t\t\trequirePaths: [],\r\n\t\t\timportPaths: [],\r\n\t\t\tloaders: []\r\n\t\t}\r\n\t): void {\r\n\t\tthis.cwd = cwd;\r\n\t\tthis.newId = newId;\r\n\t\tthis.originalCoordinates = originalCoordinates;\r\n\t\tthis.afterTestCaseHookDefinitionConfigs = [];\r\n\t\tthis.afterTestRunHookDefinitionConfigs = [];\r\n\t\tthis.afterTestStepHookDefinitionConfigs = [];\r\n\t\tthis.beforeTestCaseHookDefinitionConfigs = [];\r\n\t\tthis.beforeTestRunHookDefinitionConfigs = [];\r\n\t\tthis.beforeTestStepHookDefinitionConfigs = [];\r\n\t\tthis.definitionFunctionWrapper = null;\r\n\t\tthis.defaultTimeout = 5000;\r\n\t\tthis.parameterTypeRegistry = new SourcedParameterTypeRegistry();\r\n\t\tthis.stepDefinitionConfigs = [];\r\n\t\tthis.parallelCanAssign = () => true;\r\n\t\tthis.World = World;\r\n\t\tthis.status = 'OPEN';\r\n\t}\r\n}\r\n\r\nexport default SupportCodeLibraryBuilder.instance;\r\n"]}
@@ -108,6 +108,7 @@ export function resolveTsconfigPaths(specifier) {
108
108
  if (mapped) {
109
109
  const result = {
110
110
  url: pathToFileURL(mapped).href,
111
+ format: 'module',
111
112
  shortCircuit: true
112
113
  };
113
114
  pathResolutionCache.set(specifier, result);
@@ -121,6 +122,7 @@ export function resolveTsconfigPaths(specifier) {
121
122
  if (mappedWithExt) {
122
123
  const result = {
123
124
  url: pathToFileURL(mappedWithExt).href,
125
+ format: 'module',
124
126
  shortCircuit: true
125
127
  };
126
128
  pathResolutionCache.set(specifier, result);
@@ -272,7 +274,11 @@ export async function resolveSpecifier(specifier, context, options = {}) {
272
274
  // Try to resolve with extensions
273
275
  const resolved = await resolveWithExtensions(mappedUrl, context.parentURL);
274
276
  if (resolved) {
275
- return { url: resolved, shortCircuit: true };
277
+ return {
278
+ url: resolved,
279
+ format: 'module',
280
+ shortCircuit: true
281
+ };
276
282
  }
277
283
  }
278
284
 
@@ -282,7 +288,8 @@ export async function resolveSpecifier(specifier, context, options = {}) {
282
288
  // 2. Handle TypeScript files if requested
283
289
  if (handleTsFiles && tsNodeHooks && (specifier.endsWith('.ts') || specifier.endsWith('.tsx'))) {
284
290
  try {
285
- return await tsNodeHooks.resolve(specifier, context, nextResolve);
291
+ const resolved = await tsNodeHooks.resolve(specifier, context, nextResolve);
292
+ return { ...resolved, format: 'module' };
286
293
  } catch (error) {
287
294
  // Fall through to extension resolution
288
295
  }
@@ -295,7 +302,11 @@ export async function resolveSpecifier(specifier, context, options = {}) {
295
302
  if (!hasExtension && context.parentURL) {
296
303
  const resolved = await resolveWithExtensions(specifier, context.parentURL);
297
304
  if (resolved) {
298
- return { url: resolved, shortCircuit: true };
305
+ return {
306
+ url: resolved,
307
+ format: 'module',
308
+ shortCircuit: true
309
+ };
299
310
  }
300
311
  }
301
312
  }
@@ -1 +1 @@
1
- {"root":["../src/behave.ts","../src/index.ts","../src/junitbamboo.ts","../src/snippet.ts","../src/version.ts","../src/api/convert-configuration.ts","../src/api/index.ts","../src/api/load-configuration.ts","../src/api/load-support.ts","../src/api/run-cucumber.ts","../src/bindings/binding-context.ts","../src/bindings/binding-decorator.ts","../src/bindings/binding-registry.ts","../src/bindings/hook-decorators.ts","../src/bindings/step-binding.ts","../src/bindings/step-decorators.ts","../src/bindings/types.ts","../src/cli/argv-parser.ts","../src/cli/index.ts","../src/cli/run.ts","../src/formatter/behave-json-formatter.ts","../src/formatter/junit-bamboo-formatter.ts","../src/formatter/step-definition-snippit-syntax/tsflow-snippet-syntax.ts","../src/gherkin/configuration.ts","../src/gherkin/gherkin-feature.ts","../src/gherkin/gherkin-manager.ts","../src/gherkin/models.ts","../src/runtime/coordinator.ts","../src/runtime/make-runtime.ts","../src/runtime/managed-scenario-context.ts","../src/runtime/message-collector.ts","../src/runtime/scenario-context.ts","../src/runtime/scenario-info.ts","../src/runtime/test-case-info.ts","../src/runtime/test-case-runner.ts","../src/runtime/types.ts","../src/runtime/utils.ts","../src/runtime/worker.ts","../src/runtime/parallel/adapter.ts","../src/runtime/parallel/run-worker.ts","../src/runtime/parallel/worker.ts","../src/runtime/serial/adapter.ts","../src/transpilers/esbuild-transpiler.ts","../src/transpilers/esbuild.ts","../src/transpilers/esnode.ts","../src/transpilers/esvue.ts","../src/transpilers/tsnode-exp.ts","../src/transpilers/tsnode.ts","../src/transpilers/tsvue-exp.ts","../src/transpilers/tsvue.ts","../src/transpilers/vue-sfc/compiler.ts","../src/transpilers/vue-sfc/index.ts","../src/transpilers/vue-sfc/main.ts","../src/transpilers/vue-sfc/script.ts","../src/transpilers/vue-sfc/template.ts","../src/transpilers/vue-sfc/types.ts","../src/transpilers/vue-sfc/utils/descriptorcache.ts","../src/transpilers/vue-sfc/utils/error.ts","../src/transpilers/vue-sfc/utils/query.ts","../src/types/durations.d.ts","../src/types/global.d.ts","../src/types/lep.d.ts","../src/types/vue-shim.d.ts","../src/utils/helpers.ts","../src/utils/logger.ts","../src/utils/our-callsite.ts"],"version":"5.9.2"}
1
+ {"root":["../src/behave.ts","../src/index.ts","../src/junitbamboo.ts","../src/snippet.ts","../src/version.ts","../src/api/convert-configuration.ts","../src/api/index.ts","../src/api/load-configuration.ts","../src/api/load-support.ts","../src/api/run-cucumber.ts","../src/api/support.ts","../src/bindings/binding-context.ts","../src/bindings/binding-decorator.ts","../src/bindings/binding-registry.ts","../src/bindings/hook-decorators.ts","../src/bindings/step-binding.ts","../src/bindings/step-decorators.ts","../src/bindings/types.ts","../src/cli/argv-parser.ts","../src/cli/index.ts","../src/cli/run.ts","../src/formatter/behave-json-formatter.ts","../src/formatter/junit-bamboo-formatter.ts","../src/formatter/step-definition-snippit-syntax/tsflow-snippet-syntax.ts","../src/gherkin/configuration.ts","../src/gherkin/gherkin-feature.ts","../src/gherkin/gherkin-manager.ts","../src/gherkin/models.ts","../src/runtime/coordinator.ts","../src/runtime/make-runtime.ts","../src/runtime/managed-scenario-context.ts","../src/runtime/message-collector.ts","../src/runtime/scenario-context.ts","../src/runtime/scenario-info.ts","../src/runtime/test-case-info.ts","../src/runtime/test-case-runner.ts","../src/runtime/types.ts","../src/runtime/utils.ts","../src/runtime/worker.ts","../src/runtime/parallel/adapter.ts","../src/runtime/parallel/run-worker.ts","../src/runtime/parallel/worker.ts","../src/runtime/serial/adapter.ts","../src/transpilers/esbuild-transpiler.ts","../src/transpilers/esbuild.ts","../src/transpilers/esnode.ts","../src/transpilers/esvue.ts","../src/transpilers/tsnode-exp.ts","../src/transpilers/tsnode.ts","../src/transpilers/tsvue-exp.ts","../src/transpilers/tsvue.ts","../src/transpilers/vue-sfc/compiler.ts","../src/transpilers/vue-sfc/index.ts","../src/transpilers/vue-sfc/main.ts","../src/transpilers/vue-sfc/script.ts","../src/transpilers/vue-sfc/template.ts","../src/transpilers/vue-sfc/types.ts","../src/transpilers/vue-sfc/utils/descriptorcache.ts","../src/transpilers/vue-sfc/utils/error.ts","../src/transpilers/vue-sfc/utils/query.ts","../src/types/durations.d.ts","../src/types/global.d.ts","../src/types/lep.d.ts","../src/types/vue-shim.d.ts","../src/utils/helpers.ts","../src/utils/logger.ts","../src/utils/our-callsite.ts"],"version":"5.9.2"}
package/lib/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const version = "7.4.0";
1
+ export declare const version = "7.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 = '7.4.0';
5
+ exports.version = '7.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,OAAO,CAAA","sourcesContent":["// Generated by genversion.\nexport const version = '7.4.0'\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":";;;AAAA,2BAA2B;AACd,QAAA,OAAO,GAAG,OAAO,CAAA","sourcesContent":["// Generated by genversion.\nexport const version = '7.5.0'\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@lynxwall/cucumber-tsflow",
3
- "description": "Provides 'specflow' like bindings for CucumberJS 11.2.0 in TypeScript 5.8+.",
4
- "version": "7.4.0",
3
+ "description": "Provides 'specflow' like bindings for CucumberJS 12.2.0 in TypeScript 5.9+.",
4
+ "version": "7.5.0",
5
5
  "author": "Lonnie Wall <lynxdev@lynxwall.com>",
6
6
  "license": "MIT",
7
7
  "keywords": [
@@ -57,6 +57,7 @@
57
57
  },
58
58
  "types": "./lib/index.d.ts",
59
59
  "dependencies": {
60
+ "@cucumber/cucumber": "~12.2.0",
60
61
  "@jeanbenitez/logical-expression-parser": "~1.0.0",
61
62
  "@types/node": "~22.13.10",
62
63
  "ansis": "~3.17.0",
@@ -81,7 +82,6 @@
81
82
  "underscore": "~1.13.7"
82
83
  },
83
84
  "devDependencies": {
84
- "@cucumber/cucumber": "~12.2.0",
85
85
  "@rollup/pluginutils": "~5.3.0",
86
86
  "@types/debug": "~4.1.12",
87
87
  "@types/hash-sum": "~1.0.2",
@@ -91,9 +91,6 @@
91
91
  "genversion": "~3.2.0",
92
92
  "shx": "0.4.0"
93
93
  },
94
- "peerDependencies": {
95
- "@cucumber/cucumber": ">=12.2.0 <13.0.0"
96
- },
97
94
  "scripts": {
98
95
  "build": "genversion --es6 src/version.ts && tsc --build tsconfig.node.json && yarn build:copy-mjs && yarn build:transpiler",
99
96
  "build:transpiler": "node src/scripts/build-esm-transpiler-cjs.js",