@lynxwall/cucumber-tsflow 7.1.2 → 7.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/README.md +154 -61
  2. package/lib/api/convert-configuration.d.ts +7 -0
  3. package/lib/api/convert-configuration.js +65 -0
  4. package/lib/api/convert-configuration.js.map +1 -0
  5. package/lib/api/index.d.ts +1 -0
  6. package/lib/api/index.js +1 -0
  7. package/lib/api/index.js.map +1 -1
  8. package/lib/api/load-configuration.d.ts +3 -2
  9. package/lib/api/load-configuration.js +78 -18
  10. package/lib/api/load-configuration.js.map +1 -1
  11. package/lib/api/run-cucumber.d.ts +5 -1
  12. package/lib/api/run-cucumber.js +12 -0
  13. package/lib/api/run-cucumber.js.map +1 -1
  14. package/lib/api/wrapper.mjs +1 -0
  15. package/lib/bindings/binding-context.d.ts +54 -3
  16. package/lib/bindings/binding-context.js +80 -5
  17. package/lib/bindings/binding-context.js.map +1 -1
  18. package/lib/bindings/binding-decorator.js +85 -36
  19. package/lib/bindings/binding-decorator.js.map +1 -1
  20. package/lib/bindings/binding-registry.js +10 -0
  21. package/lib/bindings/binding-registry.js.map +1 -1
  22. package/lib/bindings/hook-decorators.js +44 -19
  23. package/lib/bindings/hook-decorators.js.map +1 -1
  24. package/lib/bindings/step-decorators.js +120 -51
  25. package/lib/bindings/step-decorators.js.map +1 -1
  26. package/lib/bindings/types.js.map +1 -1
  27. package/lib/cli/argv-parser.d.ts +1 -0
  28. package/lib/cli/argv-parser.js +2 -2
  29. package/lib/cli/argv-parser.js.map +1 -1
  30. package/lib/cli/index.js +1 -4
  31. package/lib/cli/index.js.map +1 -1
  32. package/lib/runtime/make-runtime.d.ts +3 -2
  33. package/lib/runtime/make-runtime.js.map +1 -1
  34. package/lib/runtime/message-collector.d.ts +1 -1
  35. package/lib/runtime/message-collector.js.map +1 -1
  36. package/lib/runtime/parallel/adapter.d.ts +3 -2
  37. package/lib/runtime/parallel/adapter.js +2 -1
  38. package/lib/runtime/parallel/adapter.js.map +1 -1
  39. package/lib/runtime/parallel/run-worker.js +3 -2
  40. package/lib/runtime/parallel/run-worker.js.map +1 -1
  41. package/lib/runtime/parallel/worker.d.ts +3 -2
  42. package/lib/runtime/parallel/worker.js +4 -2
  43. package/lib/runtime/parallel/worker.js.map +1 -1
  44. package/lib/runtime/test-case-runner.d.ts +2 -1
  45. package/lib/runtime/test-case-runner.js +8 -5
  46. package/lib/runtime/test-case-runner.js.map +1 -1
  47. package/lib/runtime/{parallel/types.d.ts → types.d.ts} +12 -1
  48. package/lib/runtime/types.js.map +1 -0
  49. package/lib/transpilers/esbuild-transpiler.d.ts +1 -1
  50. package/lib/transpilers/esbuild-transpiler.js.map +1 -1
  51. package/lib/transpilers/esbuild.js +18 -1
  52. package/lib/transpilers/esbuild.js.map +1 -1
  53. package/lib/transpilers/esm/esbuild-transpiler-cjs.js +2174 -0
  54. package/lib/transpilers/esm/esbuild-transpiler.mjs +19 -0
  55. package/lib/transpilers/esm/esbuild.mjs +141 -0
  56. package/lib/transpilers/esm/esmbuild-transpiler.d.ts +4 -0
  57. package/lib/transpilers/esm/esmbuild-transpiler.js +19 -0
  58. package/lib/transpilers/esm/esmbuild-transpiler.js.map +1 -0
  59. package/lib/transpilers/esm/esmbuild.d.ts +12 -0
  60. package/lib/transpilers/esm/esmbuild.js +72 -0
  61. package/lib/transpilers/esm/esmbuild.js.map +1 -0
  62. package/lib/transpilers/esm/esmnode.js +8 -0
  63. package/lib/transpilers/esm/esmnode.js.map +1 -0
  64. package/lib/transpilers/esm/esmvue.js +29 -0
  65. package/lib/transpilers/esm/esmvue.js.map +1 -0
  66. package/lib/transpilers/esm/esnode-loader.mjs +9 -0
  67. package/lib/transpilers/esm/esvue-loader.mjs +9 -0
  68. package/lib/transpilers/esm/loader-utils.mjs +278 -0
  69. package/lib/transpilers/esm/tsnode-esm.js +25 -0
  70. package/lib/transpilers/esm/tsnode-esm.js.map +1 -0
  71. package/lib/{esnode.js → transpilers/esm/tsnode-exp-esm.js} +8 -6
  72. package/lib/transpilers/esm/tsnode-exp-esm.js.map +1 -0
  73. package/lib/transpilers/esm/tsnode-loader.mjs +107 -0
  74. package/lib/transpilers/esm/tsnode-service.mjs +40 -0
  75. package/lib/transpilers/esm/tsvue-esm.d.ts +1 -0
  76. package/lib/{tsvue.js → transpilers/esm/tsvue-esm.js} +8 -5
  77. package/lib/transpilers/esm/tsvue-esm.js.map +1 -0
  78. package/lib/transpilers/esm/tsvue-exp-esm.d.ts +1 -0
  79. package/lib/transpilers/esm/tsvue-exp-esm.js +40 -0
  80. package/lib/transpilers/esm/tsvue-exp-esm.js.map +1 -0
  81. package/lib/transpilers/esm/vue-jsdom-setup.mjs +19 -0
  82. package/lib/transpilers/esm/vue-loader.mjs +113 -0
  83. package/lib/transpilers/esm/vue-sfc-compiler.mjs +216 -0
  84. package/lib/transpilers/esnode.d.ts +1 -0
  85. package/lib/transpilers/esnode.js +8 -0
  86. package/lib/transpilers/esnode.js.map +1 -0
  87. package/lib/transpilers/esvue.d.ts +1 -0
  88. package/lib/transpilers/esvue.js +29 -0
  89. package/lib/transpilers/esvue.js.map +1 -0
  90. package/lib/transpilers/tsnode-exp.d.ts +1 -0
  91. package/lib/transpilers/tsnode-exp.js +19 -0
  92. package/lib/transpilers/tsnode-exp.js.map +1 -0
  93. package/lib/transpilers/tsnode.d.ts +1 -0
  94. package/lib/{tsnode.js → transpilers/tsnode.js} +5 -2
  95. package/lib/transpilers/tsnode.js.map +1 -0
  96. package/lib/transpilers/tsvue-exp.d.ts +1 -0
  97. package/lib/transpilers/tsvue-exp.js +40 -0
  98. package/lib/transpilers/tsvue-exp.js.map +1 -0
  99. package/lib/transpilers/tsvue.d.ts +1 -0
  100. package/lib/{esvue.js → transpilers/tsvue.js} +9 -7
  101. package/lib/transpilers/tsvue.js.map +1 -0
  102. package/lib/transpilers/vue-sfc/index.js.map +1 -1
  103. package/lib/tsconfig.node.tsbuildinfo +1 -1
  104. package/lib/version.d.ts +1 -1
  105. package/lib/version.js +1 -1
  106. package/lib/version.js.map +1 -1
  107. package/package.json +38 -25
  108. package/lib/esnode.js.map +0 -1
  109. package/lib/esvue.js.map +0 -1
  110. package/lib/runtime/parallel/types.js.map +0 -1
  111. package/lib/tsnode.js.map +0 -1
  112. package/lib/tsvue.js.map +0 -1
  113. /package/lib/runtime/{parallel/types.js → types.js} +0 -0
  114. /package/lib/{esnode.d.ts → transpilers/esm/esmnode.d.ts} +0 -0
  115. /package/lib/{esvue.d.ts → transpilers/esm/esmvue.d.ts} +0 -0
  116. /package/lib/{tsnode.d.ts → transpilers/esm/tsnode-esm.d.ts} +0 -0
  117. /package/lib/{tsvue.d.ts → transpilers/esm/tsnode-exp-esm.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/runtime/parallel/adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChildProcess, fork } from 'node:child_process';\r\nimport path from 'node:path';\r\nimport { EventEmitter } from 'node:events';\r\nimport { SupportCodeLibrary } from '@cucumber/cucumber/lib/support_code_library_builder/types';\r\nimport { AssembledTestCase } from '@cucumber/cucumber/lib/assemble/index';\r\nimport { ILogger, IRunEnvironment } from '@cucumber/cucumber/lib/environment/index';\r\nimport { RuntimeAdapter } from '@cucumber/cucumber/lib/runtime/types';\r\nimport { IRunOptionsRuntime, ISourcesCoordinates } from '@cucumber/cucumber/lib/api/index';\r\nimport { FinalizeCommand, RunCommand, WorkerToCoordinatorEvent } from '@cucumber/cucumber/lib/runtime/parallel/types';\r\nimport { InitializeTsflowCommand } from './types';\r\n\r\nconst runWorkerPath = path.resolve(__dirname, 'run-worker');\r\n\r\nconst enum WorkerState {\r\n\t'idle',\r\n\t'closed',\r\n\t'running',\r\n\t'new'\r\n}\r\n\r\ninterface ManagedWorker {\r\n\tstate: WorkerState;\r\n\tprocess: ChildProcess;\r\n\tid: string;\r\n}\r\n\r\ninterface WorkPlacement {\r\n\tindex: number;\r\n\titem: AssembledTestCase;\r\n}\r\n\r\nexport class ChildProcessAdapter implements RuntimeAdapter {\r\n\tprivate idleInterventions: number = 0;\r\n\tprivate failing: boolean = false;\r\n\tprivate onFinish: (success: boolean) => void = success => {\r\n\t\treturn success;\r\n\t};\r\n\tprivate todo: Array<AssembledTestCase> = [];\r\n\tprivate readonly inProgress: Record<string, AssembledTestCase> = {};\r\n\tprivate readonly workers: Record<string, ManagedWorker> = {};\r\n\r\n\tconstructor(\r\n\t\tprivate readonly environment: IRunEnvironment,\r\n\t\tprivate readonly logger: ILogger,\r\n\t\tprivate readonly eventBroadcaster: EventEmitter,\r\n\t\tprivate readonly options: IRunOptionsRuntime,\r\n\t\tprivate readonly supportCodeLibrary: SupportCodeLibrary,\r\n\t\tprivate readonly coordinates: ISourcesCoordinates\r\n\t) {}\r\n\r\n\tparseWorkerMessage(worker: ManagedWorker, message: WorkerToCoordinatorEvent): void {\r\n\t\tswitch (message.type) {\r\n\t\t\tcase 'READY':\r\n\t\t\t\tworker.state = WorkerState.idle;\r\n\t\t\t\tthis.awakenWorkers(worker);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'ENVELOPE':\r\n\t\t\t\tthis.eventBroadcaster.emit('envelope', message.envelope);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'FINISHED':\r\n\t\t\t\tif (!message.success) {\r\n\t\t\t\t\tthis.failing = true;\r\n\t\t\t\t}\r\n\t\t\t\tdelete this.inProgress[worker.id];\r\n\t\t\t\tworker.state = WorkerState.idle;\r\n\t\t\t\tthis.awakenWorkers(worker);\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Unexpected message from worker: ${JSON.stringify(message)}`);\r\n\t\t}\r\n\t}\r\n\r\n\tawakenWorkers(triggeringWorker: ManagedWorker): void {\r\n\t\tObject.values(this.workers).forEach(worker => {\r\n\t\t\tif (worker.state === WorkerState.idle) {\r\n\t\t\t\tthis.giveWork(worker);\r\n\t\t\t}\r\n\t\t\treturn worker.state !== WorkerState.idle;\r\n\t\t});\r\n\r\n\t\tif (Object.keys(this.inProgress).length == 0 && this.todo.length > 0) {\r\n\t\t\tthis.giveWork(triggeringWorker, true);\r\n\t\t\tthis.idleInterventions++;\r\n\t\t}\r\n\t}\r\n\r\n\tstartWorker(id: string, total: number): void {\r\n\t\tconst workerProcess = fork(runWorkerPath, [], {\r\n\t\t\tcwd: this.environment.cwd,\r\n\t\t\tenv: {\r\n\t\t\t\t...this.environment.env,\r\n\t\t\t\tCUCUMBER_PARALLEL: 'true',\r\n\t\t\t\tCUCUMBER_TOTAL_WORKERS: total.toString(),\r\n\t\t\t\tCUCUMBER_WORKER_ID: id\r\n\t\t\t},\r\n\t\t\tstdio: ['inherit', 'inherit', 'inherit', 'ipc']\r\n\t\t});\r\n\t\tconst worker = { state: WorkerState.new, process: workerProcess, id };\r\n\t\tthis.workers[id] = worker;\r\n\t\tworker.process.on('message', (message: WorkerToCoordinatorEvent) => {\r\n\t\t\tthis.parseWorkerMessage(worker, message);\r\n\t\t});\r\n\t\tworker.process.on('close', exitCode => {\r\n\t\t\tworker.state = WorkerState.closed;\r\n\t\t\tthis.onWorkerProcessClose(exitCode!);\r\n\t\t});\r\n\r\n\t\tconst messageData = global.messageCollector.getMessageData();\r\n\t\tmessageData.coordinates = this.coordinates;\r\n\r\n\t\tworker.process.send({\r\n\t\t\ttype: 'INITIALIZE',\r\n\t\t\tsupportCodeCoordinates: this.supportCodeLibrary.originalCoordinates,\r\n\t\t\tsupportCodeIds: {\r\n\t\t\t\tstepDefinitionIds: this.supportCodeLibrary.stepDefinitions.map(s => s.id),\r\n\t\t\t\tbeforeTestCaseHookDefinitionIds: this.supportCodeLibrary.beforeTestCaseHookDefinitions.map(h => h.id),\r\n\t\t\t\tafterTestCaseHookDefinitionIds: this.supportCodeLibrary.afterTestCaseHookDefinitions.map(h => h.id)\r\n\t\t\t},\r\n\t\t\toptions: this.options,\r\n\t\t\tmessageData: messageData\r\n\t\t} satisfies InitializeTsflowCommand);\r\n\t}\r\n\r\n\tonWorkerProcessClose(exitCode: number): void {\r\n\t\tif (exitCode !== 0) {\r\n\t\t\tthis.failing = true;\r\n\t\t}\r\n\r\n\t\tif (Object.values(this.workers).every(x => x.state === WorkerState.closed)) {\r\n\t\t\tthis.onFinish(!this.failing);\r\n\t\t}\r\n\t}\r\n\r\n\tasync run(assembledTestCases: ReadonlyArray<AssembledTestCase>): Promise<boolean> {\r\n\t\tthis.todo = Array.from(assembledTestCases);\r\n\t\treturn await new Promise<boolean>(resolve => {\r\n\t\t\tfor (let i = 0; i < this.options.parallel; i++) {\r\n\t\t\t\tthis.startWorker(i.toString(), this.options.parallel);\r\n\t\t\t}\r\n\t\t\tthis.onFinish = status => {\r\n\t\t\t\tif (this.idleInterventions > 0) {\r\n\t\t\t\t\tthis.logger.warn(\r\n\t\t\t\t\t\t`WARNING: All workers went idle ${this.idleInterventions} time(s). Consider revising handler passed to setParallelCanAssign.`\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tresolve(status);\r\n\t\t\t};\r\n\t\t});\r\n\t}\r\n\r\n\tnextWorkPlacement(): WorkPlacement | null {\r\n\t\tfor (let index = 0; index < this.todo.length; index++) {\r\n\t\t\tconst placement = this.placementAt(index);\r\n\t\t\tif (\r\n\t\t\t\tthis.supportCodeLibrary.parallelCanAssign(\r\n\t\t\t\t\tplacement.item.pickle,\r\n\t\t\t\t\tObject.values(this.inProgress).map(({ pickle }) => pickle)\r\n\t\t\t\t)\r\n\t\t\t) {\r\n\t\t\t\treturn placement;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\tplacementAt(index: number): WorkPlacement {\r\n\t\treturn {\r\n\t\t\tindex,\r\n\t\t\titem: this.todo[index]\r\n\t\t};\r\n\t}\r\n\r\n\tgiveWork(worker: ManagedWorker, force: boolean = false): void {\r\n\t\tif (this.todo.length < 1) {\r\n\t\t\tworker.state = WorkerState.running;\r\n\t\t\tworker.process.send({ type: 'FINALIZE' } satisfies FinalizeCommand);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst workPlacement = force ? this.placementAt(0) : this.nextWorkPlacement();\r\n\r\n\t\tif (workPlacement === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst { index: nextIndex, item } = workPlacement;\r\n\r\n\t\tthis.todo.splice(nextIndex, 1);\r\n\t\tthis.inProgress[worker.id] = item;\r\n\t\tworker.state = WorkerState.running;\r\n\t\tworker.process.send({\r\n\t\t\ttype: 'RUN',\r\n\t\t\tassembledTestCase: item,\r\n\t\t\tfailing: this.failing\r\n\t\t} satisfies RunCommand);\r\n\t}\r\n}\r\n"]}
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/runtime/parallel/adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChildProcess, fork } from 'node:child_process';\r\nimport path from 'node:path';\r\nimport { EventEmitter } from 'node:events';\r\nimport { SupportCodeLibrary } from '@cucumber/cucumber/lib/support_code_library_builder/types';\r\nimport { AssembledTestCase } from '@cucumber/cucumber/lib/assemble/index';\r\nimport { ILogger, IRunEnvironment } from '@cucumber/cucumber/lib/environment/index';\r\nimport { RuntimeAdapter } from '@cucumber/cucumber/lib/runtime/types';\r\nimport { ISourcesCoordinates } from '@cucumber/cucumber/lib/api/index';\r\nimport { FinalizeCommand, RunCommand, WorkerToCoordinatorEvent } from '@cucumber/cucumber/lib/runtime/parallel/types';\r\nimport { InitializeTsflowCommand, ITsFlowRunOptionsRuntime } from '../types';\r\n\r\nconst runWorkerPath = path.resolve(__dirname, 'run-worker');\r\n\r\nconst enum WorkerState {\r\n\t'idle',\r\n\t'closed',\r\n\t'running',\r\n\t'new'\r\n}\r\n\r\ninterface ManagedWorker {\r\n\tstate: WorkerState;\r\n\tprocess: ChildProcess;\r\n\tid: string;\r\n}\r\n\r\ninterface WorkPlacement {\r\n\tindex: number;\r\n\titem: AssembledTestCase;\r\n}\r\n\r\nexport class ChildProcessAdapter implements RuntimeAdapter {\r\n\tprivate idleInterventions: number = 0;\r\n\tprivate failing: boolean = false;\r\n\tprivate onFinish: (success: boolean) => void = success => {\r\n\t\treturn success;\r\n\t};\r\n\tprivate todo: Array<AssembledTestCase> = [];\r\n\tprivate readonly inProgress: Record<string, AssembledTestCase> = {};\r\n\tprivate readonly workers: Record<string, ManagedWorker> = {};\r\n\r\n\tconstructor(\r\n\t\tprivate readonly environment: IRunEnvironment,\r\n\t\tprivate readonly logger: ILogger,\r\n\t\tprivate readonly eventBroadcaster: EventEmitter,\r\n\t\tprivate readonly options: ITsFlowRunOptionsRuntime,\r\n\t\tprivate readonly supportCodeLibrary: SupportCodeLibrary,\r\n\t\tprivate readonly coordinates: ISourcesCoordinates\r\n\t) {}\r\n\r\n\tparseWorkerMessage(worker: ManagedWorker, message: WorkerToCoordinatorEvent): void {\r\n\t\tswitch (message.type) {\r\n\t\t\tcase 'READY':\r\n\t\t\t\tworker.state = WorkerState.idle;\r\n\t\t\t\tthis.awakenWorkers(worker);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'ENVELOPE':\r\n\t\t\t\tthis.eventBroadcaster.emit('envelope', message.envelope);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'FINISHED':\r\n\t\t\t\tif (!message.success) {\r\n\t\t\t\t\tthis.failing = true;\r\n\t\t\t\t}\r\n\t\t\t\tdelete this.inProgress[worker.id];\r\n\t\t\t\tworker.state = WorkerState.idle;\r\n\t\t\t\tthis.awakenWorkers(worker);\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Unexpected message from worker: ${JSON.stringify(message)}`);\r\n\t\t}\r\n\t}\r\n\r\n\tawakenWorkers(triggeringWorker: ManagedWorker): void {\r\n\t\tObject.values(this.workers).forEach(worker => {\r\n\t\t\tif (worker.state === WorkerState.idle) {\r\n\t\t\t\tthis.giveWork(worker);\r\n\t\t\t}\r\n\t\t\treturn worker.state !== WorkerState.idle;\r\n\t\t});\r\n\r\n\t\tif (Object.keys(this.inProgress).length == 0 && this.todo.length > 0) {\r\n\t\t\tthis.giveWork(triggeringWorker, true);\r\n\t\t\tthis.idleInterventions++;\r\n\t\t}\r\n\t}\r\n\r\n\tstartWorker(id: string, total: number): void {\r\n\t\tconst workerProcess = fork(runWorkerPath, [], {\r\n\t\t\tcwd: this.environment.cwd,\r\n\t\t\tenv: {\r\n\t\t\t\t...this.environment.env,\r\n\t\t\t\tCUCUMBER_PARALLEL: 'true',\r\n\t\t\t\tCUCUMBER_TOTAL_WORKERS: total.toString(),\r\n\t\t\t\tCUCUMBER_WORKER_ID: id,\r\n\t\t\t\tEXPERIMENTAL_DECORATORS: this.options.experimentalDecorators.toString()\r\n\t\t\t},\r\n\t\t\tstdio: ['inherit', 'inherit', 'inherit', 'ipc']\r\n\t\t});\r\n\t\tconst worker = { state: WorkerState.new, process: workerProcess, id };\r\n\t\tthis.workers[id] = worker;\r\n\t\tworker.process.on('message', (message: WorkerToCoordinatorEvent) => {\r\n\t\t\tthis.parseWorkerMessage(worker, message);\r\n\t\t});\r\n\t\tworker.process.on('close', exitCode => {\r\n\t\t\tworker.state = WorkerState.closed;\r\n\t\t\tthis.onWorkerProcessClose(exitCode!);\r\n\t\t});\r\n\r\n\t\tconst messageData = global.messageCollector.getMessageData();\r\n\t\tmessageData.coordinates = this.coordinates;\r\n\r\n\t\tworker.process.send({\r\n\t\t\ttype: 'INITIALIZE',\r\n\t\t\tsupportCodeCoordinates: this.supportCodeLibrary.originalCoordinates,\r\n\t\t\tsupportCodeIds: {\r\n\t\t\t\tstepDefinitionIds: this.supportCodeLibrary.stepDefinitions.map(s => s.id),\r\n\t\t\t\tbeforeTestCaseHookDefinitionIds: this.supportCodeLibrary.beforeTestCaseHookDefinitions.map(h => h.id),\r\n\t\t\t\tafterTestCaseHookDefinitionIds: this.supportCodeLibrary.afterTestCaseHookDefinitions.map(h => h.id)\r\n\t\t\t},\r\n\t\t\toptions: this.options,\r\n\t\t\tmessageData: messageData\r\n\t\t} satisfies InitializeTsflowCommand);\r\n\t}\r\n\r\n\tonWorkerProcessClose(exitCode: number): void {\r\n\t\tif (exitCode !== 0) {\r\n\t\t\tthis.failing = true;\r\n\t\t}\r\n\r\n\t\tif (Object.values(this.workers).every(x => x.state === WorkerState.closed)) {\r\n\t\t\tthis.onFinish(!this.failing);\r\n\t\t}\r\n\t}\r\n\r\n\tasync run(assembledTestCases: ReadonlyArray<AssembledTestCase>): Promise<boolean> {\r\n\t\tthis.todo = Array.from(assembledTestCases);\r\n\t\treturn await new Promise<boolean>(resolve => {\r\n\t\t\tfor (let i = 0; i < this.options.parallel; i++) {\r\n\t\t\t\tthis.startWorker(i.toString(), this.options.parallel);\r\n\t\t\t}\r\n\t\t\tthis.onFinish = status => {\r\n\t\t\t\tif (this.idleInterventions > 0) {\r\n\t\t\t\t\tthis.logger.warn(\r\n\t\t\t\t\t\t`WARNING: All workers went idle ${this.idleInterventions} time(s). Consider revising handler passed to setParallelCanAssign.`\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tresolve(status);\r\n\t\t\t};\r\n\t\t});\r\n\t}\r\n\r\n\tnextWorkPlacement(): WorkPlacement | null {\r\n\t\tfor (let index = 0; index < this.todo.length; index++) {\r\n\t\t\tconst placement = this.placementAt(index);\r\n\t\t\tif (\r\n\t\t\t\tthis.supportCodeLibrary.parallelCanAssign(\r\n\t\t\t\t\tplacement.item.pickle,\r\n\t\t\t\t\tObject.values(this.inProgress).map(({ pickle }) => pickle)\r\n\t\t\t\t)\r\n\t\t\t) {\r\n\t\t\t\treturn placement;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\tplacementAt(index: number): WorkPlacement {\r\n\t\treturn {\r\n\t\t\tindex,\r\n\t\t\titem: this.todo[index]\r\n\t\t};\r\n\t}\r\n\r\n\tgiveWork(worker: ManagedWorker, force: boolean = false): void {\r\n\t\tif (this.todo.length < 1) {\r\n\t\t\tworker.state = WorkerState.running;\r\n\t\t\tworker.process.send({ type: 'FINALIZE' } satisfies FinalizeCommand);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst workPlacement = force ? this.placementAt(0) : this.nextWorkPlacement();\r\n\r\n\t\tif (workPlacement === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst { index: nextIndex, item } = workPlacement;\r\n\r\n\t\tthis.todo.splice(nextIndex, 1);\r\n\t\tthis.inProgress[worker.id] = item;\r\n\t\tworker.state = WorkerState.running;\r\n\t\tworker.process.send({\r\n\t\t\ttype: 'RUN',\r\n\t\t\tassembledTestCase: item,\r\n\t\t\tfailing: this.failing\r\n\t\t} satisfies RunCommand);\r\n\t}\r\n}\r\n"]}
@@ -11,10 +11,11 @@ function run() {
11
11
  process.exit(exitCode);
12
12
  };
13
13
  const worker = new worker_1.ChildProcessWorker({
14
+ cwd: process.cwd(),
15
+ exit,
14
16
  id: process.env.CUCUMBER_WORKER_ID,
15
17
  sendMessage: (message) => process.send(message),
16
- cwd: process.cwd(),
17
- exit
18
+ experimentalDecorators: process.env.EXPERIMENTAL_DECORATORS === 'true'
18
19
  });
19
20
  process.on('message', (m) => {
20
21
  worker.receiveMessage(m).catch((error) => exit(1, error, 'Unexpected error on worker.receiveMessage'));
@@ -1 +1 @@
1
- {"version":3,"file":"run-worker.js","sourceRoot":"","sources":["../../../src/runtime/parallel/run-worker.ts"],"names":[],"mappings":";;AAAA,wEAAqE;AACrE,qCAA8C;AAC9C,oCAAkC;AAElC,SAAS,GAAG;IACX,MAAM,IAAI,GAAG,CAAC,QAAgB,EAAE,KAAa,EAAE,OAAgB,EAAQ,EAAE;QACxE,IAAI,IAAA,6BAAa,EAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxB,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,2BAAkB,CAAC;QACrC,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAmB;QACnC,WAAW,EAAE,CAAC,OAAY,EAAE,EAAE,CAAC,OAAO,CAAC,IAAK,CAAC,OAAO,CAAC;QACrD,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,IAAI;KACJ,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAM,EAAQ,EAAE;QACtC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAY,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,2CAA2C,CAAC,CAAC,CAAC;IAC/G,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,GAAG,EAAE,CAAC","sourcesContent":["import { doesHaveValue } from '@cucumber/cucumber/lib/value_checker';\r\nimport { ChildProcessWorker } from './worker';\r\nimport 'polyfill-symbol-metadata';\r\n\r\nfunction run(): void {\r\n\tconst exit = (exitCode: number, error?: Error, message?: string): void => {\r\n\t\tif (doesHaveValue(error)) {\r\n\t\t\tconsole.error(new Error(message, { cause: error }));\r\n\t\t}\r\n\t\tprocess.exit(exitCode);\r\n\t};\r\n\tconst worker = new ChildProcessWorker({\r\n\t\tid: process.env.CUCUMBER_WORKER_ID!,\r\n\t\tsendMessage: (message: any) => process.send!(message),\r\n\t\tcwd: process.cwd(),\r\n\t\texit\r\n\t});\r\n\tprocess.on('message', (m: any): void => {\r\n\t\tworker.receiveMessage(m).catch((error: Error) => exit(1, error, 'Unexpected error on worker.receiveMessage'));\r\n\t});\r\n}\r\n\r\nrun();\r\n"]}
1
+ {"version":3,"file":"run-worker.js","sourceRoot":"","sources":["../../../src/runtime/parallel/run-worker.ts"],"names":[],"mappings":";;AAAA,wEAAqE;AACrE,qCAA8C;AAC9C,oCAAkC;AAElC,SAAS,GAAG;IACX,MAAM,IAAI,GAAG,CAAC,QAAgB,EAAE,KAAa,EAAE,OAAgB,EAAQ,EAAE;QACxE,IAAI,IAAA,6BAAa,EAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxB,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,2BAAkB,CAAC;QACrC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,IAAI;QACJ,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAmB;QACnC,WAAW,EAAE,CAAC,OAAY,EAAE,EAAE,CAAC,OAAO,CAAC,IAAK,CAAC,OAAO,CAAC;QACrD,sBAAsB,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,MAAM;KACtE,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAM,EAAQ,EAAE;QACtC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAY,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,2CAA2C,CAAC,CAAC,CAAC;IAC/G,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,GAAG,EAAE,CAAC","sourcesContent":["import { doesHaveValue } from '@cucumber/cucumber/lib/value_checker';\r\nimport { ChildProcessWorker } from './worker';\r\nimport 'polyfill-symbol-metadata';\r\n\r\nfunction run(): void {\r\n\tconst exit = (exitCode: number, error?: Error, message?: string): void => {\r\n\t\tif (doesHaveValue(error)) {\r\n\t\t\tconsole.error(new Error(message, { cause: error }));\r\n\t\t}\r\n\t\tprocess.exit(exitCode);\r\n\t};\r\n\tconst worker = new ChildProcessWorker({\r\n\t\tcwd: process.cwd(),\r\n\t\texit,\r\n\t\tid: process.env.CUCUMBER_WORKER_ID!,\r\n\t\tsendMessage: (message: any) => process.send!(message),\r\n\t\texperimentalDecorators: process.env.EXPERIMENTAL_DECORATORS === 'true'\r\n\t});\r\n\tprocess.on('message', (m: any): void => {\r\n\t\tworker.receiveMessage(m).catch((error: Error) => exit(1, error, 'Unexpected error on worker.receiveMessage'));\r\n\t});\r\n}\r\n\r\nrun();\r\n"]}
@@ -1,5 +1,5 @@
1
1
  import { WorkerToCoordinatorEvent, RunCommand } from '@cucumber/cucumber/lib/runtime/parallel/types';
2
- import { InitializeTsflowCommand, CoordinatorToWorkerCommand } from './types';
2
+ import { InitializeTsflowCommand, CoordinatorToWorkerCommand } from '../types';
3
3
  type IExitFunction = (exitCode: number, error?: Error, message?: string) => void;
4
4
  type IMessageSender = (command: WorkerToCoordinatorEvent) => void;
5
5
  /**
@@ -15,11 +15,12 @@ export declare class ChildProcessWorker {
15
15
  private options;
16
16
  private supportCodeLibrary;
17
17
  private worker;
18
- constructor({ cwd, exit, id, sendMessage }: {
18
+ constructor({ cwd, exit, id, sendMessage, experimentalDecorators }: {
19
19
  cwd: string;
20
20
  exit: IExitFunction;
21
21
  id: string;
22
22
  sendMessage: IMessageSender;
23
+ experimentalDecorators: boolean;
23
24
  });
24
25
  /**
25
26
  * Initialize this child process worker
@@ -29,7 +29,7 @@ class ChildProcessWorker {
29
29
  options;
30
30
  supportCodeLibrary;
31
31
  worker;
32
- constructor({ cwd, exit, id, sendMessage }) {
32
+ constructor({ cwd, exit, id, sendMessage, experimentalDecorators }) {
33
33
  this.id = id;
34
34
  this.newId = uuid();
35
35
  this.cwd = cwd;
@@ -39,6 +39,8 @@ class ChildProcessWorker {
39
39
  // initialize a message collector for this process to handle our
40
40
  // integration with event data
41
41
  global.messageCollector = new message_collector_1.default(this.eventBroadcaster);
42
+ // initialize the global experimentalDecorators setting
43
+ global.experimentalDecorators = experimentalDecorators;
42
44
  // pass any envelope messages up to the parent process to keep our main
43
45
  // message collector in sync with this one.
44
46
  this.eventBroadcaster.on('envelope', (envelope) => this.sendMessage({ type: 'ENVELOPE', envelope }));
@@ -64,7 +66,7 @@ class ChildProcessWorker {
64
66
  for (const specifier of supportCodeCoordinates.loaders) {
65
67
  (0, node_module_1.register)(specifier, (0, node_url_1.pathToFileURL)('./'));
66
68
  }
67
- for (const path of supportCodeCoordinates.importPaths) {
69
+ for (const path of importPaths) {
68
70
  await import((0, node_url_1.pathToFileURL)(path).toString());
69
71
  }
70
72
  // Finalize the support code library with IDs passed in and
@@ -1 +1 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/runtime/parallel/worker.ts"],"names":[],"mappings":";;;;;;AAAA,6CAA2C;AAC3C,uCAAyC;AACzC,6CAAuC;AACvC,iDAA2D;AAC3D,sGAAkG;AAElG,qFAA4D;AAE5D,sCAAmC;AAEnC,gEAAwC;AACxC,8DAAkE;AAClE,sEAAkE;AAElE,6EAAoD;AAEpD,MAAM,EAAE,IAAI,EAAE,GAAG,sBAAW,CAAC;AAK7B;;GAEG;AACH,MAAa,kBAAkB;IACb,GAAG,CAAS;IACZ,IAAI,CAAgB;IAEpB,EAAE,CAAS;IACX,gBAAgB,CAAe;IAC/B,KAAK,CAAoB;IACzB,WAAW,CAAiB;IACrC,OAAO,CAAkB;IACzB,kBAAkB,CAAsB;IACxC,MAAM,CAAU;IAExB,YAAY,EACX,GAAG,EACH,IAAI,EACJ,EAAE,EACF,WAAW,EAMX;QACA,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,IAAI,EAAE,CAAC;QACpB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,gBAAgB,GAAG,IAAI,0BAAY,EAAE,CAAC;QAE3C,gEAAgE;QAChE,8BAA8B;QAC9B,MAAM,CAAC,gBAAgB,GAAG,IAAI,2BAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAEtE,uEAAuE;QACvE,2CAA2C;QAC3C,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,QAAkB,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IAChH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,EAChB,sBAAsB,EACtB,cAAc,EACd,OAAO,EACP,WAAW,EACc;QACzB,0DAA0D;QAC1D,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAE3C,uDAAuD;QACvD,MAAM,aAAa,GAAG,MAAM,IAAA,oBAAY,EAAC,gBAAM,EAAE,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,WAAW,EAAE,sBAAsB,CAAC,CAAC;QAC5G,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,aAAa,CAAC;QACpD,eAAyB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE;YACrD,YAAY;YACZ,cAAc,EAAE,sBAAsB,CAAC,cAAc;YACrD,WAAW;YACX,OAAO,EAAE,sBAAsB,CAAC,OAAO;SACvC,CAAC,CAAC;QACH,uEAAuE;QACvE,sBAAsB,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAA,qBAAU,EAAC,MAAM,CAAC,CAAC,CAAC;QACxE,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAA,qBAAU,EAAC,MAAM,CAAC,CAAC,CAAC;QAC/C,KAAK,MAAM,SAAS,IAAI,sBAAsB,CAAC,OAAO,EAAE,CAAC;YACxD,IAAA,sBAAQ,EAAC,SAAS,EAAE,IAAA,wBAAa,EAAC,IAAI,CAAC,CAAC,CAAC;QAC1C,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,sBAAsB,CAAC,WAAW,EAAE,CAAC;YACvD,MAAM,MAAM,CAAC,IAAA,wBAAa,EAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC9C,CAAC;QACD,2DAA2D;QAC3D,qEAAqE;QACrE,IAAI,CAAC,kBAAkB,GAAG,eAAyB,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAC7E,IAAI,CAAC,kBAAkB,GAAG,kCAAe,CAAC,QAAQ,CAAC,wBAAwB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAErG,8CAA8C;QAC9C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,IAAI,eAAM,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC5G,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;QACtC,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACb,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,cAAc,CAAC,OAAmC;QACvD,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;YACtB,KAAK,YAAY;gBAChB,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBAC/B,MAAM;YACP,KAAK,KAAK;gBACT,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBAChC,MAAM;YACP,KAAK,UAAU;gBACd,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACtB,MAAM;QACR,CAAC;IACF,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,WAAW,CAAC,OAAmB;QACpC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAC1F,IAAI,CAAC,WAAW,CAAC;YAChB,IAAI,EAAE,UAAU;YAChB,OAAO;SACP,CAAC,CAAC;IACJ,CAAC;CACD;AAvHD,gDAuHC","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 { RuntimeOptions } from '@cucumber/cucumber/lib/runtime/index';\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 } 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!: RuntimeOptions;\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}: {\r\n\t\tcwd: string;\r\n\t\texit: IExitFunction;\r\n\t\tid: string;\r\n\t\tsendMessage: IMessageSender;\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// 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 supportCodeCoordinates.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\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,4 +1,5 @@
1
1
  import { INewTestCaseRunnerOptions } from '@cucumber/cucumber/lib/runtime/test_case_runner';
2
+ import { RunStepResult } from '@cucumber/cucumber/lib/runtime/step_runner';
2
3
  import * as messages from '@cucumber/messages';
3
4
  import { ITestCaseHookParameter } from '@cucumber/cucumber/lib/support_code_library_builder/types';
4
5
  import TestCaseHookDefinition from '@cucumber/cucumber/lib/models/test_case_hook_definition';
@@ -29,7 +30,7 @@ export default class TestCaseRunner {
29
30
  getBeforeStepHookDefinitions(): TestStepHookDefinition[];
30
31
  getAfterStepHookDefinitions(): TestStepHookDefinition[];
31
32
  getWorstStepResult(): messages.TestStepResult;
32
- invokeStep(step: messages.PickleStep, stepDefinition: IDefinition, hookParameter?: ITestCaseHookParameter): Promise<messages.TestStepResult>;
33
+ invokeStep(step: messages.PickleStep, stepDefinition: IDefinition, hookParameter?: ITestCaseHookParameter): Promise<RunStepResult>;
33
34
  isSkippingSteps(): boolean;
34
35
  shouldSkipHook(isBeforeHook: boolean): boolean;
35
36
  aroundTestStep(testStepId: string, runStepFn: () => Promise<messages.TestStepResult>): Promise<void>;
@@ -243,12 +243,13 @@ class TestCaseRunner {
243
243
  // initialize any context objects before hooks are executed
244
244
  const stepBinding = this.bindingRegistry.getStepBindingByCucumberKey(hookDefinition.options.cucumberKey);
245
245
  if (!stepBinding)
246
- throw (0, console_1.error)('Unable to find StepBinding!');
246
+ throw (0, console_1.error)('===268 test-case-runner.ts Unable to find StepBinding!');
247
247
  const scenarioContext = global.messageCollector.getHookScenarioContext(hookParameter);
248
248
  if (!scenarioContext)
249
249
  throw (0, console_1.error)('Unable to find the ManagedScenarioContext!');
250
250
  await this.initializeContext(stepBinding, scenarioContext);
251
- return await this.invokeStep(null, hookDefinition, hookParameter);
251
+ const { result } = await this.invokeStep(null, hookDefinition, hookParameter);
252
+ return result;
252
253
  }
253
254
  async runStepHooks(stepHooks, pickleStep, stepResult) {
254
255
  const stepHooksResult = [];
@@ -261,7 +262,8 @@ class TestCaseRunner {
261
262
  result: stepResult
262
263
  };
263
264
  for (const stepHookDefinition of stepHooks) {
264
- stepHooksResult.push(await this.invokeStep(null, stepHookDefinition, hookParameter));
265
+ const { result } = await this.invokeStep(null, stepHookDefinition, hookParameter);
266
+ stepHooksResult.push(result);
265
267
  }
266
268
  return stepHooksResult;
267
269
  }
@@ -292,7 +294,7 @@ class TestCaseRunner {
292
294
  // initialize any context objects before hooks are executed
293
295
  const stepBinding = this.bindingRegistry.getStepBindingByCucumberKey(stepDefinitions[0].options.cucumberKey);
294
296
  if (!stepBinding)
295
- throw (0, console_1.error)('Unable to find StepBinding!');
297
+ throw (0, console_1.error)('===323 test-case-runner.ts: Unable to find StepBinding!');
296
298
  const scenarioContext = global.messageCollector.getStepScenarioContext(stepBinding);
297
299
  if (!scenarioContext)
298
300
  throw (0, console_1.error)('Unable to find the ManagedScenarioContext!');
@@ -302,7 +304,8 @@ class TestCaseRunner {
302
304
  let stepResult;
303
305
  let stepResults = await this.runStepHooks(this.getBeforeStepHookDefinitions(), pickleStep);
304
306
  if ((0, messages_1.getWorstTestStepResult)(stepResults).status !== messages.TestStepResultStatus.FAILED) {
305
- stepResult = await this.invokeStep(pickleStep, stepDefinitions[0]);
307
+ const { result } = await this.invokeStep(pickleStep, stepDefinitions[0]);
308
+ stepResult = result;
306
309
  stepResults.push(stepResult);
307
310
  }
308
311
  // run the after step hooks
@@ -1 +1 @@
1
- {"version":3,"file":"test-case-runner.js","sourceRoot":"","sources":["../../src/runtime/test-case-runner.ts"],"names":[],"mappings":"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","sourcesContent":["import { getAmbiguousStepException } from '@cucumber/cucumber/lib/runtime/helpers';\r\nimport { INewTestCaseRunnerOptions } from '@cucumber/cucumber/lib/runtime/test_case_runner';\r\nimport AttachmentManager, { ICreateAttachment } from '@cucumber/cucumber/lib/runtime/attachment_manager/index';\r\nimport StepRunner from '@cucumber/cucumber/lib/runtime/step_runner';\r\nimport * as messages from '@cucumber/messages';\r\nimport { getWorstTestStepResult, IdGenerator } from '@cucumber/messages';\r\nimport { EventEmitter } from 'events';\r\nimport {\r\n\tSupportCodeLibrary,\r\n\tITestCaseHookParameter,\r\n\tITestStepHookParameter\r\n} from '@cucumber/cucumber/lib/support_code_library_builder/types';\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 { IDefinition } from '@cucumber/cucumber/lib/models/definition';\r\nimport { doesHaveValue, doesNotHaveValue } from '@cucumber/cucumber/lib/value_checker';\r\nimport StepDefinition from '@cucumber/cucumber/lib/models/step_definition';\r\nimport { BindingRegistry } from '../bindings/binding-registry';\r\nimport { StepBinding } from '../bindings/step-binding';\r\nimport { ManagedScenarioContext } from './managed-scenario-context';\r\nimport { error } from 'console';\r\nimport { EndTestCaseInfo, StartTestCaseInfo } from './test-case-info';\r\nimport { IWorldOptions } from '@cucumber/cucumber/lib/support_code_library_builder/world';\r\nimport { timestamp } from '@cucumber/cucumber/lib/runtime/stopwatch';\r\n\r\nexport default class TestCaseRunner {\r\n\tprivate readonly workerId: string | undefined;\r\n\tprivate readonly attachmentManager: AttachmentManager;\r\n\tprivate currentTestCaseStartedId?: string;\r\n\tprivate currentTestStepId?: string;\r\n\tprivate readonly eventBroadcaster: EventEmitter;\r\n\tprivate readonly gherkinDocument: messages.GherkinDocument;\r\n\tprivate readonly newId: IdGenerator.NewId;\r\n\tprivate readonly pickle: messages.Pickle;\r\n\tprivate readonly testCase: messages.TestCase;\r\n\tprivate readonly maxAttempts: number;\r\n\tprivate readonly skip: boolean;\r\n\tprivate readonly filterStackTraces: boolean;\r\n\tprivate readonly supportCodeLibrary: SupportCodeLibrary;\r\n\tprivate testStepResults?: messages.TestStepResult[];\r\n\tprivate world: any;\r\n\tprivate readonly worldParameters: any;\r\n\tprivate bindingRegistry: BindingRegistry;\r\n\r\n\tconstructor({\r\n\t\tworkerId,\r\n\t\teventBroadcaster,\r\n\t\tgherkinDocument,\r\n\t\tnewId,\r\n\t\tpickle,\r\n\t\ttestCase,\r\n\t\tretries = 0,\r\n\t\tskip,\r\n\t\tfilterStackTraces,\r\n\t\tsupportCodeLibrary,\r\n\t\tworldParameters\r\n\t}: INewTestCaseRunnerOptions) {\r\n\t\tthis.workerId = workerId;\r\n\t\tthis.attachmentManager = new AttachmentManager(({ data, media, fileName }) => {\r\n\t\t\tif (doesNotHaveValue(this.currentTestStepId)) {\r\n\t\t\t\tthrow new Error(\r\n\t\t\t\t\t'Cannot attach when a step/hook is not running. Ensure your step/hook waits for the attach to finish.'\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\tconst attachment: messages.Envelope = {\r\n\t\t\t\tattachment: {\r\n\t\t\t\t\tbody: data,\r\n\t\t\t\t\tcontentEncoding: media.encoding,\r\n\t\t\t\t\tmediaType: media.contentType,\r\n\t\t\t\t\tfileName,\r\n\t\t\t\t\ttestCaseStartedId: this.currentTestCaseStartedId,\r\n\t\t\t\t\ttestStepId: this.currentTestStepId\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\tthis.eventBroadcaster.emit('envelope', attachment);\r\n\t\t});\r\n\t\tthis.eventBroadcaster = eventBroadcaster;\r\n\t\tthis.gherkinDocument = gherkinDocument;\r\n\t\tthis.maxAttempts = 1 + (skip ? 0 : retries);\r\n\t\tthis.newId = newId;\r\n\t\tthis.pickle = pickle;\r\n\t\tthis.testCase = testCase;\r\n\t\tthis.skip = skip;\r\n\t\tthis.filterStackTraces = filterStackTraces;\r\n\t\tthis.supportCodeLibrary = supportCodeLibrary;\r\n\t\tthis.worldParameters = worldParameters;\r\n\t\tthis.resetTestProgressData();\r\n\t\tthis.bindingRegistry = BindingRegistry.instance;\r\n\t}\r\n\r\n\tresetTestProgressData(): void {\r\n\t\tthis.world = new this.supportCodeLibrary.World({\r\n\t\t\tattach: this.attachmentManager.create.bind(this.attachmentManager) as unknown as ICreateAttachment,\r\n\t\t\tlog: this.attachmentManager.log.bind(this.attachmentManager),\r\n\t\t\tlink: this.attachmentManager.link.bind(this.attachmentManager),\r\n\t\t\tparameters: structuredClone(this.worldParameters)\r\n\t\t} satisfies IWorldOptions);\r\n\t\tthis.testStepResults = [];\r\n\t}\r\n\r\n\tgetBeforeStepHookDefinitions(): TestStepHookDefinition[] {\r\n\t\treturn this.supportCodeLibrary.beforeTestStepHookDefinitions.filter(hookDefinition =>\r\n\t\t\thookDefinition.appliesToTestCase(this.pickle)\r\n\t\t);\r\n\t}\r\n\r\n\tgetAfterStepHookDefinitions(): TestStepHookDefinition[] {\r\n\t\treturn this.supportCodeLibrary.afterTestStepHookDefinitions\r\n\t\t\t.slice(0)\r\n\t\t\t.reverse()\r\n\t\t\t.filter(hookDefinition => hookDefinition.appliesToTestCase(this.pickle));\r\n\t}\r\n\r\n\tgetWorstStepResult(): messages.TestStepResult {\r\n\t\tif (!this.testStepResults || this.testStepResults.length === 0) {\r\n\t\t\treturn {\r\n\t\t\t\tstatus: this.skip ? messages.TestStepResultStatus.SKIPPED : messages.TestStepResultStatus.PASSED,\r\n\t\t\t\tduration: messages.TimeConversion.millisecondsToDuration(0)\r\n\t\t\t};\r\n\t\t}\r\n\t\treturn getWorstTestStepResult(this.testStepResults);\r\n\t}\r\n\r\n\tasync invokeStep(\r\n\t\tstep: messages.PickleStep,\r\n\t\tstepDefinition: IDefinition,\r\n\t\thookParameter?: ITestCaseHookParameter\r\n\t): Promise<messages.TestStepResult> {\r\n\t\treturn await StepRunner.run({\r\n\t\t\tdefaultTimeout: this.supportCodeLibrary.defaultTimeout,\r\n\t\t\tfilterStackTraces: this.filterStackTraces,\r\n\t\t\thookParameter,\r\n\t\t\tstep,\r\n\t\t\tstepDefinition,\r\n\t\t\tworld: this.world\r\n\t\t});\r\n\t}\r\n\r\n\tisSkippingSteps(): boolean {\r\n\t\treturn this.getWorstStepResult().status !== messages.TestStepResultStatus.PASSED;\r\n\t}\r\n\r\n\tshouldSkipHook(isBeforeHook: boolean): boolean {\r\n\t\treturn this.skip || (this.isSkippingSteps() && isBeforeHook);\r\n\t}\r\n\r\n\tasync aroundTestStep(testStepId: string, runStepFn: () => Promise<messages.TestStepResult>): Promise<void> {\r\n\t\tconst testStepStarted: messages.Envelope = {\r\n\t\t\ttestStepStarted: {\r\n\t\t\t\ttestCaseStartedId: this.currentTestCaseStartedId!,\r\n\t\t\t\ttestStepId,\r\n\t\t\t\ttimestamp: timestamp()\r\n\t\t\t}\r\n\t\t};\r\n\t\tthis.eventBroadcaster.emit('envelope', testStepStarted);\r\n\t\tthis.currentTestStepId = testStepId;\r\n\t\tconst testStepResult = await runStepFn();\r\n\t\tthis.currentTestStepId = null;\r\n\t\tthis.testStepResults?.push(testStepResult);\r\n\t\tconst testStepFinished: messages.Envelope = {\r\n\t\t\ttestStepFinished: {\r\n\t\t\t\ttestCaseStartedId: this.currentTestCaseStartedId!,\r\n\t\t\t\ttestStepId,\r\n\t\t\t\ttestStepResult,\r\n\t\t\t\ttimestamp: timestamp()\r\n\t\t\t}\r\n\t\t};\r\n\t\tthis.eventBroadcaster.emit('envelope', testStepFinished);\r\n\t}\r\n\r\n\tasync run(): Promise<messages.TestStepResultStatus> {\r\n\t\tfor (let attempt = 0; attempt < this.maxAttempts; attempt++) {\r\n\t\t\tconst moreAttemptsRemaining = attempt + 1 < this.maxAttempts;\r\n\r\n\t\t\tconst willBeRetried = await this.runAttempt(attempt, moreAttemptsRemaining);\r\n\r\n\t\t\tif (!willBeRetried) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tthis.resetTestProgressData();\r\n\t\t}\r\n\t\treturn this.getWorstStepResult().status;\r\n\t}\r\n\r\n\tasync runAttempt(attempt: number, moreAttemptsRemaining: boolean): Promise<boolean> {\r\n\t\tthis.currentTestCaseStartedId = this.newId();\r\n\t\tconst testCaseStarted: messages.Envelope = {\r\n\t\t\ttestCaseStarted: {\r\n\t\t\t\tattempt,\r\n\t\t\t\ttestCaseId: this.testCase.id,\r\n\t\t\t\tid: this.currentTestCaseStartedId,\r\n\t\t\t\ttimestamp: timestamp()\r\n\t\t\t}\r\n\t\t};\r\n\t\tif (this.workerId) {\r\n\t\t\ttestCaseStarted.testCaseStarted.workerId = this.workerId;\r\n\t\t}\r\n\t\tthis.eventBroadcaster.emit('envelope', testCaseStarted);\r\n\t\t// used to determine whether a hook is a Before or After\r\n\t\tlet didWeRunStepsYet = false;\r\n\t\tfor (const testStep of this.testCase.testSteps) {\r\n\t\t\tawait this.aroundTestStep(testStep.id, async () => {\r\n\t\t\t\tif (doesHaveValue(testStep.hookId)) {\r\n\t\t\t\t\tconst hookParameter: ITestCaseHookParameter = {\r\n\t\t\t\t\t\tgherkinDocument: this.gherkinDocument,\r\n\t\t\t\t\t\tpickle: this.pickle,\r\n\t\t\t\t\t\ttestCaseStartedId: this.currentTestCaseStartedId!\r\n\t\t\t\t\t};\r\n\t\t\t\t\tif (didWeRunStepsYet) {\r\n\t\t\t\t\t\thookParameter.result = this.getWorstStepResult();\r\n\t\t\t\t\t\thookParameter.willBeRetried =\r\n\t\t\t\t\t\t\tthis.getWorstStepResult().status === messages.TestStepResultStatus.FAILED && moreAttemptsRemaining;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn await this.runHook(\r\n\t\t\t\t\t\tfindHookDefinition(testStep.hookId!, this.supportCodeLibrary),\r\n\t\t\t\t\t\thookParameter,\r\n\t\t\t\t\t\t!didWeRunStepsYet\r\n\t\t\t\t\t);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tconst pickleStep = this.pickle.steps.find(pickleStep => pickleStep.id === testStep.pickleStepId);\r\n\t\t\t\t\tconst testStepResult = await this.runStep(pickleStep!, testStep);\r\n\t\t\t\t\tdidWeRunStepsYet = true;\r\n\t\t\t\t\treturn testStepResult;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\tconst worseResult = this.getWorstStepResult();\r\n\t\tconst willBeRetried = worseResult.status === messages.TestStepResultStatus.FAILED && moreAttemptsRemaining;\r\n\r\n\t\tconst endTestCaseParameter: EndTestCaseInfo = {\r\n\t\t\tgherkinDocument: this.gherkinDocument,\r\n\t\t\tpickle: this.pickle,\r\n\t\t\ttestCaseStartedId: this.currentTestCaseStartedId!,\r\n\t\t\tresult: worseResult,\r\n\t\t\twillBeRetried: willBeRetried\r\n\t\t};\r\n\r\n\t\t// End test case will call dispose on all context types\r\n\t\t// passed into a binding and then end the context.\r\n\t\tawait global.messageCollector.endTestCase(endTestCaseParameter);\r\n\r\n\t\tconst testCaseFinished: messages.Envelope = {\r\n\t\t\ttestCaseFinished: {\r\n\t\t\t\ttestCaseStartedId: this.currentTestCaseStartedId,\r\n\t\t\t\ttimestamp: timestamp(),\r\n\t\t\t\twillBeRetried\r\n\t\t\t}\r\n\t\t};\r\n\t\tthis.eventBroadcaster.emit('envelope', testCaseFinished);\r\n\r\n\t\treturn willBeRetried;\r\n\t}\r\n\r\n\tasync runHook(\r\n\t\thookDefinition: TestCaseHookDefinition,\r\n\t\thookParameter: ITestCaseHookParameter,\r\n\t\tisBeforeHook: boolean\r\n\t): Promise<messages.TestStepResult> {\r\n\t\tif (this.shouldSkipHook(isBeforeHook)) {\r\n\t\t\treturn {\r\n\t\t\t\tstatus: messages.TestStepResultStatus.SKIPPED,\r\n\t\t\t\tduration: messages.TimeConversion.millisecondsToDuration(0)\r\n\t\t\t};\r\n\t\t}\r\n\t\t// Get the step binding and scenario context so that we can\r\n\t\t// initialize any context objects before hooks are executed\r\n\t\tconst stepBinding = this.bindingRegistry.getStepBindingByCucumberKey((hookDefinition.options as any).cucumberKey);\r\n\t\tif (!stepBinding) throw error('Unable to find StepBinding!');\r\n\t\tconst scenarioContext = global.messageCollector.getHookScenarioContext(hookParameter);\r\n\t\tif (!scenarioContext) throw error('Unable to find the ManagedScenarioContext!');\r\n\t\tawait this.initializeContext(stepBinding, scenarioContext);\r\n\r\n\t\treturn await this.invokeStep(null, hookDefinition, hookParameter);\r\n\t}\r\n\r\n\tasync runStepHooks(\r\n\t\tstepHooks: TestStepHookDefinition[],\r\n\t\tpickleStep: messages.PickleStep,\r\n\t\tstepResult?: messages.TestStepResult\r\n\t): Promise<messages.TestStepResult[]> {\r\n\t\tconst stepHooksResult = [];\r\n\t\tconst hookParameter: ITestStepHookParameter = {\r\n\t\t\tgherkinDocument: this.gherkinDocument,\r\n\t\t\tpickle: this.pickle,\r\n\t\t\tpickleStep,\r\n\t\t\ttestCaseStartedId: this.currentTestCaseStartedId!,\r\n\t\t\ttestStepId: this.currentTestStepId!,\r\n\t\t\tresult: stepResult!\r\n\t\t};\r\n\t\tfor (const stepHookDefinition of stepHooks) {\r\n\t\t\tstepHooksResult.push(await this.invokeStep(null, stepHookDefinition, hookParameter));\r\n\t\t}\r\n\t\treturn stepHooksResult;\r\n\t}\r\n\r\n\tasync runStep(pickleStep: messages.PickleStep, testStep: messages.TestStep): Promise<messages.TestStepResult> {\r\n\t\tconst stepDefinitions = testStep.stepDefinitionIds?.map(stepDefinitionId => {\r\n\t\t\treturn findStepDefinition(stepDefinitionId, this.supportCodeLibrary);\r\n\t\t});\r\n\r\n\t\tif (!stepDefinitions || stepDefinitions.length === 0) {\r\n\t\t\treturn {\r\n\t\t\t\tstatus: messages.TestStepResultStatus.UNDEFINED,\r\n\t\t\t\tduration: messages.TimeConversion.millisecondsToDuration(0)\r\n\t\t\t};\r\n\t\t} else if (stepDefinitions.length > 1) {\r\n\t\t\treturn {\r\n\t\t\t\tmessage: getAmbiguousStepException(stepDefinitions),\r\n\t\t\t\tstatus: messages.TestStepResultStatus.AMBIGUOUS,\r\n\t\t\t\tduration: messages.TimeConversion.millisecondsToDuration(0)\r\n\t\t\t};\r\n\t\t} else if (this.isSkippingSteps()) {\r\n\t\t\treturn {\r\n\t\t\t\tstatus: messages.TestStepResultStatus.SKIPPED,\r\n\t\t\t\tduration: messages.TimeConversion.millisecondsToDuration(0)\r\n\t\t\t};\r\n\t\t}\r\n\t\t// Get the step binding and scenario context so that we can\r\n\t\t// initialize any context objects before hooks are executed\r\n\t\tconst stepBinding = this.bindingRegistry.getStepBindingByCucumberKey(\r\n\t\t\t(stepDefinitions[0].options as any).cucumberKey\r\n\t\t);\r\n\t\tif (!stepBinding) throw error('Unable to find StepBinding!');\r\n\t\tconst scenarioContext = global.messageCollector.getStepScenarioContext(stepBinding);\r\n\t\tif (!scenarioContext) throw error('Unable to find the ManagedScenarioContext!');\r\n\t\tawait this.initializeContext(stepBinding, scenarioContext);\r\n\r\n\t\t// next execute any before step hooks followed by the step if there are no\r\n\t\t// failures in before step hooks.\r\n\t\tlet stepResult;\r\n\t\tlet stepResults = await this.runStepHooks(this.getBeforeStepHookDefinitions(), pickleStep);\r\n\t\tif (getWorstTestStepResult(stepResults).status !== messages.TestStepResultStatus.FAILED) {\r\n\t\t\tstepResult = await this.invokeStep(pickleStep, stepDefinitions[0]);\r\n\t\t\tstepResults.push(stepResult);\r\n\t\t}\r\n\t\t// run the after step hooks\r\n\t\tconst afterStepHookResults = await this.runStepHooks(this.getAfterStepHookDefinitions(), pickleStep, stepResult);\r\n\t\tstepResults = stepResults.concat(afterStepHookResults);\r\n\r\n\t\tconst finalStepResult = getWorstTestStepResult(stepResults);\r\n\t\tlet finalDuration = messages.TimeConversion.millisecondsToDuration(0);\r\n\t\tfor (const result of stepResults) {\r\n\t\t\tfinalDuration = messages.TimeConversion.addDurations(finalDuration, result.duration);\r\n\t\t}\r\n\t\tfinalStepResult.duration = finalDuration;\r\n\t\treturn finalStepResult;\r\n\t}\r\n\r\n\t/**\r\n\t * Helper used to initialize any context types that are passed into\r\n\t * a binding class before any hooks or steps are executed.\r\n\t * @param stepBinding\r\n\t * @param scenarioContext\r\n\t */\r\n\tasync initializeContext(stepBinding: StepBinding, scenarioContext: ManagedScenarioContext): Promise<void> {\r\n\t\tconst contextTypes = this.bindingRegistry.getContextTypesForClass(stepBinding.classPrototype);\r\n\t\tif (contextTypes.length > 0) {\r\n\t\t\tscenarioContext.getOrActivateBindingClass(stepBinding.classPrototype, contextTypes, this.world);\r\n\r\n\t\t\tconst startTestCaseParameter: StartTestCaseInfo = {\r\n\t\t\t\tgherkinDocument: this.gherkinDocument,\r\n\t\t\t\tpickle: this.pickle,\r\n\t\t\t\ttestCaseStartedId: this.currentTestCaseStartedId!\r\n\t\t\t};\r\n\t\t\tawait scenarioContext.initialize(startTestCaseParameter);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction findHookDefinition(id: string, supportCodeLibrary: SupportCodeLibrary): TestCaseHookDefinition {\r\n\treturn [...supportCodeLibrary.beforeTestCaseHookDefinitions, ...supportCodeLibrary.afterTestCaseHookDefinitions].find(\r\n\t\tdefinition => definition.id === id\r\n\t)!;\r\n}\r\n\r\nfunction findStepDefinition(id: string, supportCodeLibrary: SupportCodeLibrary): StepDefinition {\r\n\treturn supportCodeLibrary.stepDefinitions.find(definition => definition.id === id)!;\r\n}\r\n"]}
1
+ {"version":3,"file":"test-case-runner.js","sourceRoot":"","sources":["../../src/runtime/test-case-runner.ts"],"names":[],"mappings":"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","sourcesContent":["import { getAmbiguousStepException } from '@cucumber/cucumber/lib/runtime/helpers';\r\nimport { INewTestCaseRunnerOptions } from '@cucumber/cucumber/lib/runtime/test_case_runner';\r\nimport AttachmentManager, { ICreateAttachment } from '@cucumber/cucumber/lib/runtime/attachment_manager/index';\r\nimport StepRunner, { RunStepResult } from '@cucumber/cucumber/lib/runtime/step_runner';\r\nimport * as messages from '@cucumber/messages';\r\nimport { getWorstTestStepResult, IdGenerator } from '@cucumber/messages';\r\nimport { EventEmitter } from 'events';\r\nimport {\r\n\tSupportCodeLibrary,\r\n\tITestCaseHookParameter,\r\n\tITestStepHookParameter\r\n} from '@cucumber/cucumber/lib/support_code_library_builder/types';\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 { IDefinition } from '@cucumber/cucumber/lib/models/definition';\r\nimport { doesHaveValue, doesNotHaveValue } from '@cucumber/cucumber/lib/value_checker';\r\nimport StepDefinition from '@cucumber/cucumber/lib/models/step_definition';\r\nimport { BindingRegistry } from '../bindings/binding-registry';\r\nimport { StepBinding } from '../bindings/step-binding';\r\nimport { ManagedScenarioContext } from './managed-scenario-context';\r\nimport { error } from 'console';\r\nimport { EndTestCaseInfo, StartTestCaseInfo } from './test-case-info';\r\nimport { IWorldOptions } from '@cucumber/cucumber/lib/support_code_library_builder/world';\r\nimport { timestamp } from '@cucumber/cucumber/lib/runtime/stopwatch';\r\n\r\nexport default class TestCaseRunner {\r\n\tprivate readonly workerId: string | undefined;\r\n\tprivate readonly attachmentManager: AttachmentManager;\r\n\tprivate currentTestCaseStartedId?: string;\r\n\tprivate currentTestStepId?: string;\r\n\tprivate readonly eventBroadcaster: EventEmitter;\r\n\tprivate readonly gherkinDocument: messages.GherkinDocument;\r\n\tprivate readonly newId: IdGenerator.NewId;\r\n\tprivate readonly pickle: messages.Pickle;\r\n\tprivate readonly testCase: messages.TestCase;\r\n\tprivate readonly maxAttempts: number;\r\n\tprivate readonly skip: boolean;\r\n\tprivate readonly filterStackTraces: boolean;\r\n\tprivate readonly supportCodeLibrary: SupportCodeLibrary;\r\n\tprivate testStepResults?: messages.TestStepResult[];\r\n\tprivate world: any;\r\n\tprivate readonly worldParameters: any;\r\n\tprivate bindingRegistry: BindingRegistry;\r\n\r\n\tconstructor({\r\n\t\tworkerId,\r\n\t\teventBroadcaster,\r\n\t\tgherkinDocument,\r\n\t\tnewId,\r\n\t\tpickle,\r\n\t\ttestCase,\r\n\t\tretries = 0,\r\n\t\tskip,\r\n\t\tfilterStackTraces,\r\n\t\tsupportCodeLibrary,\r\n\t\tworldParameters\r\n\t}: INewTestCaseRunnerOptions) {\r\n\t\tthis.workerId = workerId;\r\n\t\tthis.attachmentManager = new AttachmentManager(({ data, media, fileName }) => {\r\n\t\t\tif (doesNotHaveValue(this.currentTestStepId)) {\r\n\t\t\t\tthrow new Error(\r\n\t\t\t\t\t'Cannot attach when a step/hook is not running. Ensure your step/hook waits for the attach to finish.'\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\tconst attachment: messages.Envelope = {\r\n\t\t\t\tattachment: {\r\n\t\t\t\t\tbody: data,\r\n\t\t\t\t\tcontentEncoding: media.encoding,\r\n\t\t\t\t\tmediaType: media.contentType,\r\n\t\t\t\t\tfileName,\r\n\t\t\t\t\ttestCaseStartedId: this.currentTestCaseStartedId,\r\n\t\t\t\t\ttestStepId: this.currentTestStepId\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\tthis.eventBroadcaster.emit('envelope', attachment);\r\n\t\t});\r\n\t\tthis.eventBroadcaster = eventBroadcaster;\r\n\t\tthis.gherkinDocument = gherkinDocument;\r\n\t\tthis.maxAttempts = 1 + (skip ? 0 : retries);\r\n\t\tthis.newId = newId;\r\n\t\tthis.pickle = pickle;\r\n\t\tthis.testCase = testCase;\r\n\t\tthis.skip = skip;\r\n\t\tthis.filterStackTraces = filterStackTraces;\r\n\t\tthis.supportCodeLibrary = supportCodeLibrary;\r\n\t\tthis.worldParameters = worldParameters;\r\n\t\tthis.resetTestProgressData();\r\n\t\tthis.bindingRegistry = BindingRegistry.instance;\r\n\t}\r\n\r\n\tresetTestProgressData(): void {\r\n\t\tthis.world = new this.supportCodeLibrary.World({\r\n\t\t\tattach: this.attachmentManager.create.bind(this.attachmentManager) as unknown as ICreateAttachment,\r\n\t\t\tlog: this.attachmentManager.log.bind(this.attachmentManager),\r\n\t\t\tlink: this.attachmentManager.link.bind(this.attachmentManager),\r\n\t\t\tparameters: structuredClone(this.worldParameters)\r\n\t\t} satisfies IWorldOptions);\r\n\t\tthis.testStepResults = [];\r\n\t}\r\n\r\n\tgetBeforeStepHookDefinitions(): TestStepHookDefinition[] {\r\n\t\treturn this.supportCodeLibrary.beforeTestStepHookDefinitions.filter(hookDefinition =>\r\n\t\t\thookDefinition.appliesToTestCase(this.pickle)\r\n\t\t);\r\n\t}\r\n\r\n\tgetAfterStepHookDefinitions(): TestStepHookDefinition[] {\r\n\t\treturn this.supportCodeLibrary.afterTestStepHookDefinitions\r\n\t\t\t.slice(0)\r\n\t\t\t.reverse()\r\n\t\t\t.filter(hookDefinition => hookDefinition.appliesToTestCase(this.pickle));\r\n\t}\r\n\r\n\tgetWorstStepResult(): messages.TestStepResult {\r\n\t\tif (!this.testStepResults || this.testStepResults.length === 0) {\r\n\t\t\treturn {\r\n\t\t\t\tstatus: this.skip ? messages.TestStepResultStatus.SKIPPED : messages.TestStepResultStatus.PASSED,\r\n\t\t\t\tduration: messages.TimeConversion.millisecondsToDuration(0)\r\n\t\t\t};\r\n\t\t}\r\n\t\treturn getWorstTestStepResult(this.testStepResults);\r\n\t}\r\n\r\n\tasync invokeStep(\r\n\t\tstep: messages.PickleStep,\r\n\t\tstepDefinition: IDefinition,\r\n\t\thookParameter?: ITestCaseHookParameter\r\n\t): Promise<RunStepResult> {\r\n\t\treturn await StepRunner.run({\r\n\t\t\tdefaultTimeout: this.supportCodeLibrary.defaultTimeout,\r\n\t\t\tfilterStackTraces: this.filterStackTraces,\r\n\t\t\thookParameter,\r\n\t\t\tstep,\r\n\t\t\tstepDefinition,\r\n\t\t\tworld: this.world\r\n\t\t});\r\n\t}\r\n\r\n\tisSkippingSteps(): boolean {\r\n\t\treturn this.getWorstStepResult().status !== messages.TestStepResultStatus.PASSED;\r\n\t}\r\n\r\n\tshouldSkipHook(isBeforeHook: boolean): boolean {\r\n\t\treturn this.skip || (this.isSkippingSteps() && isBeforeHook);\r\n\t}\r\n\r\n\tasync aroundTestStep(testStepId: string, runStepFn: () => Promise<messages.TestStepResult>): Promise<void> {\r\n\t\tconst testStepStarted: messages.Envelope = {\r\n\t\t\ttestStepStarted: {\r\n\t\t\t\ttestCaseStartedId: this.currentTestCaseStartedId!,\r\n\t\t\t\ttestStepId,\r\n\t\t\t\ttimestamp: timestamp()\r\n\t\t\t}\r\n\t\t};\r\n\t\tthis.eventBroadcaster.emit('envelope', testStepStarted);\r\n\t\tthis.currentTestStepId = testStepId;\r\n\t\tconst testStepResult = await runStepFn();\r\n\t\tthis.currentTestStepId = null;\r\n\t\tthis.testStepResults?.push(testStepResult);\r\n\t\tconst testStepFinished: messages.Envelope = {\r\n\t\t\ttestStepFinished: {\r\n\t\t\t\ttestCaseStartedId: this.currentTestCaseStartedId!,\r\n\t\t\t\ttestStepId,\r\n\t\t\t\ttestStepResult,\r\n\t\t\t\ttimestamp: timestamp()\r\n\t\t\t}\r\n\t\t};\r\n\t\tthis.eventBroadcaster.emit('envelope', testStepFinished);\r\n\t}\r\n\r\n\tasync run(): Promise<messages.TestStepResultStatus> {\r\n\t\tfor (let attempt = 0; attempt < this.maxAttempts; attempt++) {\r\n\t\t\tconst moreAttemptsRemaining = attempt + 1 < this.maxAttempts;\r\n\r\n\t\t\tconst willBeRetried = await this.runAttempt(attempt, moreAttemptsRemaining);\r\n\r\n\t\t\tif (!willBeRetried) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tthis.resetTestProgressData();\r\n\t\t}\r\n\t\treturn this.getWorstStepResult().status;\r\n\t}\r\n\r\n\tasync runAttempt(attempt: number, moreAttemptsRemaining: boolean): Promise<boolean> {\r\n\t\tthis.currentTestCaseStartedId = this.newId();\r\n\t\tconst testCaseStarted: messages.Envelope = {\r\n\t\t\ttestCaseStarted: {\r\n\t\t\t\tattempt,\r\n\t\t\t\ttestCaseId: this.testCase.id,\r\n\t\t\t\tid: this.currentTestCaseStartedId,\r\n\t\t\t\ttimestamp: timestamp()\r\n\t\t\t}\r\n\t\t};\r\n\t\tif (this.workerId) {\r\n\t\t\ttestCaseStarted.testCaseStarted.workerId = this.workerId;\r\n\t\t}\r\n\t\tthis.eventBroadcaster.emit('envelope', testCaseStarted);\r\n\t\t// used to determine whether a hook is a Before or After\r\n\t\tlet didWeRunStepsYet = false;\r\n\t\tfor (const testStep of this.testCase.testSteps) {\r\n\t\t\tawait this.aroundTestStep(testStep.id, async () => {\r\n\t\t\t\tif (doesHaveValue(testStep.hookId)) {\r\n\t\t\t\t\tconst hookParameter: ITestCaseHookParameter = {\r\n\t\t\t\t\t\tgherkinDocument: this.gherkinDocument,\r\n\t\t\t\t\t\tpickle: this.pickle,\r\n\t\t\t\t\t\ttestCaseStartedId: this.currentTestCaseStartedId!\r\n\t\t\t\t\t};\r\n\t\t\t\t\tif (didWeRunStepsYet) {\r\n\t\t\t\t\t\thookParameter.result = this.getWorstStepResult();\r\n\t\t\t\t\t\thookParameter.willBeRetried =\r\n\t\t\t\t\t\t\tthis.getWorstStepResult().status === messages.TestStepResultStatus.FAILED && moreAttemptsRemaining;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn await this.runHook(\r\n\t\t\t\t\t\tfindHookDefinition(testStep.hookId!, this.supportCodeLibrary),\r\n\t\t\t\t\t\thookParameter,\r\n\t\t\t\t\t\t!didWeRunStepsYet\r\n\t\t\t\t\t);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tconst pickleStep = this.pickle.steps.find(pickleStep => pickleStep.id === testStep.pickleStepId);\r\n\t\t\t\t\tconst testStepResult = await this.runStep(pickleStep!, testStep);\r\n\t\t\t\t\tdidWeRunStepsYet = true;\r\n\t\t\t\t\treturn testStepResult;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\tconst worseResult = this.getWorstStepResult();\r\n\t\tconst willBeRetried = worseResult.status === messages.TestStepResultStatus.FAILED && moreAttemptsRemaining;\r\n\r\n\t\tconst endTestCaseParameter: EndTestCaseInfo = {\r\n\t\t\tgherkinDocument: this.gherkinDocument,\r\n\t\t\tpickle: this.pickle,\r\n\t\t\ttestCaseStartedId: this.currentTestCaseStartedId!,\r\n\t\t\tresult: worseResult,\r\n\t\t\twillBeRetried: willBeRetried\r\n\t\t};\r\n\r\n\t\t// End test case will call dispose on all context types\r\n\t\t// passed into a binding and then end the context.\r\n\t\tawait global.messageCollector.endTestCase(endTestCaseParameter);\r\n\r\n\t\tconst testCaseFinished: messages.Envelope = {\r\n\t\t\ttestCaseFinished: {\r\n\t\t\t\ttestCaseStartedId: this.currentTestCaseStartedId,\r\n\t\t\t\ttimestamp: timestamp(),\r\n\t\t\t\twillBeRetried\r\n\t\t\t}\r\n\t\t};\r\n\t\tthis.eventBroadcaster.emit('envelope', testCaseFinished);\r\n\r\n\t\treturn willBeRetried;\r\n\t}\r\n\r\n\tasync runHook(\r\n\t\thookDefinition: TestCaseHookDefinition,\r\n\t\thookParameter: ITestCaseHookParameter,\r\n\t\tisBeforeHook: boolean\r\n\t): Promise<messages.TestStepResult> {\r\n\t\tif (this.shouldSkipHook(isBeforeHook)) {\r\n\t\t\treturn {\r\n\t\t\t\tstatus: messages.TestStepResultStatus.SKIPPED,\r\n\t\t\t\tduration: messages.TimeConversion.millisecondsToDuration(0)\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\t// Get the step binding and scenario context so that we can\r\n\t\t// initialize any context objects before hooks are executed\r\n\t\tconst stepBinding = this.bindingRegistry.getStepBindingByCucumberKey((hookDefinition.options as any).cucumberKey);\r\n\t\tif (!stepBinding) throw error('===268 test-case-runner.ts Unable to find StepBinding!');\r\n\t\tconst scenarioContext = global.messageCollector.getHookScenarioContext(hookParameter);\r\n\t\tif (!scenarioContext) throw error('Unable to find the ManagedScenarioContext!');\r\n\t\tawait this.initializeContext(stepBinding, scenarioContext);\r\n\r\n\t\tconst { result } = await this.invokeStep(null, hookDefinition, hookParameter);\r\n\t\treturn result;\r\n\t}\r\n\r\n\tasync runStepHooks(\r\n\t\tstepHooks: TestStepHookDefinition[],\r\n\t\tpickleStep: messages.PickleStep,\r\n\t\tstepResult?: messages.TestStepResult\r\n\t): Promise<messages.TestStepResult[]> {\r\n\t\tconst stepHooksResult = [];\r\n\t\tconst hookParameter: ITestStepHookParameter = {\r\n\t\t\tgherkinDocument: this.gherkinDocument,\r\n\t\t\tpickle: this.pickle,\r\n\t\t\tpickleStep,\r\n\t\t\ttestCaseStartedId: this.currentTestCaseStartedId!,\r\n\t\t\ttestStepId: this.currentTestStepId!,\r\n\t\t\tresult: stepResult!\r\n\t\t};\r\n\t\tfor (const stepHookDefinition of stepHooks) {\r\n\t\t\tconst { result } = await this.invokeStep(null, stepHookDefinition, hookParameter);\r\n\t\t\tstepHooksResult.push(result);\r\n\t\t}\r\n\t\treturn stepHooksResult;\r\n\t}\r\n\r\n\tasync runStep(pickleStep: messages.PickleStep, testStep: messages.TestStep): Promise<messages.TestStepResult> {\r\n\t\tconst stepDefinitions = testStep.stepDefinitionIds?.map(stepDefinitionId => {\r\n\t\t\treturn findStepDefinition(stepDefinitionId, this.supportCodeLibrary);\r\n\t\t});\r\n\r\n\t\tif (!stepDefinitions || stepDefinitions.length === 0) {\r\n\t\t\treturn {\r\n\t\t\t\tstatus: messages.TestStepResultStatus.UNDEFINED,\r\n\t\t\t\tduration: messages.TimeConversion.millisecondsToDuration(0)\r\n\t\t\t};\r\n\t\t} else if (stepDefinitions.length > 1) {\r\n\t\t\treturn {\r\n\t\t\t\tmessage: getAmbiguousStepException(stepDefinitions),\r\n\t\t\t\tstatus: messages.TestStepResultStatus.AMBIGUOUS,\r\n\t\t\t\tduration: messages.TimeConversion.millisecondsToDuration(0)\r\n\t\t\t};\r\n\t\t} else if (this.isSkippingSteps()) {\r\n\t\t\treturn {\r\n\t\t\t\tstatus: messages.TestStepResultStatus.SKIPPED,\r\n\t\t\t\tduration: messages.TimeConversion.millisecondsToDuration(0)\r\n\t\t\t};\r\n\t\t}\r\n\t\t// Get the step binding and scenario context so that we can\r\n\t\t// initialize any context objects before hooks are executed\r\n\t\tconst stepBinding = this.bindingRegistry.getStepBindingByCucumberKey(\r\n\t\t\t(stepDefinitions[0].options as any).cucumberKey\r\n\t\t);\r\n\t\tif (!stepBinding) throw error('===323 test-case-runner.ts: Unable to find StepBinding!');\r\n\t\tconst scenarioContext = global.messageCollector.getStepScenarioContext(stepBinding);\r\n\t\tif (!scenarioContext) throw error('Unable to find the ManagedScenarioContext!');\r\n\t\tawait this.initializeContext(stepBinding, scenarioContext);\r\n\r\n\t\t// next execute any before step hooks followed by the step if there are no\r\n\t\t// failures in before step hooks.\r\n\t\tlet stepResult;\r\n\t\tlet stepResults = await this.runStepHooks(this.getBeforeStepHookDefinitions(), pickleStep);\r\n\t\tif (getWorstTestStepResult(stepResults).status !== messages.TestStepResultStatus.FAILED) {\r\n\t\t\tconst { result } = await this.invokeStep(pickleStep, stepDefinitions[0]);\r\n\t\t\tstepResult = result;\r\n\t\t\tstepResults.push(stepResult);\r\n\t\t}\r\n\t\t// run the after step hooks\r\n\t\tconst afterStepHookResults = await this.runStepHooks(this.getAfterStepHookDefinitions(), pickleStep, stepResult);\r\n\t\tstepResults = stepResults.concat(afterStepHookResults);\r\n\r\n\t\tconst finalStepResult = getWorstTestStepResult(stepResults);\r\n\t\tlet finalDuration = messages.TimeConversion.millisecondsToDuration(0);\r\n\t\tfor (const result of stepResults) {\r\n\t\t\tfinalDuration = messages.TimeConversion.addDurations(finalDuration, result.duration);\r\n\t\t}\r\n\t\tfinalStepResult.duration = finalDuration;\r\n\t\treturn finalStepResult;\r\n\t}\r\n\r\n\t/**\r\n\t * Helper used to initialize any context types that are passed into\r\n\t * a binding class before any hooks or steps are executed.\r\n\t * @param stepBinding\r\n\t * @param scenarioContext\r\n\t */\r\n\tasync initializeContext(stepBinding: StepBinding, scenarioContext: ManagedScenarioContext): Promise<void> {\r\n\t\tconst contextTypes = this.bindingRegistry.getContextTypesForClass(stepBinding.classPrototype);\r\n\t\tif (contextTypes.length > 0) {\r\n\t\t\tscenarioContext.getOrActivateBindingClass(stepBinding.classPrototype, contextTypes, this.world);\r\n\r\n\t\t\tconst startTestCaseParameter: StartTestCaseInfo = {\r\n\t\t\t\tgherkinDocument: this.gherkinDocument,\r\n\t\t\t\tpickle: this.pickle,\r\n\t\t\t\ttestCaseStartedId: this.currentTestCaseStartedId!\r\n\t\t\t};\r\n\t\t\tawait scenarioContext.initialize(startTestCaseParameter);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction findHookDefinition(id: string, supportCodeLibrary: SupportCodeLibrary): TestCaseHookDefinition {\r\n\treturn [...supportCodeLibrary.beforeTestCaseHookDefinitions, ...supportCodeLibrary.afterTestCaseHookDefinitions].find(\r\n\t\tdefinition => definition.id === id\r\n\t)!;\r\n}\r\n\r\nfunction findStepDefinition(id: string, supportCodeLibrary: SupportCodeLibrary): StepDefinition {\r\n\treturn supportCodeLibrary.stepDefinitions.find(definition => definition.id === id)!;\r\n}\r\n"]}
@@ -1,13 +1,24 @@
1
1
  import * as messages from '@cucumber/messages';
2
2
  import { FinalizeCommand, InitializeCommand, RunCommand } from '@cucumber/cucumber/lib/runtime/parallel/types';
3
- import { ISourcesCoordinates } from '@cucumber/cucumber/api';
3
+ import { IRunConfiguration, IRunOptionsRuntime, ISourcesCoordinates } from '@cucumber/cucumber/api';
4
+ import { RuntimeOptions } from '@cucumber/cucumber/lib/runtime/types';
4
5
  export interface IMessageData {
5
6
  gherkinDocumentMap: Record<string, messages.GherkinDocument>;
6
7
  pickleMap: Record<string, messages.Pickle>;
7
8
  testCaseMap: Record<string, messages.TestCase>;
8
9
  coordinates: ISourcesCoordinates;
9
10
  }
11
+ export interface ITsFlowRunOptionsRuntime extends IRunOptionsRuntime {
12
+ experimentalDecorators: boolean;
13
+ }
14
+ export interface ITsFlowRunConfiguration extends IRunConfiguration {
15
+ runtime: ITsFlowRunOptionsRuntime;
16
+ }
17
+ export interface TsFlowRuntimeOptions extends RuntimeOptions {
18
+ experimentalDecorators: boolean;
19
+ }
10
20
  export interface InitializeTsflowCommand extends InitializeCommand {
11
21
  messageData: IMessageData;
22
+ options: TsFlowRuntimeOptions;
12
23
  }
13
24
  export type CoordinatorToWorkerCommand = InitializeTsflowCommand | RunCommand | FinalizeCommand;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/runtime/types.ts"],"names":[],"mappings":"","sourcesContent":["import * as messages from '@cucumber/messages';\r\nimport { FinalizeCommand, InitializeCommand, RunCommand } from '@cucumber/cucumber/lib/runtime/parallel/types';\r\nimport { IRunConfiguration, IRunOptionsRuntime, ISourcesCoordinates } from '@cucumber/cucumber/api';\r\nimport { RuntimeOptions } from '@cucumber/cucumber/lib/runtime/types';\r\n\r\nexport interface IMessageData {\r\n\tgherkinDocumentMap: Record<string, messages.GherkinDocument>;\r\n\tpickleMap: Record<string, messages.Pickle>;\r\n\ttestCaseMap: Record<string, messages.TestCase>;\r\n\tcoordinates: ISourcesCoordinates;\r\n}\r\n\r\nexport interface ITsFlowRunOptionsRuntime extends IRunOptionsRuntime {\r\n\texperimentalDecorators: boolean;\r\n}\r\nexport interface ITsFlowRunConfiguration extends IRunConfiguration {\r\n\truntime: ITsFlowRunOptionsRuntime;\r\n}\r\n\r\nexport interface TsFlowRuntimeOptions extends RuntimeOptions {\r\n\texperimentalDecorators: boolean;\r\n}\r\n\r\nexport interface InitializeTsflowCommand extends InitializeCommand {\r\n\tmessageData: IMessageData;\r\n\toptions: TsFlowRuntimeOptions;\r\n}\r\n\r\nexport type CoordinatorToWorkerCommand = InitializeTsflowCommand | RunCommand | FinalizeCommand;\r\n"]}
@@ -1,4 +1,4 @@
1
- import { TranspileOptions, Transpiler, TranspileOutput } from 'ts-node';
1
+ import { TranspileOptions, Transpiler, TranspileOutput } from 'ts-node-maintained';
2
2
  export declare class EsbuildTranspiler implements Transpiler {
3
3
  transpile: (input: string, options: TranspileOptions) => TranspileOutput;
4
4
  }
@@ -1 +1 @@
1
- {"version":3,"file":"esbuild-transpiler.js","sourceRoot":"","sources":["../../src/transpilers/esbuild-transpiler.ts"],"names":[],"mappings":";;;AACA,uCAA0C;AAE1C,MAAM,MAAM,GAAG,CAAC,cAAuC,EAAc,EAAE;IACtE,OAAO,IAAI,iBAAiB,EAAE,CAAC;AAChC,CAAC,CAAC;AAEF,MAAa,iBAAiB;IAC7B,SAAS,GAAG,CAAC,KAAa,EAAE,OAAyB,EAAmB,EAAE;QACzE,MAAM,MAAM,GAAG,IAAA,uBAAa,EAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEtD,OAAO;YACN,UAAU,EAAE,MAAM,CAAC,MAAM;YACzB,aAAa,EAAE,MAAM,CAAC,SAAS;SACZ,CAAC;IACtB,CAAC,CAAC;CACF;AATD,8CASC;AAED,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC","sourcesContent":["import { CreateTranspilerOptions, TranspileOptions, Transpiler, TranspileOutput } from 'ts-node';\r\nimport { transpileCode } from './esbuild';\r\n\r\nconst create = (_createOptions: CreateTranspilerOptions): Transpiler => {\r\n\treturn new EsbuildTranspiler();\r\n};\r\n\r\nexport class EsbuildTranspiler implements Transpiler {\r\n\ttranspile = (input: string, options: TranspileOptions): TranspileOutput => {\r\n\t\tconst result = transpileCode(input, options.fileName);\r\n\r\n\t\treturn {\r\n\t\t\toutputText: result.output,\r\n\t\t\tsourceMapText: result.sourceMap\r\n\t\t} as TranspileOutput;\r\n\t};\r\n}\r\n\r\nexports.create = create;\r\n"]}
1
+ {"version":3,"file":"esbuild-transpiler.js","sourceRoot":"","sources":["../../src/transpilers/esbuild-transpiler.ts"],"names":[],"mappings":";;;AACA,uCAA0C;AAE1C,MAAM,MAAM,GAAG,CAAC,cAAuC,EAAc,EAAE;IACtE,OAAO,IAAI,iBAAiB,EAAE,CAAC;AAChC,CAAC,CAAC;AAEF,MAAa,iBAAiB;IAC7B,SAAS,GAAG,CAAC,KAAa,EAAE,OAAyB,EAAmB,EAAE;QACzE,MAAM,MAAM,GAAG,IAAA,uBAAa,EAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEtD,OAAO;YACN,UAAU,EAAE,MAAM,CAAC,MAAM;YACzB,aAAa,EAAE,MAAM,CAAC,SAAS;SACZ,CAAC;IACtB,CAAC,CAAC;CACF;AATD,8CASC;AAED,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC","sourcesContent":["import { CreateTranspilerOptions, TranspileOptions, Transpiler, TranspileOutput } from 'ts-node-maintained';\r\nimport { transpileCode } from './esbuild';\r\n\r\nconst create = (_createOptions: CreateTranspilerOptions): Transpiler => {\r\n\treturn new EsbuildTranspiler();\r\n};\r\n\r\nexport class EsbuildTranspiler implements Transpiler {\r\n\ttranspile = (input: string, options: TranspileOptions): TranspileOutput => {\r\n\t\tconst result = transpileCode(input, options.fileName);\r\n\r\n\t\treturn {\r\n\t\t\toutputText: result.output,\r\n\t\t\tsourceMapText: result.sourceMap\r\n\t\t} as TranspileOutput;\r\n\t};\r\n}\r\n\r\nexports.create = create;\r\n"]}
@@ -12,10 +12,27 @@ const defaultOptions = {
12
12
  const commonOptions = {
13
13
  format: 'cjs',
14
14
  logLevel: 'info',
15
- target: [`es2020`],
15
+ target: [`es2022`],
16
16
  minify: false,
17
17
  sourcemap: 'external'
18
18
  };
19
+ if (global.experimentalDecorators) {
20
+ commonOptions.tsconfigRaw = {
21
+ compilerOptions: {
22
+ experimentalDecorators: true,
23
+ importsNotUsedAsValues: 'remove',
24
+ strict: true
25
+ }
26
+ };
27
+ }
28
+ else {
29
+ commonOptions.tsconfigRaw = {
30
+ compilerOptions: {
31
+ importsNotUsedAsValues: 'remove',
32
+ strict: true
33
+ }
34
+ };
35
+ }
19
36
  exports.loaders = {
20
37
  '.js': 'js',
21
38
  '.mjs': 'js',
@@ -1 +1 @@
1
- {"version":3,"file":"esbuild.js","sourceRoot":"","sources":["../../src/transpilers/esbuild.ts"],"names":[],"mappings":";;;;;;AAAA,qCAA+F;AAC/F,gDAAwB;AAMxB,MAAM,cAAc,GAAqB;IACxC,KAAK,EAAE,IAAI;CACX,CAAC;AAEF,MAAM,aAAa,GAAkB;IACpC,MAAM,EAAE,KAAK;IACb,QAAQ,EAAE,MAAM;IAChB,MAAM,EAAE,CAAC,QAAQ,CAAC;IAClB,MAAM,EAAE,KAAK;IACb,SAAS,EAAE,UAAU;CACrB,CAAC;AAOW,QAAA,OAAO,GAA2B;IAC9C,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,KAAK;IACb,OAAO,EAAE,MAAM;CACf,CAAC;AAEK,MAAM,QAAQ,GAAG,CAAC,QAAgB,EAAE,EAAE;IAC5C,IAAI,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QAAE,OAAO,KAAK,CAAC;IAChG,OAAO,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,eAAO,CAAC;AAC1C,CAAC,CAAC;AAHW,QAAA,QAAQ,YAGnB;AAEF,MAAM,UAAU,GAAG,CAAC,OAAyB,EAAE,EAAE;IAChD,MAAM,GAAG,GAAG,EAAE,GAAG,eAAO,EAAE,CAAC;IAC3B,IAAI,OAAO,OAAO,CAAC,OAAO,EAAE,MAAM,IAAI,QAAQ,EAAE,CAAC;QAChD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAW,CAAC;IACnF,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC;AAEK,MAAM,aAAa,GAAG,CAC5B,IAAY,EACZ,QAAgB,EAChB,GAAY,EACZ,QAAoC,EACjB,EAAE;IACrB,MAAM,OAAO,GAAqB,EAAE,GAAG,cAAc,EAAE,GAAG,QAAQ,EAAE,CAAC;IACrE,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAElE,MAAM,GAAG,GAAG,IAAA,uBAAa,EAAC,IAAI,EAAE;QAC/B,GAAG,aAAa;QAChB,GAAI,OAAO,CAAC,OAAwC;QACpD,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC;QAC1B,UAAU,EAAE,QAAQ;KACpB,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;AACjD,CAAC,CAAC;AAjBW,QAAA,aAAa,iBAiBxB","sourcesContent":["import { Loader, transformSync, CommonOptions, TransformOptions, BuildOptions } from 'esbuild';\r\nimport path from 'path';\r\n\r\nexport type TranspileOptions = {\r\n\tdebug: boolean;\r\n\tesbuild?: CommonOptions & TransformOptions & BuildOptions;\r\n};\r\nconst defaultOptions: TranspileOptions = {\r\n\tdebug: true\r\n};\r\n\r\nconst commonOptions: CommonOptions = {\r\n\tformat: 'cjs',\r\n\tlogLevel: 'info',\r\n\ttarget: [`es2020`],\r\n\tminify: false,\r\n\tsourcemap: 'external'\r\n};\r\n\r\nexport type TranspileResults = {\r\n\toutput: string;\r\n\tsourceMap?: string;\r\n};\r\n\r\nexport const loaders: Record<string, Loader> = {\r\n\t'.js': 'js',\r\n\t'.mjs': 'js',\r\n\t'.cjs': 'js',\r\n\t'.jsx': 'jsx',\r\n\t'.ts': 'ts',\r\n\t'.tsx': 'tsx',\r\n\t'.json': 'json'\r\n};\r\n\r\nexport const supports = (filename: string) => {\r\n\tif (filename.includes('node_modules') || filename.includes('cucumber-tsflow/lib')) return false;\r\n\treturn path.extname(filename) in loaders;\r\n};\r\n\r\nconst getLoaders = (options: TranspileOptions) => {\r\n\tconst ret = { ...loaders };\r\n\tif (typeof options.esbuild?.loader == 'object') {\r\n\t\tfor (const [e, l] of Object.entries(options.esbuild.loader)) ret[e] = l as Loader;\r\n\t}\r\n\treturn ret;\r\n};\r\n\r\nexport const transpileCode = (\r\n\tcode: string,\r\n\tfilename: string,\r\n\text?: string,\r\n\t_options?: Partial<TranspileOptions>\r\n): TranspileResults => {\r\n\tconst options: TranspileOptions = { ...defaultOptions, ..._options };\r\n\tconst loaders = getLoaders(options);\r\n\tconst loaderExt = ext != undefined ? ext : path.extname(filename);\r\n\r\n\tconst ret = transformSync(code, {\r\n\t\t...commonOptions,\r\n\t\t...(options.esbuild as TransformOptions | undefined),\r\n\t\tloader: loaders[loaderExt],\r\n\t\tsourcefile: filename\r\n\t});\r\n\treturn { output: ret.code, sourceMap: ret.map };\r\n};\r\n"]}
1
+ {"version":3,"file":"esbuild.js","sourceRoot":"","sources":["../../src/transpilers/esbuild.ts"],"names":[],"mappings":";;;;;;AAAA,qCAA+F;AAC/F,gDAAwB;AAMxB,MAAM,cAAc,GAAqB;IACxC,KAAK,EAAE,IAAI;CACX,CAAC;AAEF,MAAM,aAAa,GAAkB;IACpC,MAAM,EAAE,KAAK;IACb,QAAQ,EAAE,MAAM;IAChB,MAAM,EAAE,CAAC,QAAQ,CAAC;IAClB,MAAM,EAAE,KAAK;IACb,SAAS,EAAE,UAAU;CACrB,CAAC;AAEF,IAAI,MAAM,CAAC,sBAAsB,EAAE,CAAC;IACnC,aAAa,CAAC,WAAW,GAAG;QAC3B,eAAe,EAAE;YAChB,sBAAsB,EAAE,IAAI;YAC5B,sBAAsB,EAAE,QAAQ;YAChC,MAAM,EAAE,IAAI;SACZ;KACD,CAAC;AACH,CAAC;KAAM,CAAC;IACP,aAAa,CAAC,WAAW,GAAG;QAC3B,eAAe,EAAE;YAChB,sBAAsB,EAAE,QAAQ;YAChC,MAAM,EAAE,IAAI;SACZ;KACD,CAAC;AACH,CAAC;AAOY,QAAA,OAAO,GAA2B;IAC9C,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,KAAK;IACb,OAAO,EAAE,MAAM;CACf,CAAC;AAEK,MAAM,QAAQ,GAAG,CAAC,QAAgB,EAAE,EAAE;IAC5C,IAAI,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QAAE,OAAO,KAAK,CAAC;IAChG,OAAO,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,eAAO,CAAC;AAC1C,CAAC,CAAC;AAHW,QAAA,QAAQ,YAGnB;AAEF,MAAM,UAAU,GAAG,CAAC,OAAyB,EAAE,EAAE;IAChD,MAAM,GAAG,GAAG,EAAE,GAAG,eAAO,EAAE,CAAC;IAC3B,IAAI,OAAO,OAAO,CAAC,OAAO,EAAE,MAAM,IAAI,QAAQ,EAAE,CAAC;QAChD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAW,CAAC;IACnF,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC;AAEK,MAAM,aAAa,GAAG,CAC5B,IAAY,EACZ,QAAgB,EAChB,GAAY,EACZ,QAAoC,EACjB,EAAE;IACrB,MAAM,OAAO,GAAqB,EAAE,GAAG,cAAc,EAAE,GAAG,QAAQ,EAAE,CAAC;IACrE,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAElE,MAAM,GAAG,GAAG,IAAA,uBAAa,EAAC,IAAI,EAAE;QAC/B,GAAG,aAAa;QAChB,GAAI,OAAO,CAAC,OAAwC;QACpD,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC;QAC1B,UAAU,EAAE,QAAQ;KACpB,CAAC,CAAC;IAEH,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;AACjD,CAAC,CAAC;AAlBW,QAAA,aAAa,iBAkBxB","sourcesContent":["import { Loader, transformSync, CommonOptions, TransformOptions, BuildOptions } from 'esbuild';\r\nimport path from 'path';\r\n\r\nexport type TranspileOptions = {\r\n\tdebug: boolean;\r\n\tesbuild?: CommonOptions & TransformOptions & BuildOptions;\r\n};\r\nconst defaultOptions: TranspileOptions = {\r\n\tdebug: true\r\n};\r\n\r\nconst commonOptions: CommonOptions = {\r\n\tformat: 'cjs',\r\n\tlogLevel: 'info',\r\n\ttarget: [`es2022`],\r\n\tminify: false,\r\n\tsourcemap: 'external'\r\n};\r\n\r\nif (global.experimentalDecorators) {\r\n\tcommonOptions.tsconfigRaw = {\r\n\t\tcompilerOptions: {\r\n\t\t\texperimentalDecorators: true,\r\n\t\t\timportsNotUsedAsValues: 'remove',\r\n\t\t\tstrict: true\r\n\t\t}\r\n\t};\r\n} else {\r\n\tcommonOptions.tsconfigRaw = {\r\n\t\tcompilerOptions: {\r\n\t\t\timportsNotUsedAsValues: 'remove',\r\n\t\t\tstrict: true\r\n\t\t}\r\n\t};\r\n}\r\n\r\nexport type TranspileResults = {\r\n\toutput: string;\r\n\tsourceMap?: string;\r\n};\r\n\r\nexport const loaders: Record<string, Loader> = {\r\n\t'.js': 'js',\r\n\t'.mjs': 'js',\r\n\t'.cjs': 'js',\r\n\t'.jsx': 'jsx',\r\n\t'.ts': 'ts',\r\n\t'.tsx': 'tsx',\r\n\t'.json': 'json'\r\n};\r\n\r\nexport const supports = (filename: string) => {\r\n\tif (filename.includes('node_modules') || filename.includes('cucumber-tsflow/lib')) return false;\r\n\treturn path.extname(filename) in loaders;\r\n};\r\n\r\nconst getLoaders = (options: TranspileOptions) => {\r\n\tconst ret = { ...loaders };\r\n\tif (typeof options.esbuild?.loader == 'object') {\r\n\t\tfor (const [e, l] of Object.entries(options.esbuild.loader)) ret[e] = l as Loader;\r\n\t}\r\n\treturn ret;\r\n};\r\n\r\nexport const transpileCode = (\r\n\tcode: string,\r\n\tfilename: string,\r\n\text?: string,\r\n\t_options?: Partial<TranspileOptions>\r\n): TranspileResults => {\r\n\tconst options: TranspileOptions = { ...defaultOptions, ..._options };\r\n\tconst loaders = getLoaders(options);\r\n\tconst loaderExt = ext != undefined ? ext : path.extname(filename);\r\n\r\n\tconst ret = transformSync(code, {\r\n\t\t...commonOptions,\r\n\t\t...(options.esbuild as TransformOptions | undefined),\r\n\t\tloader: loaders[loaderExt],\r\n\t\tsourcefile: filename\r\n\t});\r\n\r\n\treturn { output: ret.code, sourceMap: ret.map };\r\n};\r\n"]}