automation_model 1.0.681-stage → 1.0.682-stage

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.
@@ -1,54 +1,118 @@
1
- import fs from "fs";
1
+ import * as fs from "fs"; // sync fs
2
+ import { promises as fsAsync } from "fs"; // async fs
2
3
  import { _commandError, _commandFinally, _preCommand } from "./command_common.js";
3
4
  import { Types } from "./stable_browser.js";
4
5
  const checkFileAccess = (filePath, accessMode) => {
5
- return new Promise((resolve, reject) => {
6
+ return new Promise((resolve) => {
6
7
  fs.access(filePath, accessMode, (err) => {
7
- if (err) {
8
- resolve(false);
9
- }
10
- else {
11
- resolve(true);
12
- }
8
+ resolve(!err);
13
9
  });
14
10
  });
15
11
  };
16
12
  const getFileName = (filePath) => {
17
13
  const platform = process.platform;
18
- let fileName = "";
19
- if (platform === "win32") {
20
- fileName = filePath.split("\\").pop() || "";
21
- }
22
- else {
23
- fileName = filePath.split("/").pop() || "";
24
- }
25
- return fileName;
14
+ return platform === "win32" ? filePath.split("\\").pop() || "" : filePath.split("/").pop() || "";
26
15
  };
16
+ // Simplified regex check
17
+ function testForRegex(text) {
18
+ return text.startsWith("regex:");
19
+ }
27
20
  export const verifyFileExists = async (filePath, options, context, world) => {
28
- //First check if the file exists and is accessible
29
- if (!options) {
21
+ if (!options)
30
22
  options = {};
31
- }
32
23
  const fileName = getFileName(filePath);
24
+ let isSoft = false;
25
+ const match = filePath.match(/(soft:)?(regex:|exact:|contains:)(.*)/);
26
+ if (match) {
27
+ isSoft = !!match[1]; // true if 'soft:' is present
28
+ }
33
29
  const state = {
34
30
  locate: false,
35
31
  scroll: false,
36
32
  screenshot: false,
37
33
  highlight: false,
38
- throwError: true,
34
+ throwError: !isSoft, // don't throw error for soft assertions
39
35
  operation: "verifyFileExists",
40
36
  value: filePath,
41
37
  text: `Verify file ${fileName} exists`,
42
38
  options,
43
39
  type: Types.VERIFY_FILE_EXISTS,
44
- world
40
+ world,
45
41
  };
46
42
  await _preCommand(state, context.web);
47
- let fileAccessible = false;
48
43
  try {
49
- fileAccessible = await checkFileAccess(filePath, fs.constants.F_OK);
50
- if (!fileAccessible) {
51
- throw new Error(`File ${fileName} does not exist or is not accessible.`);
44
+ let pathToMatch = filePath;
45
+ if (isSoft) {
46
+ pathToMatch = filePath.replace(/^soft:/, ""); // remove soft: prefix for parsing
47
+ }
48
+ let dir;
49
+ let input;
50
+ if (pathToMatch.includes("regex:")) {
51
+ const regexIndex = pathToMatch.indexOf("regex:");
52
+ dir = pathToMatch.substring(0, regexIndex - 1); // remove trailing slash
53
+ input = pathToMatch.substring(regexIndex);
54
+ }
55
+ else {
56
+ const lastSlashIndex = pathToMatch.lastIndexOf("/");
57
+ dir = pathToMatch.substring(0, lastSlashIndex);
58
+ input = pathToMatch.substring(lastSlashIndex + 1);
59
+ }
60
+ if (isSoft) {
61
+ dir = dir.slice(0, -5);
62
+ }
63
+ const files = await fsAsync.readdir(dir);
64
+ let found = false;
65
+ if (input.startsWith("exact:")) {
66
+ const target = input.replace("exact:", "");
67
+ found = files.includes(target);
68
+ }
69
+ else if (input.startsWith("contains:")) {
70
+ const target = input.replace("contains:", "");
71
+ found = files.some((f) => f.includes(target));
72
+ }
73
+ else if (input.startsWith("format:")) {
74
+ const extension = input.replace("format:", "");
75
+ found = files.some((f) => f.endsWith(`.${extension}`));
76
+ }
77
+ else if (testForRegex(input)) {
78
+ let raw = input.replace("regex:", "").trim(); // e.g. "/file/i" or "file.*::i"
79
+ let pattern = raw;
80
+ let flags = "";
81
+ if (raw.startsWith("/") && raw.lastIndexOf("/") > 0) {
82
+ const lastSlash = raw.lastIndexOf("/");
83
+ flags = raw.substring(lastSlash + 1);
84
+ pattern = raw.substring(1, lastSlash);
85
+ }
86
+ else if (raw.includes("::")) {
87
+ [pattern, flags] = raw.split("::");
88
+ }
89
+ console.log(`Regex pattern: ${pattern}, flags: ${flags}`);
90
+ try {
91
+ const regex = new RegExp(pattern, flags);
92
+ found = files.some((f) => {
93
+ const matched = regex.test(f);
94
+ return matched;
95
+ });
96
+ }
97
+ catch (regexError) {
98
+ throw new Error(`Invalid regex pattern: ${pattern}`);
99
+ }
100
+ }
101
+ else {
102
+ // Fallback to exact path check
103
+ found = await checkFileAccess(pathToMatch, fs.constants.F_OK);
104
+ }
105
+ if (!found) {
106
+ console.log(`Available files in '${dir}':`, files);
107
+ if (!isSoft) {
108
+ throw new Error(`No file matched the pattern: ${filePath}`);
109
+ }
110
+ else {
111
+ console.warn(`Soft assertion failed for pattern: ${filePath}`);
112
+ }
113
+ }
114
+ else {
115
+ console.log(`File verification successful for pattern: ${input}`);
52
116
  }
53
117
  }
54
118
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"file_checker.js","sourceRoot":"","sources":["../../src/file_checker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AAEnB,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjF,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAG3C,MAAM,eAAe,GAAG,CAAC,QAAgB,EAAE,UAAkB,EAAoB,EAAE;IAC/E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACnC,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE;YACpC,IAAI,GAAG,EAAE,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC,CACA,CAAC;AACN,CAAC,CAAA;AAED,MAAM,WAAW,GAAG,CAAC,QAAgB,EAAU,EAAE;IAC7C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACvB,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IAChD,CAAC;SAAM,CAAC;QACJ,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IAC/C,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAA;AAGD,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,QAAgB,EAAE,OAAY,EAAE,OAAY,EAAE,KAAU,EAAC,EAAE;IAC9F,kDAAkD;IAClD,IAAG,CAAC,OAAO,EAAC,CAAC;QACT,OAAO,GAAG,EAAE,CAAC;IACjB,CAAC;IACD,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG;QACV,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,KAAK;QACb,UAAU,EAAE,KAAK;QACjB,SAAS,EAAE,KAAK;QAChB,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,kBAAkB;QAC7B,KAAK,EAAE,QAAQ;QACf,IAAI,EAAE,eAAe,QAAQ,SAAS;QACtC,OAAO;QACP,IAAI,EAAE,KAAK,CAAC,kBAAkB;QAC9B,KAAK;KACR,CAAC;IACF,MAAM,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,IAAI,CAAC;QACD,cAAc,GAAG,MAAM,eAAe,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACpE,IAAI,CAAC,cAAc,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,uCAAuC,CAAC,CAAC;QAC7E,CAAC;IACL,CAAC;IACD,OAAM,GAAG,EAAE,CAAC;QACZ,MAAM,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC;YACM,CAAC;QACJ,MAAM,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC;AACL,CAAC,CAAA"}
1
+ {"version":3,"file":"file_checker.js","sourceRoot":"","sources":["../../src/file_checker.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "automation_model",
3
- "version": "1.0.681-stage",
3
+ "version": "1.0.682-stage",
4
4
  "description": "An automation infrastructure module to be use for generative AI automation projects.",
5
5
  "main": "lib/index.js",
6
6
  "type": "module",