@dev-blinq/cucumber_client 1.0.1744-dev → 1.0.1745-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.
|
@@ -14,6 +14,40 @@ import socketLogger, { getErrorMessage } from "../utils/socket_logger.js";
|
|
|
14
14
|
|
|
15
15
|
const STEP_KEYWORDS = new Set(["Given", "When", "Then"]);
|
|
16
16
|
|
|
17
|
+
/**
|
|
18
|
+
* @typedef {Object} StepDefinitionParseError
|
|
19
|
+
* @property {"STEP_DEFINITION_PARSE_ERROR"} code
|
|
20
|
+
* @property {string} message
|
|
21
|
+
* @property {string} filePath
|
|
22
|
+
* @property {number | null} line
|
|
23
|
+
* @property {number | null} column
|
|
24
|
+
* @property {Error} cause
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Create a structured parse error for step definition files.
|
|
29
|
+
* @param {string} filePath
|
|
30
|
+
* @param {unknown} error
|
|
31
|
+
* @returns {Error & StepDefinitionParseError}
|
|
32
|
+
*/
|
|
33
|
+
export function createStepDefinitionParseError(filePath, error) {
|
|
34
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
35
|
+
const loc = /** @type {any} */ (error)?.loc || /** @type {any} */ (error)?.location;
|
|
36
|
+
const line = loc?.line ?? null;
|
|
37
|
+
const column = loc?.column ?? null;
|
|
38
|
+
const message = err.message || "Failed to parse step definition file";
|
|
39
|
+
|
|
40
|
+
const parseError = new Error(
|
|
41
|
+
`Step definition parse failed in ${filePath}${line ? `:${line}${column !== null ? `:${column}` : ""}` : ""}: ${message}`
|
|
42
|
+
);
|
|
43
|
+
/** @type {Error & StepDefinitionParseError} */ (parseError).code = "STEP_DEFINITION_PARSE_ERROR";
|
|
44
|
+
/** @type {Error & StepDefinitionParseError} */ (parseError).filePath = filePath;
|
|
45
|
+
/** @type {Error & StepDefinitionParseError} */ (parseError).line = line;
|
|
46
|
+
/** @type {Error & StepDefinitionParseError} */ (parseError).column = column;
|
|
47
|
+
/** @type {Error & StepDefinitionParseError} */ (parseError).cause = err;
|
|
48
|
+
return /** @type {Error & StepDefinitionParseError} */ (parseError);
|
|
49
|
+
}
|
|
50
|
+
|
|
17
51
|
/**
|
|
18
52
|
* Parse a step definitions file and return its AST.
|
|
19
53
|
* @param {string} filePath
|
|
@@ -21,12 +55,15 @@ const STEP_KEYWORDS = new Set(["Given", "When", "Then"]);
|
|
|
21
55
|
*/
|
|
22
56
|
export async function parse(filePath) {
|
|
23
57
|
const code = await fs.readFile(filePath, "utf-8");
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
58
|
+
try {
|
|
59
|
+
const ast = babelParse(code, {
|
|
60
|
+
sourceType: "module",
|
|
61
|
+
// plugins: ["jsx", "typescript"],
|
|
62
|
+
});
|
|
63
|
+
return ast;
|
|
64
|
+
} catch (error) {
|
|
65
|
+
throw createStepDefinitionParseError(filePath, error);
|
|
66
|
+
}
|
|
30
67
|
}
|
|
31
68
|
|
|
32
69
|
/**
|