@lynxwall/cucumber-tsflow 7.3.1 → 7.3.3

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.
@@ -8,7 +8,7 @@ const cucumber_1 = require("@cucumber/cucumber");
8
8
  const binding_context_1 = require("./binding-context");
9
9
  const binding_registry_1 = require("./binding-registry");
10
10
  const step_binding_1 = require("./step-binding");
11
- const cucumber_2 = require("@cucumber/cucumber");
11
+ const index_1 = require("../index");
12
12
  const underscore_1 = __importDefault(require("underscore"));
13
13
  /**
14
14
  * A set of step patterns that have been registered with Cucumber.
@@ -90,7 +90,7 @@ function binding(requiredContextTypes) {
90
90
  * before the test run doesn't work
91
91
  */
92
92
  const defineParameters = underscore_1.default.once(() => {
93
- (0, cucumber_2.defineParameterType)({
93
+ (0, index_1.defineParameterType)({
94
94
  name: 'boolean',
95
95
  regexp: /true|false/,
96
96
  transformer: s => (s === 'true' ? true : false)
@@ -1 +1 @@
1
- {"version":3,"file":"binding-decorator.js","sourceRoot":"","sources":["../../src/bindings/binding-decorator.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n\tAfter,\r\n\tAfterStep,\r\n\tAfterAll,\r\n\tBefore,\r\n\tBeforeStep,\r\n\tBeforeAll,\r\n\tGiven,\r\n\tThen,\r\n\tWhen,\r\n\tWorld\r\n} from '@cucumber/cucumber';\r\nimport { getStepBindings, getStepBindingsExp, getCollectedBindings } from './binding-context';\r\nimport { BindingRegistry, DEFAULT_TAG } from './binding-registry';\r\nimport { StepBinding, StepBindingFlags } from './step-binding';\r\nimport { ContextType, StepPattern } from './types';\r\nimport { defineParameterType } from '@cucumber/cucumber';\r\nimport _ from 'underscore';\r\n\r\ninterface WritableWorld extends World {\r\n\t[key: string]: any;\r\n}\r\n\r\n/**\r\n * A set of step patterns that have been registered with Cucumber.\r\n *\r\n * In order to support scoped (or tagged) step definitions, we must ensure that any step binding is\r\n * only registered with Cucumber once. The binding function for that step pattern then becomes\r\n * responsible for looking up and execuing the step binding based on the context that is in scope at\r\n * the point of invocation.\r\n */\r\nconst stepPatternRegistrations = new Map<StepPattern, StepBindingFlags>();\r\n\r\n/**\r\n * A class decorator that marks the associated class as a CucumberJS binding.\r\n *\r\n * @param requiredContextTypes An optional array of Types that will be created and passed into the created\r\n * object for each scenario.\r\n *\r\n * An instance of the decorated class will be created for each scenario.\r\n */\r\nexport function binding(requiredContextTypes?: ContextType[]): any {\r\n\tif (global.experimentalDecorators) {\r\n\t\treturn <T>(target: { new (...args: any[]): T }) => {\r\n\t\t\tconst bindingRegistry = BindingRegistry.instance;\r\n\t\t\tbindingRegistry.registerContextTypesForClass(target.prototype, requiredContextTypes);\r\n\t\t\tdefineParameters();\r\n\r\n\t\t\t// the class decorator is called last when decorators on a type are initialized. All other decorators\r\n\t\t\t// are added to DecoratorContext.metadata before this is called.\r\n\t\t\t// This will get all those bindings and then clear metadata for the next type that's loaded.\r\n\t\t\tconst allBindings: StepBinding[] = getStepBindingsExp();\r\n\t\t\tallBindings.forEach(stepBinding => {\r\n\t\t\t\t// For static methods, we need to set the classPrototype to the class itself, not the prototype\r\n\t\t\t\tif (stepBinding.stepIsStatic) {\r\n\t\t\t\t\tstepBinding.classPrototype = target;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstepBinding.classPrototype = target.prototype;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbindingRegistry.registerStepBinding(stepBinding);\r\n\r\n\t\t\t\t// Register with cucumber\r\n\t\t\t\taddStepBinding(stepBinding);\r\n\t\t\t});\r\n\t\t};\r\n\t} else {\r\n\t\treturn function classDecorator(target: Function, context: ClassDecoratorContext) {\r\n\t\t\tconst bindingRegistry = BindingRegistry.instance;\r\n\t\t\tbindingRegistry.registerContextTypesForClass(target.prototype, requiredContextTypes);\r\n\t\t\tdefineParameters();\r\n\r\n\t\t\t// the class decorator is called last when decorators on a type are initialized. All other decorators\r\n\t\t\t// are added to DecoratorContext.metadata before this is called.\r\n\t\t\t// This will get all those bindings and then clear metadata for the next type that's loaded.\r\n\t\t\tconst allBindings: StepBinding[] = getStepBindings(context);\r\n\t\t\tallBindings.forEach(stepBinding => {\r\n\t\t\t\t// Set the class prototype and then register the binding with the prototype\r\n\t\t\t\tstepBinding.classPrototype = target.prototype;\r\n\t\t\t\tbindingRegistry.registerStepBinding(stepBinding);\r\n\r\n\t\t\t\t// add the step binding to the binding registry\r\n\t\t\t\taddStepBinding(stepBinding);\r\n\t\t\t});\r\n\r\n\t\t\t// Process pending step bindings after class is decorated\r\n\t\t\tcontext.addInitializer(function () {\r\n\t\t\t\t// Get all the collected bindings\r\n\t\t\t\tconst allBindings = getCollectedBindings();\r\n\r\n\t\t\t\tallBindings.forEach(stepBinding => {\r\n\t\t\t\t\t// Set the class prototype and register\r\n\t\t\t\t\tstepBinding.classPrototype = target.prototype;\r\n\t\t\t\t\tbindingRegistry.registerStepBinding(stepBinding);\r\n\r\n\t\t\t\t\t// Register with cucumber - call the local addStepBinding function\r\n\t\t\t\t\taddStepBinding(stepBinding);\r\n\t\t\t\t});\r\n\t\t\t});\r\n\r\n\t\t\treturn target;\r\n\t\t};\r\n\t}\r\n}\r\n\r\n/**\r\n * Called only once to register new parameters. This has to be\r\n * executed here during binding initialization for cucumber to\r\n * to use it when matching expressions. Attempting to add it\r\n * before the test run doesn't work\r\n */\r\nconst defineParameters = _.once(() => {\r\n\tdefineParameterType({\r\n\t\tname: 'boolean',\r\n\t\tregexp: /true|false/,\r\n\t\ttransformer: s => (s === 'true' ? true : false)\r\n\t});\r\n});\r\n\r\n/**\r\n * Common helper used to add StepBindings to the binding registry\r\n * @param stepBinding\r\n * @returns\r\n */\r\nfunction addStepBinding(stepBinding: StepBinding): void {\r\n\tif (stepBinding.bindingType & StepBindingFlags.StepDefinitions) {\r\n\t\tlet stepBindingFlags = stepPatternRegistrations.get(stepBinding.stepPattern.toString());\r\n\t\tif (stepBindingFlags === undefined) {\r\n\t\t\tstepBindingFlags = StepBindingFlags.none;\r\n\t\t}\r\n\t\tif (stepBindingFlags & stepBinding.bindingType) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tbindStepDefinition(stepBinding);\r\n\t\tstepPatternRegistrations.set(stepBinding.stepPattern.toString(), stepBindingFlags | stepBinding.bindingType);\r\n\t} else if (stepBinding.bindingType & StepBindingFlags.Hooks) {\r\n\t\tbindHook(stepBinding);\r\n\t}\r\n}\r\n\r\n/**\r\n * Binds a step definition to Cucumber.\r\n *\r\n * @param stepBinding The [[StepBinding]] that represents a 'given', 'when', or 'then' step definition.\r\n */\r\nfunction bindStepDefinition(stepBinding: StepBinding): void {\r\n\tconst stepFunction = function (this: WritableWorld): any {\r\n\t\tconst bindingRegistry = BindingRegistry.instance;\r\n\r\n\t\tconst scenarioContext = global.messageCollector.getStepScenarioContext(stepBinding);\r\n\r\n\t\tif (scenarioContext) {\r\n\t\t\tconst matchingStepBindings = bindingRegistry.getStepBindings(\r\n\t\t\t\tstepBinding.stepPattern.toString(),\r\n\t\t\t\tscenarioContext.scenarioInfo.tags\r\n\t\t\t);\r\n\r\n\t\t\tif (matchingStepBindings.length > 1) {\r\n\t\t\t\tlet message = `Ambiguous step definitions for '${matchingStepBindings[0].stepPattern}':\\n`;\r\n\r\n\t\t\t\tmatchingStepBindings.forEach(matchingStepBinding => {\r\n\t\t\t\t\tmessage =\r\n\t\t\t\t\t\tmessage +\r\n\t\t\t\t\t\t`\\t\\t${String(matchingStepBinding.classPropertyKey)} (${matchingStepBinding.callsite.toString()})\\n`;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthrow new Error(message);\r\n\t\t\t} else if (matchingStepBindings.length === 0) {\r\n\t\t\t\tthrow new Error(\r\n\t\t\t\t\t`Cannot find matched step definition for ${stepBinding.stepPattern.toString()} with tag ${\r\n\t\t\t\t\t\tscenarioContext.scenarioInfo.tags\r\n\t\t\t\t\t} in binding registry`\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tconst contextTypes = bindingRegistry.getContextTypesForClass(matchingStepBindings[0].classPrototype);\r\n\t\t\tconst bindingObject = scenarioContext.getOrActivateBindingClass(\r\n\t\t\t\tmatchingStepBindings[0].classPrototype,\r\n\t\t\t\tcontextTypes,\r\n\t\t\t\tthis\r\n\t\t\t);\r\n\t\t\tbindingObject._worldObj = this;\r\n\r\n\t\t\treturn (bindingObject[matchingStepBindings[0].classPropertyKey] as Function).apply(\r\n\t\t\t\tbindingObject,\r\n\t\t\t\targuments as any\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\tthrow new Error('Unable to find the Scenario Context for a Step!');\r\n\t\t}\r\n\t};\r\n\r\n\tObject.defineProperty(stepFunction, 'length', {\r\n\t\tvalue: stepBinding.stepArgsLength\r\n\t});\r\n\r\n\t// initialize options used on all step bindings\r\n\tconst options = {\r\n\t\tcucumberKey: stepBinding.cucumberKey,\r\n\t\ttimeout: stepBinding.timeout,\r\n\t\twrapperOptions: stepBinding.wrapperOption\r\n\t};\r\n\t// call appropriate step\r\n\tif (stepBinding.bindingType & StepBindingFlags.given) {\r\n\t\tGiven(stepBinding.stepPattern, options, stepFunction);\r\n\t} else if (stepBinding.bindingType & StepBindingFlags.when) {\r\n\t\tWhen(stepBinding.stepPattern, options, stepFunction);\r\n\t} else if (stepBinding.bindingType & StepBindingFlags.then) {\r\n\t\tThen(stepBinding.stepPattern, options, stepFunction);\r\n\t}\r\n}\r\n\r\n/**\r\n * Binds a hook to Cucumber.\r\n *\r\n * @param stepBinding The [[StepBinding]] that represents a 'before', or 'after', step definition.\r\n */\r\nfunction bindHook(stepBinding: StepBinding): void {\r\n\tconst globalHookFunction = function (this: any): any {\r\n\t\t// Check if it's a static method\r\n\t\tif (stepBinding.stepIsStatic || !stepBinding.classPrototype[stepBinding.classPropertyKey]) {\r\n\t\t\tconst constructor = stepBinding.classPrototype.constructor;\r\n\r\n\t\t\tif (constructor && constructor[stepBinding.classPropertyKey]) {\r\n\t\t\t\treturn constructor[stepBinding.classPropertyKey].apply(constructor);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// For non-static methods\r\n\t\tif (stepBinding.classPrototype[stepBinding.classPropertyKey]) {\r\n\t\t\treturn stepBinding.classPrototype[stepBinding.classPropertyKey].apply(stepBinding.classPrototype);\r\n\t\t}\r\n\r\n\t\tthrow new Error(\r\n\t\t\t`Method ${String(stepBinding.classPropertyKey)} not found on class ${stepBinding.classPrototype?.constructor?.name}`\r\n\t\t);\r\n\t};\r\n\t// Main binding for all other hooks (before, after, beforeStep, afterStep)\r\n\tconst hookFunction = function (this: any, arg: any): any {\r\n\t\tconst scenarioContext = global.messageCollector.getHookScenarioContext(arg);\r\n\t\tif (scenarioContext) {\r\n\t\t\tconst contextTypes = BindingRegistry.instance.getContextTypesForClass(stepBinding.classPrototype);\r\n\t\t\tconst bindingObject = scenarioContext.getOrActivateBindingClass(stepBinding.classPrototype, contextTypes, this);\r\n\t\t\tbindingObject._worldObj = this;\r\n\t\t\treturn (bindingObject[stepBinding.classPropertyKey] as Function).apply(bindingObject, arguments as any);\r\n\t\t} else {\r\n\t\t\tthrow new Error('Unable to find the Scenario Context for Hook!');\r\n\t\t}\r\n\t};\r\n\t// length values need to be added to our binding functions.\r\n\t// These are used in cucumber to determine if the function is\r\n\t// a callback or promise.\r\n\tObject.defineProperty(globalHookFunction, 'length', {\r\n\t\tvalue: stepBinding.stepArgsLength\r\n\t});\r\n\tObject.defineProperty(hookFunction, 'length', {\r\n\t\tvalue: stepBinding.stepArgsLength\r\n\t});\r\n\r\n\tconst tags = stepBinding.tags === DEFAULT_TAG ? undefined : stepBinding.tags;\r\n\r\n\t// This binds the appropriate function above to the associated\r\n\t// cucumber step functions.\r\n\tswitch (stepBinding.bindingType) {\r\n\t\tcase StepBindingFlags.beforeAll: {\r\n\t\t\tconst options = { cucumberKey: stepBinding.cucumberKey, timeout: stepBinding.timeout };\r\n\t\t\tBeforeAll(options, globalHookFunction);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase StepBindingFlags.before: {\r\n\t\t\tconst options = { cucumberKey: stepBinding.cucumberKey, tags: tags, timeout: stepBinding.timeout };\r\n\t\t\tBefore(options, hookFunction);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase StepBindingFlags.beforeStep: {\r\n\t\t\tconst options = { cucumberKey: stepBinding.cucumberKey, tags: tags, timeout: stepBinding.timeout };\r\n\t\t\tBeforeStep(options, hookFunction);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase StepBindingFlags.afterAll: {\r\n\t\t\tconst options = { cucumberKey: stepBinding.cucumberKey, timeout: stepBinding.timeout };\r\n\t\t\tAfterAll(options, globalHookFunction);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase StepBindingFlags.after: {\r\n\t\t\tconst options = { cucumberKey: stepBinding.cucumberKey, tags: tags, timeout: stepBinding.timeout };\r\n\t\t\tAfter(options, hookFunction);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase StepBindingFlags.afterStep: {\r\n\t\t\tconst options = { cucumberKey: stepBinding.cucumberKey, tags: tags, timeout: stepBinding.timeout };\r\n\t\t\tAfterStep(options, hookFunction);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n}\r\n"]}
1
+ {"version":3,"file":"binding-decorator.js","sourceRoot":"","sources":["../../src/bindings/binding-decorator.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n\tAfter,\r\n\tAfterStep,\r\n\tAfterAll,\r\n\tBefore,\r\n\tBeforeStep,\r\n\tBeforeAll,\r\n\tGiven,\r\n\tThen,\r\n\tWhen,\r\n\tWorld\r\n} from '@cucumber/cucumber';\r\nimport { getStepBindings, getStepBindingsExp, getCollectedBindings } from './binding-context';\r\nimport { BindingRegistry, DEFAULT_TAG } from './binding-registry';\r\nimport { StepBinding, StepBindingFlags } from './step-binding';\r\nimport { ContextType, StepPattern } from './types';\r\nimport { defineParameterType } from '../index';\r\nimport _ from 'underscore';\r\n\r\ninterface WritableWorld extends World {\r\n\t[key: string]: any;\r\n}\r\n\r\n/**\r\n * A set of step patterns that have been registered with Cucumber.\r\n *\r\n * In order to support scoped (or tagged) step definitions, we must ensure that any step binding is\r\n * only registered with Cucumber once. The binding function for that step pattern then becomes\r\n * responsible for looking up and execuing the step binding based on the context that is in scope at\r\n * the point of invocation.\r\n */\r\nconst stepPatternRegistrations = new Map<StepPattern, StepBindingFlags>();\r\n\r\n/**\r\n * A class decorator that marks the associated class as a CucumberJS binding.\r\n *\r\n * @param requiredContextTypes An optional array of Types that will be created and passed into the created\r\n * object for each scenario.\r\n *\r\n * An instance of the decorated class will be created for each scenario.\r\n */\r\nexport function binding(requiredContextTypes?: ContextType[]): any {\r\n\tif (global.experimentalDecorators) {\r\n\t\treturn <T>(target: { new (...args: any[]): T }) => {\r\n\t\t\tconst bindingRegistry = BindingRegistry.instance;\r\n\t\t\tbindingRegistry.registerContextTypesForClass(target.prototype, requiredContextTypes);\r\n\t\t\tdefineParameters();\r\n\r\n\t\t\t// the class decorator is called last when decorators on a type are initialized. All other decorators\r\n\t\t\t// are added to DecoratorContext.metadata before this is called.\r\n\t\t\t// This will get all those bindings and then clear metadata for the next type that's loaded.\r\n\t\t\tconst allBindings: StepBinding[] = getStepBindingsExp();\r\n\t\t\tallBindings.forEach(stepBinding => {\r\n\t\t\t\t// For static methods, we need to set the classPrototype to the class itself, not the prototype\r\n\t\t\t\tif (stepBinding.stepIsStatic) {\r\n\t\t\t\t\tstepBinding.classPrototype = target;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstepBinding.classPrototype = target.prototype;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbindingRegistry.registerStepBinding(stepBinding);\r\n\r\n\t\t\t\t// Register with cucumber\r\n\t\t\t\taddStepBinding(stepBinding);\r\n\t\t\t});\r\n\t\t};\r\n\t} else {\r\n\t\treturn function classDecorator(target: Function, context: ClassDecoratorContext) {\r\n\t\t\tconst bindingRegistry = BindingRegistry.instance;\r\n\t\t\tbindingRegistry.registerContextTypesForClass(target.prototype, requiredContextTypes);\r\n\t\t\tdefineParameters();\r\n\r\n\t\t\t// the class decorator is called last when decorators on a type are initialized. All other decorators\r\n\t\t\t// are added to DecoratorContext.metadata before this is called.\r\n\t\t\t// This will get all those bindings and then clear metadata for the next type that's loaded.\r\n\t\t\tconst allBindings: StepBinding[] = getStepBindings(context);\r\n\t\t\tallBindings.forEach(stepBinding => {\r\n\t\t\t\t// Set the class prototype and then register the binding with the prototype\r\n\t\t\t\tstepBinding.classPrototype = target.prototype;\r\n\t\t\t\tbindingRegistry.registerStepBinding(stepBinding);\r\n\r\n\t\t\t\t// add the step binding to the binding registry\r\n\t\t\t\taddStepBinding(stepBinding);\r\n\t\t\t});\r\n\r\n\t\t\t// Process pending step bindings after class is decorated\r\n\t\t\tcontext.addInitializer(function () {\r\n\t\t\t\t// Get all the collected bindings\r\n\t\t\t\tconst allBindings = getCollectedBindings();\r\n\r\n\t\t\t\tallBindings.forEach(stepBinding => {\r\n\t\t\t\t\t// Set the class prototype and register\r\n\t\t\t\t\tstepBinding.classPrototype = target.prototype;\r\n\t\t\t\t\tbindingRegistry.registerStepBinding(stepBinding);\r\n\r\n\t\t\t\t\t// Register with cucumber - call the local addStepBinding function\r\n\t\t\t\t\taddStepBinding(stepBinding);\r\n\t\t\t\t});\r\n\t\t\t});\r\n\r\n\t\t\treturn target;\r\n\t\t};\r\n\t}\r\n}\r\n\r\n/**\r\n * Called only once to register new parameters. This has to be\r\n * executed here during binding initialization for cucumber to\r\n * to use it when matching expressions. Attempting to add it\r\n * before the test run doesn't work\r\n */\r\nconst defineParameters = _.once(() => {\r\n\tdefineParameterType({\r\n\t\tname: 'boolean',\r\n\t\tregexp: /true|false/,\r\n\t\ttransformer: s => (s === 'true' ? true : false)\r\n\t});\r\n});\r\n\r\n/**\r\n * Common helper used to add StepBindings to the binding registry\r\n * @param stepBinding\r\n * @returns\r\n */\r\nfunction addStepBinding(stepBinding: StepBinding): void {\r\n\tif (stepBinding.bindingType & StepBindingFlags.StepDefinitions) {\r\n\t\tlet stepBindingFlags = stepPatternRegistrations.get(stepBinding.stepPattern.toString());\r\n\t\tif (stepBindingFlags === undefined) {\r\n\t\t\tstepBindingFlags = StepBindingFlags.none;\r\n\t\t}\r\n\t\tif (stepBindingFlags & stepBinding.bindingType) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tbindStepDefinition(stepBinding);\r\n\t\tstepPatternRegistrations.set(stepBinding.stepPattern.toString(), stepBindingFlags | stepBinding.bindingType);\r\n\t} else if (stepBinding.bindingType & StepBindingFlags.Hooks) {\r\n\t\tbindHook(stepBinding);\r\n\t}\r\n}\r\n\r\n/**\r\n * Binds a step definition to Cucumber.\r\n *\r\n * @param stepBinding The [[StepBinding]] that represents a 'given', 'when', or 'then' step definition.\r\n */\r\nfunction bindStepDefinition(stepBinding: StepBinding): void {\r\n\tconst stepFunction = function (this: WritableWorld): any {\r\n\t\tconst bindingRegistry = BindingRegistry.instance;\r\n\r\n\t\tconst scenarioContext = global.messageCollector.getStepScenarioContext(stepBinding);\r\n\r\n\t\tif (scenarioContext) {\r\n\t\t\tconst matchingStepBindings = bindingRegistry.getStepBindings(\r\n\t\t\t\tstepBinding.stepPattern.toString(),\r\n\t\t\t\tscenarioContext.scenarioInfo.tags\r\n\t\t\t);\r\n\r\n\t\t\tif (matchingStepBindings.length > 1) {\r\n\t\t\t\tlet message = `Ambiguous step definitions for '${matchingStepBindings[0].stepPattern}':\\n`;\r\n\r\n\t\t\t\tmatchingStepBindings.forEach(matchingStepBinding => {\r\n\t\t\t\t\tmessage =\r\n\t\t\t\t\t\tmessage +\r\n\t\t\t\t\t\t`\\t\\t${String(matchingStepBinding.classPropertyKey)} (${matchingStepBinding.callsite.toString()})\\n`;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthrow new Error(message);\r\n\t\t\t} else if (matchingStepBindings.length === 0) {\r\n\t\t\t\tthrow new Error(\r\n\t\t\t\t\t`Cannot find matched step definition for ${stepBinding.stepPattern.toString()} with tag ${\r\n\t\t\t\t\t\tscenarioContext.scenarioInfo.tags\r\n\t\t\t\t\t} in binding registry`\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tconst contextTypes = bindingRegistry.getContextTypesForClass(matchingStepBindings[0].classPrototype);\r\n\t\t\tconst bindingObject = scenarioContext.getOrActivateBindingClass(\r\n\t\t\t\tmatchingStepBindings[0].classPrototype,\r\n\t\t\t\tcontextTypes,\r\n\t\t\t\tthis\r\n\t\t\t);\r\n\t\t\tbindingObject._worldObj = this;\r\n\r\n\t\t\treturn (bindingObject[matchingStepBindings[0].classPropertyKey] as Function).apply(\r\n\t\t\t\tbindingObject,\r\n\t\t\t\targuments as any\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\tthrow new Error('Unable to find the Scenario Context for a Step!');\r\n\t\t}\r\n\t};\r\n\r\n\tObject.defineProperty(stepFunction, 'length', {\r\n\t\tvalue: stepBinding.stepArgsLength\r\n\t});\r\n\r\n\t// initialize options used on all step bindings\r\n\tconst options = {\r\n\t\tcucumberKey: stepBinding.cucumberKey,\r\n\t\ttimeout: stepBinding.timeout,\r\n\t\twrapperOptions: stepBinding.wrapperOption\r\n\t};\r\n\t// call appropriate step\r\n\tif (stepBinding.bindingType & StepBindingFlags.given) {\r\n\t\tGiven(stepBinding.stepPattern, options, stepFunction);\r\n\t} else if (stepBinding.bindingType & StepBindingFlags.when) {\r\n\t\tWhen(stepBinding.stepPattern, options, stepFunction);\r\n\t} else if (stepBinding.bindingType & StepBindingFlags.then) {\r\n\t\tThen(stepBinding.stepPattern, options, stepFunction);\r\n\t}\r\n}\r\n\r\n/**\r\n * Binds a hook to Cucumber.\r\n *\r\n * @param stepBinding The [[StepBinding]] that represents a 'before', or 'after', step definition.\r\n */\r\nfunction bindHook(stepBinding: StepBinding): void {\r\n\tconst globalHookFunction = function (this: any): any {\r\n\t\t// Check if it's a static method\r\n\t\tif (stepBinding.stepIsStatic || !stepBinding.classPrototype[stepBinding.classPropertyKey]) {\r\n\t\t\tconst constructor = stepBinding.classPrototype.constructor;\r\n\r\n\t\t\tif (constructor && constructor[stepBinding.classPropertyKey]) {\r\n\t\t\t\treturn constructor[stepBinding.classPropertyKey].apply(constructor);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// For non-static methods\r\n\t\tif (stepBinding.classPrototype[stepBinding.classPropertyKey]) {\r\n\t\t\treturn stepBinding.classPrototype[stepBinding.classPropertyKey].apply(stepBinding.classPrototype);\r\n\t\t}\r\n\r\n\t\tthrow new Error(\r\n\t\t\t`Method ${String(stepBinding.classPropertyKey)} not found on class ${stepBinding.classPrototype?.constructor?.name}`\r\n\t\t);\r\n\t};\r\n\t// Main binding for all other hooks (before, after, beforeStep, afterStep)\r\n\tconst hookFunction = function (this: any, arg: any): any {\r\n\t\tconst scenarioContext = global.messageCollector.getHookScenarioContext(arg);\r\n\t\tif (scenarioContext) {\r\n\t\t\tconst contextTypes = BindingRegistry.instance.getContextTypesForClass(stepBinding.classPrototype);\r\n\t\t\tconst bindingObject = scenarioContext.getOrActivateBindingClass(stepBinding.classPrototype, contextTypes, this);\r\n\t\t\tbindingObject._worldObj = this;\r\n\t\t\treturn (bindingObject[stepBinding.classPropertyKey] as Function).apply(bindingObject, arguments as any);\r\n\t\t} else {\r\n\t\t\tthrow new Error('Unable to find the Scenario Context for Hook!');\r\n\t\t}\r\n\t};\r\n\t// length values need to be added to our binding functions.\r\n\t// These are used in cucumber to determine if the function is\r\n\t// a callback or promise.\r\n\tObject.defineProperty(globalHookFunction, 'length', {\r\n\t\tvalue: stepBinding.stepArgsLength\r\n\t});\r\n\tObject.defineProperty(hookFunction, 'length', {\r\n\t\tvalue: stepBinding.stepArgsLength\r\n\t});\r\n\r\n\tconst tags = stepBinding.tags === DEFAULT_TAG ? undefined : stepBinding.tags;\r\n\r\n\t// This binds the appropriate function above to the associated\r\n\t// cucumber step functions.\r\n\tswitch (stepBinding.bindingType) {\r\n\t\tcase StepBindingFlags.beforeAll: {\r\n\t\t\tconst options = { cucumberKey: stepBinding.cucumberKey, timeout: stepBinding.timeout };\r\n\t\t\tBeforeAll(options, globalHookFunction);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase StepBindingFlags.before: {\r\n\t\t\tconst options = { cucumberKey: stepBinding.cucumberKey, tags: tags, timeout: stepBinding.timeout };\r\n\t\t\tBefore(options, hookFunction);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase StepBindingFlags.beforeStep: {\r\n\t\t\tconst options = { cucumberKey: stepBinding.cucumberKey, tags: tags, timeout: stepBinding.timeout };\r\n\t\t\tBeforeStep(options, hookFunction);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase StepBindingFlags.afterAll: {\r\n\t\t\tconst options = { cucumberKey: stepBinding.cucumberKey, timeout: stepBinding.timeout };\r\n\t\t\tAfterAll(options, globalHookFunction);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase StepBindingFlags.after: {\r\n\t\t\tconst options = { cucumberKey: stepBinding.cucumberKey, tags: tags, timeout: stepBinding.timeout };\r\n\t\t\tAfter(options, hookFunction);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase StepBindingFlags.afterStep: {\r\n\t\t\tconst options = { cucumberKey: stepBinding.cucumberKey, tags: tags, timeout: stepBinding.timeout };\r\n\t\t\tAfterStep(options, hookFunction);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n}\r\n"]}
@@ -212,6 +212,42 @@ export async function loadVue(url, context, nextLoad) {
212
212
  };
213
213
  }
214
214
 
215
+ // Common load handlers
216
+ export async function loadJson(url, context, nextLoad) {
217
+ const result = await nextLoad(url, {
218
+ ...context,
219
+ format: 'json',
220
+ importAttributes: { type: 'json' }
221
+ });
222
+
223
+ return {
224
+ ...result,
225
+ format: 'json',
226
+ shortCircuit: true
227
+ };
228
+ }
229
+
230
+ // loader-utils.mjs - Add a simple common file handler
231
+ export function handleCommonFileTypes(url, context, nextLoad, loaderName) {
232
+ // Handle assets
233
+ const ext = path.extname(url).toLowerCase();
234
+ if (ASSET_EXTENSIONS.includes(ext)) {
235
+ return loadAsset(url);
236
+ }
237
+
238
+ // Handle JSON
239
+ if (url.endsWith('.json')) {
240
+ try {
241
+ return loadJson(url, context, nextLoad);
242
+ } catch (error) {
243
+ console.error(`>>> ${loaderName}: Failed to compile ${url}:`, error);
244
+ throw new Error(`Failed to compile ${url}: ${error.message}`);
245
+ }
246
+ }
247
+
248
+ return null; // Not a common file type
249
+ }
250
+
215
251
  /**
216
252
  * Resolves module specifiers with support for TypeScript paths, extensions, and more
217
253
  * @param {string} specifier - The module specifier to resolve
@@ -321,11 +357,9 @@ export function createEsbuildLoader(options = {}) {
321
357
  },
322
358
 
323
359
  load: async (url, context, nextLoad) => {
324
- // Handle asset files
325
- const ext = path.extname(url).toLowerCase();
326
- if (ASSET_EXTENSIONS.includes(ext)) {
327
- return loadAsset(url);
328
- }
360
+ // Check common file types first
361
+ const commonResult = await handleCommonFileTypes(url, context, nextLoad);
362
+ if (commonResult) return commonResult;
329
363
 
330
364
  // Handle Vue files if enabled
331
365
  if (handleVue && url.endsWith('.vue')) {
@@ -37,8 +37,7 @@
37
37
  * preprocessor packages to be installed. Missing preprocessors will be skipped
38
38
  * with a warning rather than failing the compilation.
39
39
  */
40
- import path from 'path';
41
- import { ASSET_EXTENSIONS, resolveSpecifier, loadAsset, loadVue } from './loader-utils.mjs';
40
+ import { resolveSpecifier, loadVue, handleCommonFileTypes } from './loader-utils.mjs';
42
41
 
43
42
  // Cache for the TypeScript loader
44
43
  let tsLoader;
@@ -65,11 +64,9 @@ async function getTsLoader() {
65
64
  }
66
65
 
67
66
  export async function load(url, context, nextLoad) {
68
- // Handle asset files that Vue compiler turns into imports
69
- const ext = path.extname(url).toLowerCase();
70
- if (ASSET_EXTENSIONS.includes(ext)) {
71
- return loadAsset(url);
72
- }
67
+ // Check common file types first
68
+ const commonResult = await handleCommonFileTypes(url, context, nextLoad);
69
+ if (commonResult) return commonResult;
73
70
 
74
71
  // Only process .vue files directly
75
72
  if (url.endsWith('.vue')) {
package/lib/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const version = "7.3.1";
1
+ export declare const version = "7.3.3";
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.3.1';
5
+ exports.version = '7.3.3';
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.3.1'\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.3.3'\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.3.1",
4
+ "version": "7.3.3",
5
5
  "author": "Lonnie Wall <lynxdev@lynxwall.com>",
6
6
  "license": "MIT",
7
7
  "keywords": [