@zohodesk/testinglibrary 0.1.8-exp-bdd-v3 → 0.1.8-exp-bdd-v4

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 (92) hide show
  1. package/.eslintrc.js +5 -1
  2. package/build/bdd-framework/cli/commands/env.js +42 -0
  3. package/build/bdd-framework/cli/commands/export.js +47 -0
  4. package/build/bdd-framework/cli/commands/test.js +64 -0
  5. package/build/bdd-framework/cli/index.js +11 -0
  6. package/build/bdd-framework/cli/options.js +19 -0
  7. package/build/bdd-framework/cli/worker.js +13 -0
  8. package/build/bdd-framework/config/dir.js +27 -0
  9. package/build/bdd-framework/config/env.js +50 -0
  10. package/build/bdd-framework/config/index.js +90 -0
  11. package/build/bdd-framework/config/lang.js +14 -0
  12. package/build/bdd-framework/cucumber/buildStepDefinition.js +43 -0
  13. package/build/bdd-framework/cucumber/gherkin.d.js +5 -0
  14. package/build/bdd-framework/cucumber/loadConfig.js +17 -0
  15. package/build/bdd-framework/cucumber/loadFeatures.js +39 -0
  16. package/build/bdd-framework/cucumber/loadSnippetBuilder.js +20 -0
  17. package/build/bdd-framework/cucumber/loadSources.js +57 -0
  18. package/build/bdd-framework/cucumber/loadSteps.js +40 -0
  19. package/build/bdd-framework/decorators.js +18 -0
  20. package/build/bdd-framework/gen/fixtures.js +48 -0
  21. package/build/bdd-framework/gen/formatter.js +135 -0
  22. package/build/bdd-framework/gen/i18n.js +39 -0
  23. package/build/bdd-framework/gen/index.js +164 -0
  24. package/build/bdd-framework/gen/testFile.js +422 -0
  25. package/build/bdd-framework/gen/testNode.js +61 -0
  26. package/build/bdd-framework/gen/testPoms.js +133 -0
  27. package/build/bdd-framework/hooks/scenario.js +107 -0
  28. package/build/bdd-framework/hooks/worker.js +83 -0
  29. package/build/bdd-framework/index.js +45 -0
  30. package/build/bdd-framework/playwright/fixtureParameterNames.js +93 -0
  31. package/build/bdd-framework/playwright/getLocationInFile.js +52 -0
  32. package/build/bdd-framework/playwright/loadConfig.js +42 -0
  33. package/build/bdd-framework/playwright/testTypeImpl.js +61 -0
  34. package/build/bdd-framework/playwright/transform.js +84 -0
  35. package/build/bdd-framework/playwright/types.js +5 -0
  36. package/build/bdd-framework/playwright/utils.js +34 -0
  37. package/build/bdd-framework/run/StepInvoker.js +73 -0
  38. package/build/bdd-framework/run/bddFixtures.js +170 -0
  39. package/build/bdd-framework/run/bddWorld.js +76 -0
  40. package/build/bdd-framework/snippets/index.js +136 -0
  41. package/build/bdd-framework/snippets/snippetSyntax.js +43 -0
  42. package/build/bdd-framework/snippets/snippetSyntaxDecorators.js +26 -0
  43. package/build/bdd-framework/snippets/snippetSyntaxTs.js +18 -0
  44. package/build/bdd-framework/stepDefinitions/createBdd.js +66 -0
  45. package/build/bdd-framework/stepDefinitions/decorators/class.js +68 -0
  46. package/build/bdd-framework/stepDefinitions/decorators/steps.js +99 -0
  47. package/build/bdd-framework/stepDefinitions/defineStep.js +62 -0
  48. package/build/bdd-framework/stepDefinitions/stepConfig.js +24 -0
  49. package/build/bdd-framework/utils/exit.js +58 -0
  50. package/build/bdd-framework/utils/index.js +70 -0
  51. package/build/bdd-framework/utils/jsStringWrap.js +44 -0
  52. package/build/bdd-framework/utils/logger.js +30 -0
  53. package/build/bdd-poc/core-runner/main.js +10 -0
  54. package/build/bdd-poc/core-runner/stepDefinitions.js +0 -1
  55. package/build/bdd-poc/index.js +26 -0
  56. package/build/bdd-poc/test/stepGenerate/stepFileGenerate.js +6 -6
  57. package/build/bdd-poc/test/stepGenerate/stepsnippets.js +1 -2
  58. package/build/bdd-poc/test/testDataMap.js +5 -5
  59. package/build/core/jest/preprocessor/jsPreprocessor.js +2 -3
  60. package/build/core/playwright/builtInFixtures/addTags.js +19 -0
  61. package/build/core/playwright/builtInFixtures/cacheLayer.js +13 -0
  62. package/build/core/playwright/builtInFixtures/context.js +15 -0
  63. package/build/core/playwright/builtInFixtures/index.js +26 -0
  64. package/build/core/playwright/builtInFixtures/page.js +51 -0
  65. package/build/core/playwright/clear-caches.js +29 -0
  66. package/build/core/playwright/custom-commands.js +1 -2
  67. package/build/core/playwright/index.js +10 -79
  68. package/build/core/playwright/readConfigFile.js +12 -6
  69. package/build/core/playwright/report-generator.js +2 -1
  70. package/build/core/playwright/setup/config-creator.js +23 -17
  71. package/build/core/playwright/setup/config-utils.js +32 -1
  72. package/build/core/playwright/setup/custom-reporter.js +109 -0
  73. package/build/core/playwright/tag-processor.js +68 -0
  74. package/build/core/playwright/test-runner.js +10 -10
  75. package/build/index.d.ts +59 -4
  76. package/build/index.js +10 -9
  77. package/build/lib/cli.js +10 -1
  78. package/build/parser/parser.js +0 -1
  79. package/build/setup-folder-structure/helper.js +34 -0
  80. package/build/setup-folder-structure/reportEnhancement/addonScript.html +25 -0
  81. package/build/setup-folder-structure/reportEnhancement/reportAlteration.js +25 -0
  82. package/build/setup-folder-structure/samples/git-ignore.sample.js +8 -4
  83. package/build/setup-folder-structure/samples/uat-config-sample.js +3 -2
  84. package/build/setup-folder-structure/setupProject.js +10 -5
  85. package/build/utils/fileUtils.js +15 -4
  86. package/build/utils/logger.js +1 -2
  87. package/build/utils/stepDefinitionsFormatter.js +1 -2
  88. package/changelog.md +57 -0
  89. package/npm-shrinkwrap.json +1426 -2172
  90. package/package.json +5 -4
  91. package/build/bdd-poc/main.js +0 -10
  92. /package/build/bdd-poc/{runner.js → core-runner/runner.js} +0 -0
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.extractFixtureNames = extractFixtureNames;
7
+ exports.extractFixtureNamesFromFnBodyMemo = extractFixtureNamesFromFnBodyMemo;
8
+ var _fixtureParameterNames = require("../playwright/fixtureParameterNames");
9
+ var _bddFixtures = require("../run/bddFixtures");
10
+ var _exit = require("../utils/exit");
11
+ const bodyFixturesSymbol = Symbol('bodyFixtures');
12
+ /**
13
+ * This function is used for playwright-style steps and decorators.
14
+ * It extracts fixtures names from first parameter of function
15
+ * using Playwright's helper.
16
+ */
17
+ function extractFixtureNames(fn) {
18
+ return (0, _fixtureParameterNames.fixtureParameterNames)(fn).filter(name => !(0, _bddFixtures.isBddAutoInjectFixture)(name));
19
+ }
20
+ /**
21
+ * This function is used for cucumber-style steps.
22
+ * It looks for `this.useFixture('xxx')` entries in function body
23
+ * and extracts fixtures names from it.
24
+ */
25
+ function extractFixtureNamesFromFnBodyMemo(fn) {
26
+ if (typeof fn !== 'function') {
27
+ return [];
28
+ }
29
+ const fnWithFixtures = fn;
30
+ if (!fnWithFixtures[bodyFixturesSymbol]) {
31
+ fnWithFixtures[bodyFixturesSymbol] = extractFixtureNamesFromFnBody(fn).filter(name => !(0, _bddFixtures.isBddAutoInjectFixture)(name));
32
+ }
33
+ return fnWithFixtures[bodyFixturesSymbol];
34
+ }
35
+ function extractFixtureNamesFromFnBody(fn) {
36
+ const matches = fn.toString().matchAll(/this\.useFixture\((.+)\)/gi) || [];
37
+ return [...matches].map(match => getFixtureName(match[1]));
38
+ }
39
+ function getFixtureName(arg) {
40
+ if (!/^['"`]/.test(arg)) {
41
+ // todo: log file location with incorrect useFixture
42
+ (0, _exit.exit)('this.useFixture() can accept only static string as an argument.');
43
+ }
44
+ if (arg.startsWith('`') && arg.includes('${')) {
45
+ (0, _exit.exit)('this.useFixture() can accept only static string as an argument.');
46
+ }
47
+ return arg.replace(/['"`]/g, '');
48
+ }
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Formatter = void 0;
7
+ var _jsStringWrap = require("../utils/jsStringWrap");
8
+ /**
9
+ * Helper to format Playwright test file.
10
+ */
11
+
12
+ const TAGS_FIXTURE_TEST_KEY_SEPARATOR = '|';
13
+ class Formatter {
14
+ config;
15
+ constructor(config) {
16
+ this.config = config;
17
+ }
18
+ fileHeader(uri, importTestFrom) {
19
+ const file = (importTestFrom === null || importTestFrom === void 0 ? void 0 : importTestFrom.file) || '@zohodesk/testinglibrary';
20
+ let varName = (importTestFrom === null || importTestFrom === void 0 ? void 0 : importTestFrom.varName) || 'test';
21
+ if (varName !== 'test') {
22
+ varName = `${varName} as test`;
23
+ }
24
+ return [`/** Generated from: ${uri} */`,
25
+ // prettier-ignore
26
+ // this.quoted() is not possible for 'import from' as backticks not parsed
27
+ `import { ${varName} } from ${JSON.stringify(file)};`, ''];
28
+ }
29
+ suite(node, children) {
30
+ const firstLine = `test.describe${this.getSubFn(node)}(${this.quoted(node.title)}, () => {`;
31
+ if (!children.length) {
32
+ return [`${firstLine}});`, ''];
33
+ }
34
+ return [firstLine, '', ...children.map(indent), `});`, ''];
35
+ }
36
+ beforeEach(fixtures, children) {
37
+ const fixturesStr = [...fixtures].join(', ');
38
+ // prettier-ignore
39
+ return [`test.beforeEach(async ({ ${fixturesStr} }) => {`, ...children.map(indent), `});`, ''];
40
+ }
41
+ test(node, fixtures, children) {
42
+ const fixturesStr = [...fixtures].join(', ');
43
+ const title = this.quoted([node.title, ...node.tags].join(' '));
44
+ const firstLine = `test${this.getSubFn(node)}(${title}, async ({ ${fixturesStr} }) => {`;
45
+ if (!children.length) {
46
+ return [`${firstLine}});`, ''];
47
+ }
48
+ return [firstLine, ...children.map(indent), `});`, ''];
49
+ }
50
+ // eslint-disable-next-line max-params
51
+ step(keyword, text, argument, fixtureNames = []) {
52
+ const fixtures = fixtureNames.length ? `{ ${fixtureNames.join(', ')} }` : '';
53
+ const argumentArg = argument ? JSON.stringify(argument) : fixtures ? 'null' : '';
54
+ const textArg = this.quoted(text);
55
+ const args = [textArg, argumentArg, fixtures].filter(arg => arg !== '').join(', ');
56
+ return `await ${keyword}(${args});`;
57
+ }
58
+ missingStep(keyword, text) {
59
+ return `// missing step: ${keyword}(${this.quoted(text)});`;
60
+ }
61
+ useFixtures(fixtures) {
62
+ return fixtures.length > 0 ? ['// == technical section ==',
63
+ // prettier-ignore
64
+ '', 'test.use({', ...fixtures.map(indent), '});'] : [];
65
+ }
66
+ testFixture() {
67
+ return ['$test: ({}, use) => use(test),'];
68
+ }
69
+ bddWorldFixtures() {
70
+ const fixturesObj = {
71
+ page: null,
72
+ context: null,
73
+ browser: null,
74
+ browserName: null,
75
+ request: null
76
+ };
77
+ const fixtures = Object.keys(fixturesObj).join(', ');
78
+ return [`$bddWorldFixtures: ({ ${fixtures} }, use) => use({ ${fixtures} }),`];
79
+ }
80
+ tagsFixture(testNodes) {
81
+ const lines = testNodes.filter(node => node.tags.length).map(node => {
82
+ // remove first parent as it is the same for all tests: root suite
83
+ const key = `${node.titlePath.slice(1).join(TAGS_FIXTURE_TEST_KEY_SEPARATOR)} ${node.tags.join(" ")}`;
84
+ return `${JSON.stringify(key)}: ${JSON.stringify(node.tags)},`;
85
+ });
86
+ return lines.length > 0 ? ['$tags: ({}, use, testInfo) => use({', ...lines.map(indent),
87
+ // .slice(2) -> b/c we remove filename and root suite title
88
+ `}[testInfo.titlePath.slice(2).join(${JSON.stringify(TAGS_FIXTURE_TEST_KEY_SEPARATOR)})] || []),`] : [];
89
+ }
90
+ scenarioHookFixtures(fixtureNames) {
91
+ if (!fixtureNames.length) {
92
+ return [];
93
+ }
94
+ const fixtures = fixtureNames.join(', ');
95
+ return [`$scenarioHookFixtures: ({ ${fixtures} }, use) => use({ ${fixtures} }),`];
96
+ }
97
+ workerHookFixtures(fixtureNames) {
98
+ if (!fixtureNames.length) {
99
+ return [];
100
+ }
101
+ const fixtures = fixtureNames.join(', ');
102
+ const scope = this.quoted('worker');
103
+ return [`$workerHookFixtures: [({ ${fixtures} }, use) => use({ ${fixtures} }), { scope: ${scope} }],`];
104
+ }
105
+ langFixture(lang) {
106
+ return [`$lang: ({}, use) => use(${this.quoted(lang)}),`];
107
+ }
108
+ getSubFn(node) {
109
+ if (node.flags.only) {
110
+ return '.only';
111
+ }
112
+ if (node.flags.skip) {
113
+ return '.skip';
114
+ }
115
+ if (node.flags.fixme) {
116
+ return '.fixme';
117
+ }
118
+ return '';
119
+ }
120
+ /**
121
+ * Apply this function only to string literals (mostly titles here).
122
+ * Objects and arrays are handled with JSON.strinigfy,
123
+ * b/c object keys can't be in backtiks.
124
+ * See: https://stackoverflow.com/questions/33194138/template-string-as-object-property-name
125
+ */
126
+ quoted(str) {
127
+ return (0, _jsStringWrap.jsStringWrap)(str, {
128
+ quotes: this.config.quotes
129
+ });
130
+ }
131
+ }
132
+ exports.Formatter = Formatter;
133
+ function indent(value) {
134
+ return value ? `${' '}${value}` : value;
135
+ }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getKeywordsMap = getKeywordsMap;
7
+ var _gherkin = require("@cucumber/gherkin");
8
+ /**
9
+ * Get i18n keywords.
10
+ * See: https://github.com/cucumber/cucumber-js/blob/main/src/cli/i18n.ts
11
+ */
12
+
13
+ function getKeywordsMap(language) {
14
+ const origMap = _gherkin.dialects[language];
15
+ if (!origMap) {
16
+ throw new Error(`Language not found: ${language}`);
17
+ }
18
+ const targetMap = new Map();
19
+ const enKeywords = Object.keys(origMap);
20
+ enKeywords.forEach(enKeyword => handleKeyword(enKeyword, origMap, targetMap));
21
+ return targetMap;
22
+ }
23
+ function handleKeyword(enKeyword, origMap, targetMap) {
24
+ const nativeKeywords = origMap[enKeyword];
25
+ // Array.isArray converts to any[]
26
+ if (typeof nativeKeywords === 'string') {
27
+ return;
28
+ }
29
+ nativeKeywords.forEach(nativeKeyword => {
30
+ nativeKeyword = nativeKeyword.trim();
31
+ if (!nativeKeyword || nativeKeyword === '*') {
32
+ return;
33
+ }
34
+ targetMap.set(nativeKeyword, capitalizeFirstLetter(enKeyword));
35
+ });
36
+ }
37
+ function capitalizeFirstLetter(s) {
38
+ return s.charAt(0).toUpperCase() + s.slice(1);
39
+ }
@@ -0,0 +1,164 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.TestFilesGenerator = void 0;
8
+ var _promises = _interopRequireDefault(require("fs/promises"));
9
+ var _path = _interopRequireDefault(require("path"));
10
+ var _fastGlob = _interopRequireDefault(require("fast-glob"));
11
+ var _testFile = require("./testFile");
12
+ var _loadConfig = require("../cucumber/loadConfig");
13
+ var _loadFeatures = require("../cucumber/loadFeatures");
14
+ var _loadSteps = require("../cucumber/loadSteps");
15
+ var _config = require("../config");
16
+ var _snippets = require("../snippets");
17
+ var _steps = require("../stepDefinitions/decorators/steps");
18
+ var _transform = require("../playwright/transform");
19
+ var _dir = require("../config/dir");
20
+ var _logger = require("../utils/logger");
21
+ var _tagExpressions = _interopRequireDefault(require("@cucumber/tag-expressions"));
22
+ var _exit = require("../utils/exit");
23
+ var _createBdd = require("../stepDefinitions/createBdd");
24
+ /**
25
+ * Generate playwright test files from Gherkin documents.
26
+ */
27
+
28
+ class TestFilesGenerator {
29
+ config;
30
+ // all these props are exist
31
+ runConfiguration;
32
+ features;
33
+ supportCodeLibrary;
34
+ files = [];
35
+ tagsExpression;
36
+ logger;
37
+ constructor(config) {
38
+ this.config = config;
39
+ this.logger = new _logger.Logger({
40
+ verbose: config.verbose
41
+ });
42
+ if (config.tags) {
43
+ this.tagsExpression = (0, _tagExpressions.default)(config.tags);
44
+ }
45
+ }
46
+ async generate() {
47
+ await (0, _exit.withExitHandler)(async () => {
48
+ await this.loadCucumberConfig();
49
+ await Promise.all([this.loadFeatures(), this.loadSteps()]);
50
+ this.buildFiles();
51
+ await this.checkUndefinedSteps();
52
+ this.checkImportTestFrom();
53
+ await this.clearOutputDir();
54
+ await this.saveFiles();
55
+ });
56
+ }
57
+ async extractSteps() {
58
+ await this.loadCucumberConfig();
59
+ await this.loadSteps();
60
+ return this.supportCodeLibrary.stepDefinitions;
61
+ }
62
+ async loadCucumberConfig() {
63
+ const environment = {
64
+ cwd: (0, _dir.getPlaywrightConfigDir)()
65
+ };
66
+ const {
67
+ runConfiguration
68
+ } = await (0, _loadConfig.loadConfig)({
69
+ provided: (0, _config.extractCucumberConfig)(this.config)
70
+ }, environment);
71
+ this.runConfiguration = runConfiguration;
72
+ this.warnForTsNodeRegister();
73
+ }
74
+ async loadFeatures() {
75
+ const environment = {
76
+ cwd: (0, _dir.getPlaywrightConfigDir)()
77
+ };
78
+ this.logger.log(`Loading features from: ${this.runConfiguration.sources.paths.join(', ')}`);
79
+ this.features = await (0, _loadFeatures.loadFeatures)(this.runConfiguration, environment);
80
+ this.logger.log(`Loaded features: ${this.features.size}`);
81
+ }
82
+ async loadSteps() {
83
+ const {
84
+ requirePaths,
85
+ importPaths
86
+ } = this.runConfiguration.support;
87
+ this.logger.log(`Loading steps from: ${requirePaths.concat(importPaths).join(', ')}`);
88
+ const environment = {
89
+ cwd: (0, _dir.getPlaywrightConfigDir)()
90
+ };
91
+ this.supportCodeLibrary = await (0, _loadSteps.loadSteps)(this.runConfiguration, environment);
92
+ await this.loadDecoratorSteps();
93
+ this.logger.log(`Loaded steps: ${this.supportCodeLibrary.stepDefinitions.length}`);
94
+ }
95
+ async loadDecoratorSteps() {
96
+ const {
97
+ importTestFrom
98
+ } = this.config;
99
+ if (importTestFrom) {
100
+ // require importTestFrom for case when it is not required by step definitions
101
+ // possible re-require but it's not a problem as it is cached by Node.js
102
+ await (0, _transform.requireTransform)().requireOrImport(importTestFrom.file);
103
+ (0, _steps.appendDecoratorSteps)(this.supportCodeLibrary);
104
+ }
105
+ }
106
+ buildFiles() {
107
+ this.files = [...this.features.entries()].map(([doc, pickles]) => {
108
+ return new _testFile.TestFile({
109
+ doc,
110
+ pickles,
111
+ supportCodeLibrary: this.supportCodeLibrary,
112
+ outputPath: this.getOutputPath(doc),
113
+ config: this.config,
114
+ tagsExpression: this.tagsExpression
115
+ }).build();
116
+ }).filter(file => file.testNodes.length > 0);
117
+ }
118
+ getOutputPath(doc) {
119
+ const configDir = (0, _dir.getPlaywrightConfigDir)();
120
+ // doc.uri is always relative to cwd (coming after cucumber handling)
121
+ // see: https://github.com/cucumber/cucumber-js/blob/main/src/api/gherkin.ts#L51
122
+ const relFeaturePath = doc.uri;
123
+ const absFeaturePath = _path.default.resolve(configDir, relFeaturePath);
124
+ const relOutputPath = _path.default.relative(this.config.featuresRoot, absFeaturePath);
125
+ if (relOutputPath.startsWith('..')) {
126
+ (0, _exit.exit)(`All feature files should be located underneath featuresRoot.`, `Please change featuresRoot or paths in configuration.\n`, `featureFile: ${absFeaturePath}\n`, `featuresRoot: ${this.config.featuresRoot}\n`);
127
+ }
128
+ const absOutputPath = _path.default.resolve(this.config.outputDir, relOutputPath);
129
+ return `${absOutputPath}.spec.js`;
130
+ }
131
+ async checkUndefinedSteps() {
132
+ const undefinedSteps = this.files.reduce((sum, file) => sum + file.undefinedSteps.length, 0);
133
+ if (undefinedSteps > 0) {
134
+ const snippets = new _snippets.Snippets(this.files, this.runConfiguration, this.supportCodeLibrary);
135
+ await snippets.print();
136
+ (0, _exit.exit)();
137
+ }
138
+ }
139
+ checkImportTestFrom() {
140
+ if (_createBdd.hasCustomTest && !this.config.importTestFrom) {
141
+ (0, _exit.exit)(`When using custom "test" function in createBdd() you should`, `set "importTestFrom" config option that points to file exporting custom test.`);
142
+ }
143
+ }
144
+ async saveFiles() {
145
+ this.files.forEach(file => {
146
+ file.save();
147
+ this.logger.log(`Generated: ${_path.default.relative(process.cwd(), file.outputPath)}`);
148
+ });
149
+ this.logger.log(`Generated files: ${this.files.length}`);
150
+ }
151
+ async clearOutputDir() {
152
+ const pattern = `${_fastGlob.default.convertPathToPattern(this.config.outputDir)}/**/*.spec.js`;
153
+ const testFiles = await (0, _fastGlob.default)(pattern);
154
+ this.logger.log(`Clearing output dir: ${testFiles.length} file(s)`);
155
+ const tasks = testFiles.map(testFile => _promises.default.rm(testFile));
156
+ await Promise.all(tasks);
157
+ }
158
+ warnForTsNodeRegister() {
159
+ if ((0, _loadSteps.hasTsNodeRegister)(this.runConfiguration)) {
160
+ this.logger.warn(`WARNING: usage of requireModule: ['ts-node/register'] is not recommended for playwright-bdd.`, `Remove this option from defineBddConfig() and`, `Playwright's built-in loader will be used to compile TypeScript step definitions.`);
161
+ }
162
+ }
163
+ }
164
+ exports.TestFilesGenerator = TestFilesGenerator;