callman-core 1.30.0 → 1.31.0

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.
@@ -0,0 +1,235 @@
1
+ "use strict";
2
+ /**
3
+ * UI-test flow linter — checks a flow's YAML the way the engines will read it
4
+ * and reports what would silently go wrong at run time: unknown steps (the
5
+ * engines skip them), missing required arguments, steps the flow's platform
6
+ * cannot run, unresolved `runFlow` references, unknown connections and
7
+ * placeholders nothing fills.
8
+ *
9
+ * Reads the document exactly like the flow parsers do (dedent, then
10
+ * `loadAll`: document 0 = header, document 1 = steps; a single list document
11
+ * = steps only). Never throws.
12
+ */
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.lintUiTestFlow = lintUiTestFlow;
18
+ const js_yaml_1 = __importDefault(require("js-yaml"));
19
+ const commands_js_1 = require("./commands.js");
20
+ const compose_js_1 = require("./compose.js");
21
+ const ARG_SYNONYMS = {
22
+ url: ["url", "link"],
23
+ text: ["text", "value", "element"],
24
+ urlContains: ["urlContains", "url"],
25
+ name: ["name", "commands", "file", "path"],
26
+ };
27
+ /** Keys any step mapping may carry beyond its own args. */
28
+ const COMMON_STEP_KEYS = new Set(["label", "optional", "timeout", "when", "retryTapIfNoChange", "waitToSettleTimeoutMs"]);
29
+ const EXAMPLE_URL_RE = /^https?:\/\/(www\.)?example\.com\/?$/i;
30
+ const PLACEHOLDER_RE = /\{\{\s*([A-Za-z_][\w.-]*)\s*\}\}/g;
31
+ function dedent(text) {
32
+ const lines = text.split("\n");
33
+ const nonEmpty = lines.filter((l) => l.trim().length > 0);
34
+ if (nonEmpty.length === 0)
35
+ return text;
36
+ const min = Math.min(...nonEmpty.map((l) => l.match(/^(\s*)/)?.[1].length ?? 0));
37
+ return lines.map((l) => l.slice(min)).join("\n");
38
+ }
39
+ function isRecord(v) {
40
+ return !!v && typeof v === "object" && !Array.isArray(v);
41
+ }
42
+ function lintUiTestFlow(content, options) {
43
+ const errors = [];
44
+ const warnings = [];
45
+ const steps = [];
46
+ let header = {};
47
+ let rawSteps = [];
48
+ const docs = [];
49
+ try {
50
+ js_yaml_1.default.loadAll(dedent(content ?? ""), (d) => docs.push(d));
51
+ }
52
+ catch (err) {
53
+ const e = err;
54
+ const where = e.mark?.line != null ? ` (line ${e.mark.line + 1}, column ${(e.mark.column ?? 0) + 1})` : "";
55
+ errors.push({ code: "YAML_SYNTAX", message: `YAML syntax error: ${e.reason ?? e.message ?? String(err)}${where}` });
56
+ return { ok: false, errors, warnings, header, steps, preconditions: [] };
57
+ }
58
+ const nonEmpty = docs.filter((d) => d !== null && d !== undefined);
59
+ if (docs.length >= 2) {
60
+ if (docs[0] != null && !isRecord(docs[0]))
61
+ errors.push({ code: "HEADER_NOT_MAPPING", message: "The header (before `---`) must be a mapping like `url: https://…`." });
62
+ header = isRecord(docs[0]) ? docs[0] : {};
63
+ if (docs[1] != null && !Array.isArray(docs[1]))
64
+ errors.push({ code: "STEPS_NOT_LIST", message: "The steps (after `---`) must be a YAML list: each step starts with `- `." });
65
+ rawSteps = Array.isArray(docs[1]) ? docs[1] : [];
66
+ if (docs.length > 2 && docs.slice(2).some((d) => d != null))
67
+ warnings.push({ code: "EXTRA_DOCUMENTS", message: "Only the first two YAML documents (header, steps) are read; the rest is ignored." });
68
+ }
69
+ else if (nonEmpty.length === 1) {
70
+ if (Array.isArray(nonEmpty[0]))
71
+ rawSteps = nonEmpty[0];
72
+ else if (isRecord(nonEmpty[0]))
73
+ header = nonEmpty[0];
74
+ }
75
+ // ── Header ────────────────────────────────────────────────────────────────
76
+ const { platform } = options;
77
+ const knownHeader = new Set(commands_js_1.UI_TEST_HEADER_KEYS.map((h) => h.key));
78
+ for (const key of Object.keys(header)) {
79
+ if (!knownHeader.has(key))
80
+ warnings.push({ code: "HEADER_UNKNOWN_KEY", message: `Header key \`${key}\` is not used by the engines.` });
81
+ }
82
+ const preconditions = (0, compose_js_1.extractPreconditions)(content ?? "").names;
83
+ if (platform === "web") {
84
+ const url = typeof header.url === "string" ? header.url.trim() : "";
85
+ if (!url && preconditions.length === 0) {
86
+ warnings.push({ code: "HEADER_URL_MISSING", message: "Web flow has no `url:` header — the browser starts on a blank page unless a step navigates." });
87
+ }
88
+ else if (EXAMPLE_URL_RE.test(url) && preconditions.length === 0) {
89
+ warnings.push({ code: "HEADER_URL_PLACEHOLDER", message: "`url:` is still the example.com placeholder." });
90
+ }
91
+ if (header.appId !== undefined)
92
+ warnings.push({ code: "HEADER_PLATFORM", message: "`appId` is a mobile header; it is ignored on web." });
93
+ }
94
+ else {
95
+ const appId = typeof header.appId === "string" ? header.appId.trim() : "";
96
+ if (!appId)
97
+ warnings.push({ code: "HEADER_APPID_MISSING", message: "Mobile flow has no `appId:` header — `launchApp` needs it." });
98
+ else if (appId === "com.example.app")
99
+ warnings.push({ code: "HEADER_APPID_PLACEHOLDER", message: "`appId:` is still the com.example.app placeholder." });
100
+ if (header.url !== undefined)
101
+ warnings.push({ code: "HEADER_PLATFORM", message: "`url` is a web header; use `openLink` for deep links on mobile." });
102
+ }
103
+ // ── Steps ─────────────────────────────────────────────────────────────────
104
+ if (rawSteps.length === 0)
105
+ warnings.push({ code: "NO_STEPS", message: "The flow has no steps." });
106
+ const knownFlows = options.knownFlowNames ? new Set(options.knownFlowNames.map((n) => n.trim())) : null;
107
+ const knownConns = options.knownConnections ? new Set(options.knownConnections.map((n) => n.trim().toLowerCase())) : null;
108
+ const produced = new Set(["copiedText"]);
109
+ const walk = (items, prefix) => {
110
+ items.forEach((item, i) => {
111
+ const step = prefix ? `${prefix}.${i + 1}` : String(i + 1);
112
+ checkStep(item, step);
113
+ });
114
+ };
115
+ const checkStep = (item, step) => {
116
+ let key;
117
+ let value;
118
+ let label;
119
+ if (typeof item === "string") {
120
+ key = item.trim();
121
+ value = null;
122
+ }
123
+ else if (isRecord(item)) {
124
+ const keys = Object.keys(item).filter((k) => k !== "label");
125
+ if (typeof item.label === "string")
126
+ label = item.label;
127
+ if (keys.length === 0) {
128
+ errors.push({ code: "STEP_EMPTY", message: "Step has no command.", step });
129
+ return;
130
+ }
131
+ if (keys.length > 1) {
132
+ errors.push({ code: "STEP_MULTIPLE_KEYS", message: `Step has several commands (${keys.join(", ")}); put each on its own \`- \` line.`, step });
133
+ }
134
+ key = keys[0];
135
+ value = item[key];
136
+ }
137
+ else {
138
+ errors.push({ code: "STEP_INVALID", message: `Step must be a command (e.g. \`- tapOn: "Login"\`), got ${JSON.stringify(item)}.`, step });
139
+ return;
140
+ }
141
+ const spec = (0, commands_js_1.findUiTestCommand)(key);
142
+ if (isRecord(value) && typeof value.label === "string")
143
+ label = value.label;
144
+ steps.push({ step, key, command: spec?.key, ...(label ? { label } : {}) });
145
+ if (!spec) {
146
+ errors.push({ code: "STEP_UNKNOWN", message: `Unknown step \`${key}\` — the engine would skip it. See callman://docs/ui-test-steps.`, step });
147
+ return;
148
+ }
149
+ if (!spec.platforms.includes(platform)) {
150
+ warnings.push({ code: "STEP_PLATFORM", message: `\`${key}\` does not run on ${platform} (${spec.platforms.join("/")} only) — it will be skipped.`, step });
151
+ }
152
+ if (spec.unavailable)
153
+ warnings.push({ code: "STEP_UNAVAILABLE", message: `\`${key}\`: ${spec.unavailable}`, step });
154
+ checkArgs(spec, key, value, step);
155
+ if (isRecord(value)) {
156
+ const extract = value.extract;
157
+ if (isRecord(extract))
158
+ Object.keys(extract).forEach((k) => produced.add(k));
159
+ if (spec.key === "copyTextFrom" && typeof value.into === "string")
160
+ produced.add(value.into);
161
+ if (Array.isArray(value.commands))
162
+ walk(value.commands, step);
163
+ }
164
+ if (spec.key === "runFlow") {
165
+ const name = typeof value === "string" ? value : isRecord(value) && typeof value.name === "string" ? value.name : null;
166
+ if (name && knownFlows && !knownFlows.has(name.trim())) {
167
+ errors.push({ code: "RUNFLOW_UNRESOLVED", message: `runFlow "${name}" does not match any flow in the library (names are exact).`, step });
168
+ }
169
+ }
170
+ if (spec.hybrid && isRecord(value) && typeof value.connection === "string" && knownConns) {
171
+ if (!knownConns.has(value.connection.trim().toLowerCase())) {
172
+ warnings.push({ code: "CONNECTION_UNKNOWN", message: `Connection "${value.connection}" is not a workspace connection name or id.`, step });
173
+ }
174
+ }
175
+ };
176
+ const checkArgs = (spec, key, value, step) => {
177
+ const isBare = value === null || value === undefined;
178
+ const isScalar = !isBare && (typeof value === "string" || typeof value === "number" || typeof value === "boolean");
179
+ const isMapping = isRecord(value);
180
+ const isList = Array.isArray(value);
181
+ if (isBare && !spec.forms.includes("bare")) {
182
+ const needs = spec.args.filter((a) => a.required).map((a) => a.name);
183
+ errors.push({ code: "STEP_ARGS_MISSING", message: `\`${key}\` needs a value${needs.length ? ` (${needs.join(", ")})` : ""}.`, step });
184
+ return;
185
+ }
186
+ if (isScalar && !spec.forms.includes("scalar")) {
187
+ errors.push({ code: "STEP_FORM", message: `\`${key}\` takes a mapping, not a single value. Example:\n${spec.example}`, step });
188
+ return;
189
+ }
190
+ if (isList && spec.key !== "addMedia") {
191
+ errors.push({ code: "STEP_FORM", message: `\`${key}\` value must not be a list. Example:\n${spec.example}`, step });
192
+ return;
193
+ }
194
+ if (!isMapping)
195
+ return;
196
+ if (!spec.forms.includes("mapping")) {
197
+ errors.push({ code: "STEP_FORM", message: `\`${key}\` takes a single value, not a mapping. Example:\n${spec.example}`, step });
198
+ return;
199
+ }
200
+ for (const arg of spec.args) {
201
+ if (!arg.required)
202
+ continue;
203
+ const names = ARG_SYNONYMS[arg.name] ?? [arg.name];
204
+ if (!names.some((n) => value[n] !== undefined && value[n] !== null && value[n] !== "")) {
205
+ // Locator steps: any locator satisfies a missing `text`.
206
+ if (arg.name === "text" && ["id", "testId", "css", "xpath", "name", "placeholder"].some((n) => value[n] != null))
207
+ continue;
208
+ errors.push({ code: "STEP_ARG_REQUIRED", message: `\`${key}\` is missing \`${arg.name}\`.`, step });
209
+ }
210
+ }
211
+ const allowed = new Set([...spec.args.map((a) => a.name), ...Object.values(ARG_SYNONYMS).flat()]);
212
+ for (const k of Object.keys(value)) {
213
+ if (!allowed.has(k) && !COMMON_STEP_KEYS.has(k)) {
214
+ warnings.push({ code: "STEP_ARG_UNKNOWN", message: `\`${key}\` does not use \`${k}\` — it is ignored.`, step });
215
+ }
216
+ }
217
+ };
218
+ walk(rawSteps, "");
219
+ // ── Placeholders ──────────────────────────────────────────────────────────
220
+ if (options.datasetKeys) {
221
+ const known = new Set([...options.datasetKeys, ...produced]);
222
+ const env = isRecord(header.env) ? header.env : isRecord(header.defineAttributes) ? header.defineAttributes : {};
223
+ Object.keys(env).forEach((k) => known.add(k));
224
+ const missing = new Set();
225
+ for (const m of (content ?? "").matchAll(PLACEHOLDER_RE)) {
226
+ if (!known.has(m[1]))
227
+ missing.add(m[1]);
228
+ }
229
+ for (const name of missing) {
230
+ warnings.push({ code: "PLACEHOLDER_UNRESOLVED", message: `{{${name}}} is not a dataset key, header env value or extracted variable — it will stay literal.` });
231
+ }
232
+ }
233
+ return { ok: errors.length === 0, errors, warnings, header, steps, preconditions };
234
+ }
235
+ //# sourceMappingURL=flow-lint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow-lint.js","sourceRoot":"","sources":["../../src/ui-test/flow-lint.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "callman-core",
3
- "version": "1.30.0",
3
+ "version": "1.31.0",
4
4
  "main": "dist-cjs/index.js",
5
5
  "module": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -36,6 +36,7 @@
36
36
  "axios": "^1.6.0",
37
37
  "crypto-js": "^4.2.0",
38
38
  "fast-xml-parser": "^4.5.1",
39
+ "js-yaml": "^4.3.2",
39
40
  "jsonpath-plus": "^10.4.0",
40
41
  "lodash": "^4.18.1",
41
42
  "xpath": "^0.0.34"
@@ -50,6 +51,7 @@
50
51
  },
51
52
  "devDependencies": {
52
53
  "@types/crypto-js": "^4.2.2",
54
+ "@types/js-yaml": "^4.0.9",
53
55
  "@types/lodash": "^4.17.24",
54
56
  "@types/node": "^25.6.1",
55
57
  "typescript": "^5.7.2"