@dev-blinq/cucumber_client 1.0.1224-dev → 1.0.1225-dev

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.
@@ -10,6 +10,7 @@ import * as t from "@babel/types";
10
10
 
11
11
  import { CucumberExpression, ParameterTypeRegistry } from "@cucumber/cucumber-expressions";
12
12
  import { existsSync, readFileSync, writeFileSync } from "fs";
13
+ import { getAiConfig } from "../code_gen/page_reflection";
13
14
  const STEP_KEYWORDS = new Set(["Given", "When", "Then"]);
14
15
 
15
16
  /**
@@ -293,7 +294,11 @@ export function removeUnusedElementsKeys(ast, supportFilePath) {
293
294
  * @param {Array<{keyword: string, pattern: string}>} stepDefinitions
294
295
  */
295
296
  export async function removeUnusedStepDefinitions(filePath, stepDefinitions) {
296
- const supportFilePath = filePath.replace(".mjs", ".json");
297
+ let supportFilePath = filePath.replace(".mjs", ".json");
298
+ const config = getAiConfig();
299
+ if (config && config.locatorsMetadataDir) {
300
+ supportFilePath = path.join(config.locatorsMetadataDir, path.basename(supportFilePath));
301
+ }
297
302
  const ast = await parse(filePath);
298
303
  removeStepDefinitions(stepDefinitions, ast);
299
304
  removeUnusedDeclarations(ast);
@@ -22,6 +22,18 @@ function unescapeFromComment(text) {
22
22
  .replace(/\*\\/g, "*/") // Unescape comment-closing sequence
23
23
  .replace(/\\\\/g, "\\"); // Unescape backslashes
24
24
  }
25
+ let ai_config = null;
26
+ export function getAiConfig() {
27
+ if (ai_config) {
28
+ return ai_config;
29
+ }
30
+ try {
31
+ ai_config = JSON.parse(readFileSync("ai_config.json", "utf8"));
32
+ } catch (e) {
33
+ ai_config = {};
34
+ }
35
+ return ai_config;
36
+ }
25
37
  class CodePage {
26
38
  constructor(sourceFileName = null) {
27
39
  this.sourceFileName = sourceFileName;
@@ -224,13 +236,12 @@ this.imports[2].node.source.value
224
236
  params = paramsObj.map((param) => param.name);
225
237
  }
226
238
  firstFind = false;
227
- }
239
+ }
228
240
  stepPaths.push(method.path);
229
-
230
241
  }
231
242
  }
232
243
  if (foundMethod) {
233
- templates.push({ pattern, methodName, params, stepType, paths: stepPaths});
244
+ templates.push({ pattern, methodName, params, stepType, paths: stepPaths });
234
245
  }
235
246
  }
236
247
  }
@@ -481,7 +492,12 @@ this.imports[2].node.source.value
481
492
  }
482
493
  addLocatorsMetadata(locatorsMetadata) {
483
494
  // create a file name based on the source file name replace .mjs with .json
484
- const locatorsMetadataFileName = this.sourceFileName.replace(".mjs", ".json");
495
+ let locatorsMetadataFileName = this.sourceFileName.replace(".mjs", ".json");
496
+ const config = getAiConfig();
497
+ if (config && config.locatorsMetadataDir) {
498
+ // if config.locatorsMetadataDir is set, use it to create the file path
499
+ locatorsMetadataFileName = path.join(config.locatorsMetadataDir, path.basename(locatorsMetadataFileName));
500
+ }
485
501
  let metadata = {};
486
502
  // try to read the file to metadata, protect with try catch
487
503
  try {
@@ -782,7 +798,7 @@ function getPath(comment) {
782
798
  if (index === -1) {
783
799
  return null;
784
800
  }
785
- return comment.substring(index).split('\n')[0].substring(6);
801
+ return comment.substring(index).split("\n")[0].substring(6);
786
802
  }
787
803
 
788
804
  class CodePart {
@@ -2,7 +2,7 @@ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
2
2
  import path from "path";
3
3
  import url from "url";
4
4
  import logger from "../../logger.js";
5
- import { CodePage } from "../code_gen/page_reflection.js";
5
+ import { CodePage, getAiConfig } from "../code_gen/page_reflection.js";
6
6
  import { generateCode, generatePageName } from "../code_gen/playwright_codeget.js";
7
7
  import { invertCodeToCommand } from "../code_gen/code_inversion.js";
8
8
  import { Step } from "../cucumber/feature.js";
@@ -187,7 +187,17 @@ export async function saveRecording({ step, cucumberStep, codePage, projectDir,
187
187
 
188
188
  const getLocatorsJson = (file) => {
189
189
  if (!file) return {};
190
- const locatorsFilePath = file.replace(".mjs", ".json");
190
+ let locatorsFilePath = file.replace(".mjs", ".json");
191
+ const originLocatorsFilePath = locatorsFilePath;
192
+ const config = getAiConfig();
193
+ if (config && config.locatorsMetadataDir) {
194
+ // if config.locatorsMetadataDir is set, use it to create the file path
195
+ locatorsFilePath = path.join(config.locatorsMetadataDir, path.basename(locatorsFilePath));
196
+ if (!existsSync(locatorsFilePath)) {
197
+ // if the file does not exist in the config directory, use the original path
198
+ locatorsFilePath = originLocatorsFilePath;
199
+ }
200
+ }
191
201
  if (!existsSync(locatorsFilePath)) {
192
202
  return {};
193
203
  }
@@ -1,4 +1,4 @@
1
- import { existsSync, mkdirSync, writeFileSync } from "fs";
1
+ import { existsSync, mkdirSync, writeFileSync, readFileSync } from "fs";
2
2
  import logger from "../logger.js";
3
3
  import path from "path";
4
4
  import { scenarioResolution } from "./cucumber/feature.js";
@@ -236,6 +236,15 @@ const runCucumber = async (
236
236
 
237
237
  let scenarioId = findNextIdInFolder("./reports");
238
238
  let scenarioPath = "./reports" + "/" + scenarioId;
239
+ const dataFilePath = path.join(scenarioPath, "data.json");
240
+ mkdirSync(path.dirname(dataFilePath), { recursive: true });
241
+ if (process.env.NODE_ENV_BLINQ === "local") {
242
+ let dataPath = aiAgent.project.rootFolder + "/data/data.json";
243
+ if (existsSync(dataPath)) {
244
+ const poolData = JSON.parse(readFileSync(dataPath, "utf-8"));
245
+ writeFileSync(dataFilePath, JSON.stringify(poolData, null, 2), "utf-8");
246
+ }
247
+ }
239
248
  result.scenarioPath = scenarioPath;
240
249
  aiAgent.initTestData(envFile, path.join(scenarioPath, "data.json"));
241
250
  let featureFileRelative = path.relative(projectDir, fullFeatureFilePath);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dev-blinq/cucumber_client",
3
- "version": "1.0.1224-dev",
3
+ "version": "1.0.1225-dev",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "types": "bin/index.d.ts",
@@ -28,7 +28,7 @@
28
28
  "@cucumber/tag-expressions": "^6.1.1",
29
29
  "@dev-blinq/cucumber-js": "1.0.172-dev",
30
30
  "@faker-js/faker": "^8.1.0",
31
- "automation_model": "1.0.735-dev",
31
+ "automation_model": "1.0.737-dev",
32
32
  "axios": "^1.7.4",
33
33
  "chokidar": "^3.6.0",
34
34
  "create-require": "^1.1.1",