@lynxwall/cucumber-tsflow 7.1.2 → 7.2.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 (74) hide show
  1. package/README.md +122 -53
  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 +27 -11
  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 +15 -0
  16. package/lib/bindings/binding-context.js +32 -1
  17. package/lib/bindings/binding-context.js.map +1 -1
  18. package/lib/bindings/binding-decorator.js +57 -31
  19. package/lib/bindings/binding-decorator.js.map +1 -1
  20. package/lib/bindings/hook-decorators.js +43 -19
  21. package/lib/bindings/hook-decorators.js.map +1 -1
  22. package/lib/bindings/step-decorators.js +117 -51
  23. package/lib/bindings/step-decorators.js.map +1 -1
  24. package/lib/bindings/types.js.map +1 -1
  25. package/lib/cli/argv-parser.d.ts +1 -0
  26. package/lib/cli/argv-parser.js +1 -0
  27. package/lib/cli/argv-parser.js.map +1 -1
  28. package/lib/cli/index.js +1 -4
  29. package/lib/cli/index.js.map +1 -1
  30. package/lib/runtime/make-runtime.d.ts +3 -2
  31. package/lib/runtime/make-runtime.js.map +1 -1
  32. package/lib/runtime/message-collector.d.ts +1 -1
  33. package/lib/runtime/message-collector.js.map +1 -1
  34. package/lib/runtime/parallel/adapter.d.ts +3 -2
  35. package/lib/runtime/parallel/adapter.js +2 -1
  36. package/lib/runtime/parallel/adapter.js.map +1 -1
  37. package/lib/runtime/parallel/run-worker.js +3 -2
  38. package/lib/runtime/parallel/run-worker.js.map +1 -1
  39. package/lib/runtime/parallel/worker.d.ts +3 -2
  40. package/lib/runtime/parallel/worker.js +3 -1
  41. package/lib/runtime/parallel/worker.js.map +1 -1
  42. package/lib/runtime/{parallel/types.d.ts → types.d.ts} +12 -1
  43. package/lib/runtime/types.js.map +1 -0
  44. package/lib/transpilers/esbuild.js +18 -1
  45. package/lib/transpilers/esbuild.js.map +1 -1
  46. package/lib/transpilers/esnode.js +8 -0
  47. package/lib/transpilers/esnode.js.map +1 -0
  48. package/lib/transpilers/esvue.js +29 -0
  49. package/lib/transpilers/esvue.js.map +1 -0
  50. package/lib/{esnode.js → transpilers/tsnode-exp.js} +7 -5
  51. package/lib/transpilers/tsnode-exp.js.map +1 -0
  52. package/lib/{tsnode.js → transpilers/tsnode.js} +4 -1
  53. package/lib/transpilers/tsnode.js.map +1 -0
  54. package/lib/transpilers/tsvue-exp.d.ts +1 -0
  55. package/lib/{esvue.js → transpilers/tsvue-exp.js} +8 -6
  56. package/lib/transpilers/tsvue-exp.js.map +1 -0
  57. package/lib/transpilers/tsvue.d.ts +1 -0
  58. package/lib/{tsvue.js → transpilers/tsvue.js} +5 -2
  59. package/lib/transpilers/tsvue.js.map +1 -0
  60. package/lib/tsconfig.node.tsbuildinfo +1 -1
  61. package/lib/version.d.ts +1 -1
  62. package/lib/version.js +1 -1
  63. package/lib/version.js.map +1 -1
  64. package/package.json +13 -10
  65. package/lib/esnode.js.map +0 -1
  66. package/lib/esvue.js.map +0 -1
  67. package/lib/runtime/parallel/types.js.map +0 -1
  68. package/lib/tsnode.js.map +0 -1
  69. package/lib/tsvue.js.map +0 -1
  70. /package/lib/runtime/{parallel/types.js → types.js} +0 -0
  71. /package/lib/{esnode.d.ts → transpilers/esnode.d.ts} +0 -0
  72. /package/lib/{esvue.d.ts → transpilers/esvue.d.ts} +0 -0
  73. /package/lib/{tsnode.d.ts → transpilers/tsnode-exp.d.ts} +0 -0
  74. /package/lib/{tsvue.d.ts → transpilers/tsnode.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 }));
@@ -1 +1 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/runtime/parallel/worker.ts"],"names":[],"mappings":"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","sourcesContent":["import { EventEmitter } from 'node:events';\r\nimport { pathToFileURL } from 'node:url';\r\nimport { register } from 'node:module';\r\nimport { Envelope, IdGenerator } from '@cucumber/messages';\r\nimport supportCodeLibraryBuilder from '@cucumber/cucumber/lib/support_code_library_builder/index';\r\nimport { SupportCodeLibrary } from '@cucumber/cucumber/lib/support_code_library_builder/types';\r\nimport tryRequire from '@cucumber/cucumber/lib/try_require';\r\nimport { 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":";;;;;;AAAA,6CAA2C;AAC3C,uCAAyC;AACzC,6CAAuC;AACvC,iDAA2D;AAC3D,sGAAkG;AAElG,qFAA4D;AAC5D,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,CAAwB;IAC/B,kBAAkB,CAAsB;IACxC,MAAM,CAAU;IAExB,YAAY,EACX,GAAG,EACH,IAAI,EACJ,EAAE,EACF,WAAW,EACX,sBAAsB,EAOtB;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,uDAAuD;QACvD,MAAM,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;QAEvD,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;AA5HD,gDA4HC","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 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,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"]}
@@ -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,qCAA4G;AAC5G,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;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, TsconfigRaw } 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\treturn { output: ret.code, sourceMap: ret.map };\r\n};\r\n"]}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ require('ts-node').register({
4
+ transpileOnly: true,
5
+ transpiler: '@lynxwall/cucumber-tsflow/lib/transpilers/esbuild-transpiler'
6
+ });
7
+ require('tsconfig-paths').register();
8
+ //# sourceMappingURL=esnode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"esnode.js","sourceRoot":"","sources":["../../src/transpilers/esnode.ts"],"names":[],"mappings":";;AAAA,OAAO,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC;IAC3B,aAAa,EAAE,IAAI;IACnB,UAAU,EAAE,8DAA8D;CAC1E,CAAC,CAAC;AAEH,OAAO,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE,CAAC","sourcesContent":["require('ts-node').register({\r\n\ttranspileOnly: true,\r\n\ttranspiler: '@lynxwall/cucumber-tsflow/lib/transpilers/esbuild-transpiler'\r\n});\r\n\r\nrequire('tsconfig-paths').register();\r\n"]}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const hooks = require('require-extension-hooks');
7
+ const vue_sfc_1 = __importDefault(require("./vue-sfc"));
8
+ require('ts-node').register({
9
+ transpileOnly: true,
10
+ transpiler: '@lynxwall/cucumber-tsflow/lib/transpilers/esbuild-transpiler'
11
+ });
12
+ require('tsconfig-paths').register();
13
+ // Register jsdom globally and set SVGElement on global
14
+ require('jsdom-global')();
15
+ global.SVGElement = global.window.SVGElement;
16
+ hooks('vue').push(function (params) {
17
+ try {
18
+ const transformer = new vue_sfc_1.default({
19
+ exclude: ['(?:^|/)node_modules/', '(?:^|/)cucumber-tsflow/lib/']
20
+ });
21
+ const transformResult = transformer.transformCode(params.content, params.filename);
22
+ return transformResult.code;
23
+ }
24
+ catch (err) {
25
+ console.log(err);
26
+ }
27
+ return params.content;
28
+ });
29
+ //# sourceMappingURL=esvue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"esvue.js","sourceRoot":"","sources":["../../src/transpilers/esvue.ts"],"names":[],"mappings":";;;;;AAAA,MAAM,KAAK,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;AACjD,wDAAuC;AAEvC,OAAO,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC;IAC3B,aAAa,EAAE,IAAI;IACnB,UAAU,EAAE,8DAA8D;CAC1E,CAAC,CAAC;AAEH,OAAO,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE,CAAC;AAErC,uDAAuD;AACvD,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;AACzB,MAAc,CAAC,UAAU,GAAI,MAAc,CAAC,MAAM,CAAC,UAAU,CAAC;AAE/D,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,MAAW;IACtC,IAAI,CAAC;QACJ,MAAM,WAAW,GAAG,IAAI,iBAAc,CAAC;YACtC,OAAO,EAAE,CAAC,sBAAsB,EAAE,6BAA6B,CAAC;SAChE,CAAC,CAAC;QACH,MAAM,eAAe,GAAG,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEnF,OAAO,eAAe,CAAC,IAAI,CAAC;IAC7B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,CAAC;AACvB,CAAC,CAAC,CAAC","sourcesContent":["const hooks = require('require-extension-hooks');\r\nimport VueTransformer from './vue-sfc';\r\n\r\nrequire('ts-node').register({\r\n\ttranspileOnly: true,\r\n\ttranspiler: '@lynxwall/cucumber-tsflow/lib/transpilers/esbuild-transpiler'\r\n});\r\n\r\nrequire('tsconfig-paths').register();\r\n\r\n// Register jsdom globally and set SVGElement on global\r\nrequire('jsdom-global')();\r\n(global as any).SVGElement = (global as any).window.SVGElement;\r\n\r\nhooks('vue').push(function (params: any) {\r\n\ttry {\r\n\t\tconst transformer = new VueTransformer({\r\n\t\t\texclude: ['(?:^|/)node_modules/', '(?:^|/)cucumber-tsflow/lib/']\r\n\t\t});\r\n\t\tconst transformResult = transformer.transformCode(params.content, params.filename);\r\n\r\n\t\treturn transformResult.code;\r\n\t} catch (err) {\r\n\t\tconsole.log(err);\r\n\t}\r\n\treturn params.content;\r\n});\r\n"]}
@@ -5,13 +5,15 @@ require('ts-node').register({
5
5
  module: 'nodeNext',
6
6
  target: 'es2022',
7
7
  strict: true,
8
- resolveJsonModule: true,
8
+ allowJs: true,
9
+ allowSyntheticDefaultImports: true,
9
10
  esModuleInterop: true,
11
+ experimentalDecorators: true,
12
+ resolveJsonModule: true,
10
13
  skipLibCheck: true,
11
- lib: ['es2022', 'esnext.decorators']
14
+ lib: ['es2022']
12
15
  },
13
- transpileOnly: true,
14
- transpiler: '@lynxwall/cucumber-tsflow/lib/transpilers/esbuild-transpiler'
16
+ transpileOnly: true
15
17
  });
16
18
  require('tsconfig-paths').register();
17
- //# sourceMappingURL=esnode.js.map
19
+ //# sourceMappingURL=tsnode-exp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tsnode-exp.js","sourceRoot":"","sources":["../../src/transpilers/tsnode-exp.ts"],"names":[],"mappings":";;AAEA,OAAO,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC;IAC3B,eAAe,EAAE;QAChB,MAAM,EAAE,UAAU;QAClB,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE,IAAI;QACb,4BAA4B,EAAE,IAAI;QAClC,eAAe,EAAE,IAAI;QACrB,sBAAsB,EAAE,IAAI;QAC5B,iBAAiB,EAAE,IAAI;QACvB,YAAY,EAAE,IAAI;QAClB,GAAG,EAAE,CAAC,QAAQ,CAAC;KACf;IACD,aAAa,EAAE,IAAI;CACnB,CAAC,CAAC;AAEH,OAAO,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE,CAAC","sourcesContent":["import { SourceMap } from 'node:module';\r\n\r\nrequire('ts-node').register({\r\n\tcompilerOptions: {\r\n\t\tmodule: 'nodeNext',\r\n\t\ttarget: 'es2022',\r\n\t\tstrict: true,\r\n\t\tallowJs: true,\r\n\t\tallowSyntheticDefaultImports: true,\r\n\t\tesModuleInterop: true,\r\n\t\texperimentalDecorators: true,\r\n\t\tresolveJsonModule: true,\r\n\t\tskipLibCheck: true,\r\n\t\tlib: ['es2022']\r\n\t},\r\n\ttranspileOnly: true\r\n});\r\n\r\nrequire('tsconfig-paths').register();\r\n"]}
@@ -5,8 +5,11 @@ require('ts-node').register({
5
5
  module: 'nodeNext',
6
6
  target: 'es2022',
7
7
  strict: true,
8
- resolveJsonModule: true,
8
+ allowJs: true,
9
+ allowSyntheticDefaultImports: true,
9
10
  esModuleInterop: true,
11
+ experimentalDecorators: false,
12
+ resolveJsonModule: true,
10
13
  skipLibCheck: true,
11
14
  lib: ['es2022', 'esnext.decorators']
12
15
  },
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tsnode.js","sourceRoot":"","sources":["../../src/transpilers/tsnode.ts"],"names":[],"mappings":";;AAAA,OAAO,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC;IAC3B,eAAe,EAAE;QAChB,MAAM,EAAE,UAAU;QAClB,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE,IAAI;QACb,4BAA4B,EAAE,IAAI;QAClC,eAAe,EAAE,IAAI;QACrB,sBAAsB,EAAE,KAAK;QAC7B,iBAAiB,EAAE,IAAI;QACvB,YAAY,EAAE,IAAI;QAClB,GAAG,EAAE,CAAC,QAAQ,EAAE,mBAAmB,CAAC;KACpC;IACD,aAAa,EAAE,IAAI;CACnB,CAAC,CAAC;AAEH,OAAO,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE,CAAC","sourcesContent":["require('ts-node').register({\r\n\tcompilerOptions: {\r\n\t\tmodule: 'nodeNext',\r\n\t\ttarget: 'es2022',\r\n\t\tstrict: true,\r\n\t\tallowJs: true,\r\n\t\tallowSyntheticDefaultImports: true,\r\n\t\tesModuleInterop: true,\r\n\t\texperimentalDecorators: false,\r\n\t\tresolveJsonModule: true,\r\n\t\tskipLibCheck: true,\r\n\t\tlib: ['es2022', 'esnext.decorators']\r\n\t},\r\n\ttranspileOnly: true\r\n});\r\n\r\nrequire('tsconfig-paths').register();\r\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -4,19 +4,21 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const hooks = require('require-extension-hooks');
7
- const vue_sfc_1 = __importDefault(require("./transpilers/vue-sfc"));
7
+ const vue_sfc_1 = __importDefault(require("./vue-sfc"));
8
8
  require('ts-node').register({
9
9
  compilerOptions: {
10
10
  module: 'nodeNext',
11
11
  target: 'es2022',
12
12
  strict: true,
13
- resolveJsonModule: true,
13
+ allowJs: true,
14
+ allowSyntheticDefaultImports: true,
14
15
  esModuleInterop: true,
16
+ experimentalDecorators: true,
17
+ resolveJsonModule: true,
15
18
  skipLibCheck: true,
16
- lib: ['es2022', 'esnext.decorators']
19
+ lib: ['es2022']
17
20
  },
18
- transpileOnly: true,
19
- transpiler: '@lynxwall/cucumber-tsflow/lib/transpilers/esbuild-transpiler'
21
+ transpileOnly: true
20
22
  });
21
23
  require('tsconfig-paths').register();
22
24
  // Register jsdom globally and set SVGElement on global
@@ -35,4 +37,4 @@ hooks('vue').push(function (params) {
35
37
  }
36
38
  return params.content;
37
39
  });
38
- //# sourceMappingURL=esvue.js.map
40
+ //# sourceMappingURL=tsvue-exp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tsvue-exp.js","sourceRoot":"","sources":["../../src/transpilers/tsvue-exp.ts"],"names":[],"mappings":";;;;;AAAA,MAAM,KAAK,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;AACjD,wDAAuC;AAEvC,OAAO,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC;IAC3B,eAAe,EAAE;QAChB,MAAM,EAAE,UAAU;QAClB,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE,IAAI;QACb,4BAA4B,EAAE,IAAI;QAClC,eAAe,EAAE,IAAI;QACrB,sBAAsB,EAAE,IAAI;QAC5B,iBAAiB,EAAE,IAAI;QACvB,YAAY,EAAE,IAAI;QAClB,GAAG,EAAE,CAAC,QAAQ,CAAC;KACf;IACD,aAAa,EAAE,IAAI;CACnB,CAAC,CAAC;AAEH,OAAO,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE,CAAC;AAErC,uDAAuD;AACvD,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;AACzB,MAAc,CAAC,UAAU,GAAI,MAAc,CAAC,MAAM,CAAC,UAAU,CAAC;AAE/D,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,MAAW;IACtC,IAAI,CAAC;QACJ,MAAM,WAAW,GAAG,IAAI,iBAAc,CAAC;YACtC,OAAO,EAAE,CAAC,sBAAsB,EAAE,6BAA6B,CAAC;SAChE,CAAC,CAAC;QACH,MAAM,eAAe,GAAG,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEnF,OAAO,eAAe,CAAC,IAAI,CAAC;IAC7B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,CAAC;AACvB,CAAC,CAAC,CAAC","sourcesContent":["const hooks = require('require-extension-hooks');\r\nimport VueTransformer from './vue-sfc';\r\n\r\nrequire('ts-node').register({\r\n\tcompilerOptions: {\r\n\t\tmodule: 'nodeNext',\r\n\t\ttarget: 'es2022',\r\n\t\tstrict: true,\r\n\t\tallowJs: true,\r\n\t\tallowSyntheticDefaultImports: true,\r\n\t\tesModuleInterop: true,\r\n\t\texperimentalDecorators: true,\r\n\t\tresolveJsonModule: true,\r\n\t\tskipLibCheck: true,\r\n\t\tlib: ['es2022']\r\n\t},\r\n\ttranspileOnly: true\r\n});\r\n\r\nrequire('tsconfig-paths').register();\r\n\r\n// Register jsdom globally and set SVGElement on global\r\nrequire('jsdom-global')();\r\n(global as any).SVGElement = (global as any).window.SVGElement;\r\n\r\nhooks('vue').push(function (params: any) {\r\n\ttry {\r\n\t\tconst transformer = new VueTransformer({\r\n\t\t\texclude: ['(?:^|/)node_modules/', '(?:^|/)cucumber-tsflow/lib/']\r\n\t\t});\r\n\t\tconst transformResult = transformer.transformCode(params.content, params.filename);\r\n\r\n\t\treturn transformResult.code;\r\n\t} catch (err) {\r\n\t\tconsole.log(err);\r\n\t}\r\n\treturn params.content;\r\n});\r\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -4,14 +4,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const hooks = require('require-extension-hooks');
7
- const vue_sfc_1 = __importDefault(require("./transpilers/vue-sfc"));
7
+ const vue_sfc_1 = __importDefault(require("./vue-sfc"));
8
8
  require('ts-node').register({
9
9
  compilerOptions: {
10
10
  module: 'nodeNext',
11
11
  target: 'es2022',
12
12
  strict: true,
13
- resolveJsonModule: true,
13
+ allowJs: true,
14
+ allowSyntheticDefaultImports: true,
14
15
  esModuleInterop: true,
16
+ experimentalDecorators: false,
17
+ resolveJsonModule: true,
15
18
  skipLibCheck: true,
16
19
  lib: ['es2022', 'esnext.decorators']
17
20
  },
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tsvue.js","sourceRoot":"","sources":["../../src/transpilers/tsvue.ts"],"names":[],"mappings":";;;;;AAAA,MAAM,KAAK,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;AACjD,wDAAuC;AAEvC,OAAO,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC;IAC3B,eAAe,EAAE;QAChB,MAAM,EAAE,UAAU;QAClB,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE,IAAI;QACb,4BAA4B,EAAE,IAAI;QAClC,eAAe,EAAE,IAAI;QACrB,sBAAsB,EAAE,KAAK;QAC7B,iBAAiB,EAAE,IAAI;QACvB,YAAY,EAAE,IAAI;QAClB,GAAG,EAAE,CAAC,QAAQ,EAAE,mBAAmB,CAAC;KACpC;IACD,aAAa,EAAE,IAAI;CACnB,CAAC,CAAC;AAEH,OAAO,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE,CAAC;AAErC,uDAAuD;AACvD,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;AACzB,MAAc,CAAC,UAAU,GAAI,MAAc,CAAC,MAAM,CAAC,UAAU,CAAC;AAE/D,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,MAAW;IACtC,IAAI,CAAC;QACJ,MAAM,WAAW,GAAG,IAAI,iBAAc,CAAC;YACtC,OAAO,EAAE,CAAC,sBAAsB,EAAE,6BAA6B,CAAC;SAChE,CAAC,CAAC;QACH,MAAM,eAAe,GAAG,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEnF,OAAO,eAAe,CAAC,IAAI,CAAC;IAC7B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,CAAC;AACvB,CAAC,CAAC,CAAC","sourcesContent":["const hooks = require('require-extension-hooks');\r\nimport VueTransformer from './vue-sfc';\r\n\r\nrequire('ts-node').register({\r\n\tcompilerOptions: {\r\n\t\tmodule: 'nodeNext',\r\n\t\ttarget: 'es2022',\r\n\t\tstrict: true,\r\n\t\tallowJs: true,\r\n\t\tallowSyntheticDefaultImports: true,\r\n\t\tesModuleInterop: true,\r\n\t\texperimentalDecorators: false,\r\n\t\tresolveJsonModule: true,\r\n\t\tskipLibCheck: true,\r\n\t\tlib: ['es2022', 'esnext.decorators']\r\n\t},\r\n\ttranspileOnly: true\r\n});\r\n\r\nrequire('tsconfig-paths').register();\r\n\r\n// Register jsdom globally and set SVGElement on global\r\nrequire('jsdom-global')();\r\n(global as any).SVGElement = (global as any).window.SVGElement;\r\n\r\nhooks('vue').push(function (params: any) {\r\n\ttry {\r\n\t\tconst transformer = new VueTransformer({\r\n\t\t\texclude: ['(?:^|/)node_modules/', '(?:^|/)cucumber-tsflow/lib/']\r\n\t\t});\r\n\t\tconst transformResult = transformer.transformCode(params.content, params.filename);\r\n\r\n\t\treturn transformResult.code;\r\n\t} catch (err) {\r\n\t\tconsole.log(err);\r\n\t}\r\n\treturn params.content;\r\n});\r\n"]}
@@ -1 +1 @@
1
- {"root":["../src/behave.ts","../src/esnode.ts","../src/esvue.ts","../src/index.ts","../src/junitbamboo.ts","../src/snippet.ts","../src/tsnode.ts","../src/tsvue.ts","../src/version.ts","../src/api/index.ts","../src/api/load-configuration.ts","../src/api/load-support.ts","../src/api/run-cucumber.ts","../src/bindings/binding-context.ts","../src/bindings/binding-decorator.ts","../src/bindings/binding-registry.ts","../src/bindings/hook-decorators.ts","../src/bindings/step-binding.ts","../src/bindings/step-decorators.ts","../src/bindings/types.ts","../src/cli/argv-parser.ts","../src/cli/index.ts","../src/cli/run.ts","../src/formatter/behave-json-formatter.ts","../src/formatter/junit-bamboo-formatter.ts","../src/formatter/step-definition-snippit-syntax/tsflow-snippet-syntax.ts","../src/gherkin/configuration.ts","../src/gherkin/gherkin-feature.ts","../src/gherkin/gherkin-manager.ts","../src/gherkin/models.ts","../src/runtime/coordinator.ts","../src/runtime/make-runtime.ts","../src/runtime/managed-scenario-context.ts","../src/runtime/message-collector.ts","../src/runtime/scenario-context.ts","../src/runtime/scenario-info.ts","../src/runtime/test-case-info.ts","../src/runtime/test-case-runner.ts","../src/runtime/utils.ts","../src/runtime/worker.ts","../src/runtime/parallel/adapter.ts","../src/runtime/parallel/run-worker.ts","../src/runtime/parallel/types.ts","../src/runtime/parallel/worker.ts","../src/runtime/serial/adapter.ts","../src/transpilers/esbuild-transpiler.ts","../src/transpilers/esbuild.ts","../src/transpilers/vue-sfc/compiler.ts","../src/transpilers/vue-sfc/index.ts","../src/transpilers/vue-sfc/main.ts","../src/transpilers/vue-sfc/script.ts","../src/transpilers/vue-sfc/template.ts","../src/transpilers/vue-sfc/types.ts","../src/transpilers/vue-sfc/utils/descriptorcache.ts","../src/transpilers/vue-sfc/utils/error.ts","../src/transpilers/vue-sfc/utils/query.ts","../src/types/durations.d.ts","../src/types/global.d.ts","../src/types/lep.d.ts","../src/utils/helpers.ts","../src/utils/logger.ts","../src/utils/our-callsite.ts"],"version":"5.8.2"}
1
+ {"root":["../src/behave.ts","../src/index.ts","../src/junitbamboo.ts","../src/snippet.ts","../src/version.ts","../src/api/convert-configuration.ts","../src/api/index.ts","../src/api/load-configuration.ts","../src/api/load-support.ts","../src/api/run-cucumber.ts","../src/bindings/binding-context.ts","../src/bindings/binding-decorator.ts","../src/bindings/binding-registry.ts","../src/bindings/hook-decorators.ts","../src/bindings/step-binding.ts","../src/bindings/step-decorators.ts","../src/bindings/types.ts","../src/cli/argv-parser.ts","../src/cli/index.ts","../src/cli/run.ts","../src/formatter/behave-json-formatter.ts","../src/formatter/junit-bamboo-formatter.ts","../src/formatter/step-definition-snippit-syntax/tsflow-snippet-syntax.ts","../src/gherkin/configuration.ts","../src/gherkin/gherkin-feature.ts","../src/gherkin/gherkin-manager.ts","../src/gherkin/models.ts","../src/runtime/coordinator.ts","../src/runtime/make-runtime.ts","../src/runtime/managed-scenario-context.ts","../src/runtime/message-collector.ts","../src/runtime/scenario-context.ts","../src/runtime/scenario-info.ts","../src/runtime/test-case-info.ts","../src/runtime/test-case-runner.ts","../src/runtime/types.ts","../src/runtime/utils.ts","../src/runtime/worker.ts","../src/runtime/parallel/adapter.ts","../src/runtime/parallel/run-worker.ts","../src/runtime/parallel/worker.ts","../src/runtime/serial/adapter.ts","../src/transpilers/esbuild-transpiler.ts","../src/transpilers/esbuild.ts","../src/transpilers/esnode.ts","../src/transpilers/esvue.ts","../src/transpilers/tsnode-exp.ts","../src/transpilers/tsnode.ts","../src/transpilers/tsvue-exp.ts","../src/transpilers/tsvue.ts","../src/transpilers/vue-sfc/compiler.ts","../src/transpilers/vue-sfc/index.ts","../src/transpilers/vue-sfc/main.ts","../src/transpilers/vue-sfc/script.ts","../src/transpilers/vue-sfc/template.ts","../src/transpilers/vue-sfc/types.ts","../src/transpilers/vue-sfc/utils/descriptorcache.ts","../src/transpilers/vue-sfc/utils/error.ts","../src/transpilers/vue-sfc/utils/query.ts","../src/types/durations.d.ts","../src/types/global.d.ts","../src/types/lep.d.ts","../src/utils/helpers.ts","../src/utils/logger.ts","../src/utils/our-callsite.ts"],"version":"5.8.2"}
package/lib/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const version = "7.1.2";
1
+ export declare const version = "7.2.0";
package/lib/version.js CHANGED
@@ -2,5 +2,5 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.version = void 0;
4
4
  // Generated by genversion.
5
- exports.version = '7.1.2';
5
+ exports.version = '7.2.0';
6
6
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":";;;AAAA,2BAA2B;AACd,QAAA,OAAO,GAAG,OAAO,CAAA","sourcesContent":["// Generated by genversion.\nexport const version = '7.1.2'\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":";;;AAAA,2BAA2B;AACd,QAAA,OAAO,GAAG,OAAO,CAAA","sourcesContent":["// Generated by genversion.\nexport const version = '7.2.0'\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@lynxwall/cucumber-tsflow",
3
3
  "description": "Provides 'specflow' like bindings for CucumberJS 11.2.0 in TypeScript 5.8+.",
4
- "version": "7.1.2",
4
+ "version": "7.2.0",
5
5
  "author": "Lonnie Wall <lynxdev@lynxwall.com>",
6
6
  "license": "MIT",
7
7
  "keywords": [
@@ -39,21 +39,23 @@
39
39
  "require": "./lib/*.js"
40
40
  },
41
41
  "./behave": "./lib/behave.js",
42
- "./esnode": "./lib/esnode.js",
43
- "./esvue": "./lib/esvue.js",
42
+ "./esnode": "./lib/transpilers/esnode.js",
43
+ "./esvue": "./lib/transpilers/esvue.js",
44
44
  "./junitbamboo": "./lib/junitbamboo.js",
45
45
  "./snippet": "./lib/snippet.js",
46
- "./tsnode": "./lib/tsnode.js",
47
- "./tsvue": "./lib/tsvue.js",
46
+ "./tsnode-exp": "./lib/transpilers/tsnode-exp.js",
47
+ "./tsnode": "./lib/transpilers/tsnode.js",
48
+ "./tsvue-exp": "./lib/transpilers/tsvue-exp.js",
49
+ "./tsvue": "./lib/transpilers/tsvue.js",
48
50
  "./package.json": "./package.json"
49
51
  },
50
52
  "types": "./lib/index.d.ts",
51
53
  "dependencies": {
52
- "@cucumber/cucumber": "~11.2.0",
54
+ "@cucumber/cucumber": "~11.3.0",
53
55
  "@jeanbenitez/logical-expression-parser": "~1.0.0",
54
56
  "@types/node": "~22.13.10",
55
57
  "ansis": "~3.17.0",
56
- "commander": "^13.1.0",
58
+ "commander": "^10.0.1",
57
59
  "debug": "^4.3.4",
58
60
  "esbuild": "~0.25.1",
59
61
  "glob": "~11.0.1",
@@ -88,10 +90,11 @@
88
90
  "build": "genversion --es6 src/version.ts && tsc --build tsconfig.node.json && shx cp src/wrapper.mjs lib/ && shx cp src/api/wrapper.mjs lib/api/",
89
91
  "build:watch": "tsc --build tsconfig.node.json --watch"
90
92
  },
91
- "bin": {
92
- "cucumber-tsflow": "bin/cucumber-tsflow.js"
93
- },
93
+ "bin": "bin/cucumber-tsflow.js",
94
94
  "files": [
95
+ "CHANGELOG.md",
96
+ "LICENSE",
97
+ "README.md",
95
98
  "api/",
96
99
  "bin/",
97
100
  "lib/"
package/lib/esnode.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"esnode.js","sourceRoot":"","sources":["../src/esnode.ts"],"names":[],"mappings":";;AAAA,OAAO,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC;IAC3B,eAAe,EAAE;QAChB,MAAM,EAAE,UAAU;QAClB,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,IAAI;QACZ,iBAAiB,EAAE,IAAI;QACvB,eAAe,EAAE,IAAI;QACrB,YAAY,EAAE,IAAI;QAClB,GAAG,EAAE,CAAC,QAAQ,EAAE,mBAAmB,CAAC;KACpC;IACD,aAAa,EAAE,IAAI;IACnB,UAAU,EAAE,8DAA8D;CAC1E,CAAC,CAAC;AAEH,OAAO,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE,CAAC","sourcesContent":["require('ts-node').register({\r\n\tcompilerOptions: {\r\n\t\tmodule: 'nodeNext',\r\n\t\ttarget: 'es2022',\r\n\t\tstrict: true,\r\n\t\tresolveJsonModule: true,\r\n\t\tesModuleInterop: true,\r\n\t\tskipLibCheck: true,\r\n\t\tlib: ['es2022', 'esnext.decorators']\r\n\t},\r\n\ttranspileOnly: true,\r\n\ttranspiler: '@lynxwall/cucumber-tsflow/lib/transpilers/esbuild-transpiler'\r\n});\r\n\r\nrequire('tsconfig-paths').register();\r\n"]}
package/lib/esvue.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"esvue.js","sourceRoot":"","sources":["../src/esvue.ts"],"names":[],"mappings":";;;;;AAAA,MAAM,KAAK,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;AACjD,oEAAmD;AAEnD,OAAO,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC;IAC3B,eAAe,EAAE;QAChB,MAAM,EAAE,UAAU;QAClB,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,IAAI;QACZ,iBAAiB,EAAE,IAAI;QACvB,eAAe,EAAE,IAAI;QACrB,YAAY,EAAE,IAAI;QAClB,GAAG,EAAE,CAAC,QAAQ,EAAE,mBAAmB,CAAC;KACpC;IACD,aAAa,EAAE,IAAI;IACnB,UAAU,EAAE,8DAA8D;CAC1E,CAAC,CAAC;AAEH,OAAO,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE,CAAC;AAErC,uDAAuD;AACvD,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;AACzB,MAAc,CAAC,UAAU,GAAI,MAAc,CAAC,MAAM,CAAC,UAAU,CAAC;AAE/D,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,MAAW;IACtC,IAAI,CAAC;QACJ,MAAM,WAAW,GAAG,IAAI,iBAAc,CAAC;YACtC,OAAO,EAAE,CAAC,sBAAsB,EAAE,6BAA6B,CAAC;SAChE,CAAC,CAAC;QACH,MAAM,eAAe,GAAG,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEnF,OAAO,eAAe,CAAC,IAAI,CAAC;IAC7B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,CAAC;AACvB,CAAC,CAAC,CAAC","sourcesContent":["const hooks = require('require-extension-hooks');\r\nimport VueTransformer from './transpilers/vue-sfc';\r\n\r\nrequire('ts-node').register({\r\n\tcompilerOptions: {\r\n\t\tmodule: 'nodeNext',\r\n\t\ttarget: 'es2022',\r\n\t\tstrict: true,\r\n\t\tresolveJsonModule: true,\r\n\t\tesModuleInterop: true,\r\n\t\tskipLibCheck: true,\r\n\t\tlib: ['es2022', 'esnext.decorators']\r\n\t},\r\n\ttranspileOnly: true,\r\n\ttranspiler: '@lynxwall/cucumber-tsflow/lib/transpilers/esbuild-transpiler'\r\n});\r\n\r\nrequire('tsconfig-paths').register();\r\n\r\n// Register jsdom globally and set SVGElement on global\r\nrequire('jsdom-global')();\r\n(global as any).SVGElement = (global as any).window.SVGElement;\r\n\r\nhooks('vue').push(function (params: any) {\r\n\ttry {\r\n\t\tconst transformer = new VueTransformer({\r\n\t\t\texclude: ['(?:^|/)node_modules/', '(?:^|/)cucumber-tsflow/lib/']\r\n\t\t});\r\n\t\tconst transformResult = transformer.transformCode(params.content, params.filename);\r\n\r\n\t\treturn transformResult.code;\r\n\t} catch (err) {\r\n\t\tconsole.log(err);\r\n\t}\r\n\treturn params.content;\r\n});\r\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/runtime/parallel/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 { ISourcesCoordinates } from '@cucumber/cucumber/api';\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 InitializeTsflowCommand extends InitializeCommand {\r\n\tmessageData: IMessageData;\r\n}\r\n\r\nexport type CoordinatorToWorkerCommand = InitializeTsflowCommand | RunCommand | FinalizeCommand;\r\n"]}
package/lib/tsnode.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"tsnode.js","sourceRoot":"","sources":["../src/tsnode.ts"],"names":[],"mappings":";;AAAA,OAAO,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC;IAC3B,eAAe,EAAE;QAChB,MAAM,EAAE,UAAU;QAClB,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,IAAI;QACZ,iBAAiB,EAAE,IAAI;QACvB,eAAe,EAAE,IAAI;QACrB,YAAY,EAAE,IAAI;QAClB,GAAG,EAAE,CAAC,QAAQ,EAAE,mBAAmB,CAAC;KACpC;IACD,aAAa,EAAE,IAAI;CACnB,CAAC,CAAC;AAEH,OAAO,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE,CAAC","sourcesContent":["require('ts-node').register({\r\n\tcompilerOptions: {\r\n\t\tmodule: 'nodeNext',\r\n\t\ttarget: 'es2022',\r\n\t\tstrict: true,\r\n\t\tresolveJsonModule: true,\r\n\t\tesModuleInterop: true,\r\n\t\tskipLibCheck: true,\r\n\t\tlib: ['es2022', 'esnext.decorators']\r\n\t},\r\n\ttranspileOnly: true\r\n});\r\n\r\nrequire('tsconfig-paths').register();\r\n"]}
package/lib/tsvue.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"tsvue.js","sourceRoot":"","sources":["../src/tsvue.ts"],"names":[],"mappings":";;;;;AAAA,MAAM,KAAK,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;AACjD,oEAAmD;AAEnD,OAAO,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC;IAC3B,eAAe,EAAE;QAChB,MAAM,EAAE,UAAU;QAClB,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,IAAI;QACZ,iBAAiB,EAAE,IAAI;QACvB,eAAe,EAAE,IAAI;QACrB,YAAY,EAAE,IAAI;QAClB,GAAG,EAAE,CAAC,QAAQ,EAAE,mBAAmB,CAAC;KACpC;IACD,aAAa,EAAE,IAAI;CACnB,CAAC,CAAC;AAEH,OAAO,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE,CAAC;AAErC,uDAAuD;AACvD,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;AACzB,MAAc,CAAC,UAAU,GAAI,MAAc,CAAC,MAAM,CAAC,UAAU,CAAC;AAE/D,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,MAAW;IACtC,IAAI,CAAC;QACJ,MAAM,WAAW,GAAG,IAAI,iBAAc,CAAC;YACtC,OAAO,EAAE,CAAC,sBAAsB,EAAE,6BAA6B,CAAC;SAChE,CAAC,CAAC;QACH,MAAM,eAAe,GAAG,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEnF,OAAO,eAAe,CAAC,IAAI,CAAC;IAC7B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,CAAC;AACvB,CAAC,CAAC,CAAC","sourcesContent":["const hooks = require('require-extension-hooks');\r\nimport VueTransformer from './transpilers/vue-sfc';\r\n\r\nrequire('ts-node').register({\r\n\tcompilerOptions: {\r\n\t\tmodule: 'nodeNext',\r\n\t\ttarget: 'es2022',\r\n\t\tstrict: true,\r\n\t\tresolveJsonModule: true,\r\n\t\tesModuleInterop: true,\r\n\t\tskipLibCheck: true,\r\n\t\tlib: ['es2022', 'esnext.decorators']\r\n\t},\r\n\ttranspileOnly: true\r\n});\r\n\r\nrequire('tsconfig-paths').register();\r\n\r\n// Register jsdom globally and set SVGElement on global\r\nrequire('jsdom-global')();\r\n(global as any).SVGElement = (global as any).window.SVGElement;\r\n\r\nhooks('vue').push(function (params: any) {\r\n\ttry {\r\n\t\tconst transformer = new VueTransformer({\r\n\t\t\texclude: ['(?:^|/)node_modules/', '(?:^|/)cucumber-tsflow/lib/']\r\n\t\t});\r\n\t\tconst transformResult = transformer.transformCode(params.content, params.filename);\r\n\r\n\t\treturn transformResult.code;\r\n\t} catch (err) {\r\n\t\tconsole.log(err);\r\n\t}\r\n\treturn params.content;\r\n});\r\n"]}
File without changes
File without changes
File without changes
File without changes