@testmuai/playwright-bindings 0.1.26 → 0.1.27-beta.1
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.
- package/dist/actionEngine.d.ts +37 -0
- package/dist/actionEngine.d.ts.map +1 -0
- package/dist/actionEngine.js +194 -0
- package/dist/actionEngine.js.map +1 -0
- package/dist/actionSpecs.d.ts +35 -0
- package/dist/actionSpecs.d.ts.map +1 -0
- package/dist/actionSpecs.js +354 -0
- package/dist/actionSpecs.js.map +1 -0
- package/dist/capability.d.ts +3 -5
- package/dist/capability.d.ts.map +1 -1
- package/dist/capability.js +66 -6
- package/dist/capability.js.map +1 -1
- package/dist/configure.d.ts +16 -0
- package/dist/configure.d.ts.map +1 -1
- package/dist/configure.js +14 -0
- package/dist/configure.js.map +1 -1
- package/dist/errors.d.ts +19 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +29 -0
- package/dist/errors.js.map +1 -1
- package/dist/healCache.d.ts +28 -0
- package/dist/healCache.d.ts.map +1 -0
- package/dist/healCache.js +17 -0
- package/dist/healCache.js.map +1 -0
- package/dist/healPatch.d.ts.map +1 -1
- package/dist/healPatch.js +45 -3
- package/dist/healPatch.js.map +1 -1
- package/dist/helpers/assertion.d.ts.map +1 -1
- package/dist/helpers/assertion.js +18 -0
- package/dist/helpers/assertion.js.map +1 -1
- package/dist/helpers/assertionV3.d.ts +67 -0
- package/dist/helpers/assertionV3.d.ts.map +1 -0
- package/dist/helpers/assertionV3.js +384 -0
- package/dist/helpers/assertionV3.js.map +1 -0
- package/dist/helpers/condition.d.ts +84 -0
- package/dist/helpers/condition.d.ts.map +1 -0
- package/dist/helpers/condition.js +292 -0
- package/dist/helpers/condition.js.map +1 -0
- package/dist/helpers/cookies.d.ts +12 -0
- package/dist/helpers/cookies.d.ts.map +1 -0
- package/dist/helpers/cookies.js +66 -0
- package/dist/helpers/cookies.js.map +1 -0
- package/dist/helpers/coordinateResolver.d.ts +29 -0
- package/dist/helpers/coordinateResolver.d.ts.map +1 -0
- package/dist/helpers/coordinateResolver.js +118 -0
- package/dist/helpers/coordinateResolver.js.map +1 -0
- package/dist/helpers/coordinateResolverRead.d.ts +36 -0
- package/dist/helpers/coordinateResolverRead.d.ts.map +1 -0
- package/dist/helpers/coordinateResolverRead.js +107 -0
- package/dist/helpers/coordinateResolverRead.js.map +1 -0
- package/dist/helpers/dialog.d.ts +29 -0
- package/dist/helpers/dialog.d.ts.map +1 -0
- package/dist/helpers/dialog.js +35 -0
- package/dist/helpers/dialog.js.map +1 -0
- package/dist/helpers/drag.d.ts +36 -1
- package/dist/helpers/drag.d.ts.map +1 -1
- package/dist/helpers/drag.js +267 -0
- package/dist/helpers/drag.js.map +1 -1
- package/dist/helpers/executeApi.d.ts +2 -0
- package/dist/helpers/executeApi.d.ts.map +1 -1
- package/dist/helpers/executeApi.js +30 -10
- package/dist/helpers/executeApi.js.map +1 -1
- package/dist/helpers/executeJs.d.ts.map +1 -1
- package/dist/helpers/executeJs.js +46 -3
- package/dist/helpers/executeJs.js.map +1 -1
- package/dist/helpers/gesture.d.ts +45 -0
- package/dist/helpers/gesture.d.ts.map +1 -0
- package/dist/helpers/gesture.js +131 -0
- package/dist/helpers/gesture.js.map +1 -0
- package/dist/helpers/healCascade.d.ts +57 -0
- package/dist/helpers/healCascade.d.ts.map +1 -0
- package/dist/helpers/healCascade.js +363 -0
- package/dist/helpers/healCascade.js.map +1 -0
- package/dist/helpers/png.d.ts +3 -0
- package/dist/helpers/png.d.ts.map +1 -0
- package/dist/helpers/png.js +18 -0
- package/dist/helpers/png.js.map +1 -0
- package/dist/helpers/screenshot.d.ts +27 -0
- package/dist/helpers/screenshot.d.ts.map +1 -1
- package/dist/helpers/screenshot.js +56 -0
- package/dist/helpers/screenshot.js.map +1 -1
- package/dist/helpers/scrollUntil.d.ts +13 -0
- package/dist/helpers/scrollUntil.d.ts.map +1 -0
- package/dist/helpers/scrollUntil.js +88 -0
- package/dist/helpers/scrollUntil.js.map +1 -0
- package/dist/helpers/tabs.d.ts +42 -1
- package/dist/helpers/tabs.d.ts.map +1 -1
- package/dist/helpers/tabs.js +259 -5
- package/dist/helpers/tabs.js.map +1 -1
- package/dist/helpers/text.d.ts +15 -0
- package/dist/helpers/text.d.ts.map +1 -0
- package/dist/helpers/text.js +24 -0
- package/dist/helpers/text.js.map +1 -0
- package/dist/helpers/textNormalize.d.ts +18 -0
- package/dist/helpers/textNormalize.d.ts.map +1 -0
- package/dist/helpers/textNormalize.js +39 -0
- package/dist/helpers/textNormalize.js.map +1 -0
- package/dist/helpers/textualRead.d.ts +37 -0
- package/dist/helpers/textualRead.d.ts.map +1 -0
- package/dist/helpers/textualRead.js +211 -0
- package/dist/helpers/textualRead.js.map +1 -0
- package/dist/helpers/vision.d.ts +2 -0
- package/dist/helpers/vision.d.ts.map +1 -1
- package/dist/helpers/vision.js +11 -0
- package/dist/helpers/vision.js.map +1 -1
- package/dist/helpers/visionV3.d.ts +38 -0
- package/dist/helpers/visionV3.d.ts.map +1 -0
- package/dist/helpers/visionV3.js +291 -0
- package/dist/helpers/visionV3.js.map +1 -0
- package/dist/helpers/wait.d.ts +14 -1
- package/dist/helpers/wait.d.ts.map +1 -1
- package/dist/helpers/wait.js +25 -0
- package/dist/helpers/wait.js.map +1 -1
- package/dist/index.d.ts +29 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -4
- package/dist/index.js.map +1 -1
- package/dist/log.d.ts +4 -1
- package/dist/log.d.ts.map +1 -1
- package/dist/log.js +8 -3
- package/dist/log.js.map +1 -1
- package/dist/rankedLocator.d.ts +27 -0
- package/dist/rankedLocator.d.ts.map +1 -0
- package/dist/rankedLocator.js +85 -0
- package/dist/rankedLocator.js.map +1 -0
- package/dist/reporters/index.d.ts +2 -0
- package/dist/reporters/index.d.ts.map +1 -1
- package/dist/reporters/index.js.map +1 -1
- package/dist/reporters/lt.d.ts.map +1 -1
- package/dist/reporters/lt.js +7 -1
- package/dist/reporters/lt.js.map +1 -1
- package/dist/routeFailure.d.ts +9 -0
- package/dist/routeFailure.d.ts.map +1 -0
- package/dist/routeFailure.js +34 -0
- package/dist/routeFailure.js.map +1 -0
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +21 -0
- package/dist/session.js.map +1 -1
- package/dist/step.d.ts +10 -0
- package/dist/step.d.ts.map +1 -1
- package/dist/step.js +14 -1
- package/dist/step.js.map +1 -1
- package/dist/testConfig.d.ts.map +1 -1
- package/dist/testConfig.js +8 -1
- package/dist/testConfig.js.map +1 -1
- package/dist/vars.d.ts +10 -0
- package/dist/vars.d.ts.map +1 -1
- package/dist/vars.js +30 -3
- package/dist/vars.js.map +1 -1
- package/dist/visionLocator.d.ts +53 -0
- package/dist/visionLocator.d.ts.map +1 -0
- package/dist/visionLocator.js +117 -0
- package/dist/visionLocator.js.map +1 -0
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assertion.js","sourceRoot":"","sources":["../../src/helpers/assertion.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"assertion.js","sourceRoot":"","sources":["../../src/helpers/assertion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code-side assertion evaluator — the V3 local-eval path.
|
|
3
|
+
*
|
|
4
|
+
* Port of PY _helpers/_assertion_v3_eval.py (itself ported from the Selenium
|
|
5
|
+
* runtime). Evaluates an operator/operand tree produced by the code generator
|
|
6
|
+
* purely locally: no analyzer API, no driver — dict values + the variable
|
|
7
|
+
* store only. Verdict-parity notes are inline where JS-native semantics had
|
|
8
|
+
* to be adapted (type tags, literal classification).
|
|
9
|
+
*/
|
|
10
|
+
/** Parse a CSS colour into canonical [r,g,b,alpha]; null → fall back to plain
|
|
11
|
+
* compare. A background_color query returns computed `rgb(245, 245, 245)`
|
|
12
|
+
* while the authored expected is `#f5f5f5` — equals must compare by value. */
|
|
13
|
+
export declare function normalizeColor(value: unknown): [number, number, number, number] | null;
|
|
14
|
+
/** Currency-tolerant numeric parse (V2 UIActions.string_to_float parity):
|
|
15
|
+
* "$7" -> 7, "7a" -> 7, "abc" -> 0, negative if '-' anywhere; a multi-dot
|
|
16
|
+
* residue like "1.2.3" THROWS — V2 crashed there and the loud failure is the
|
|
17
|
+
* faithful behavior. */
|
|
18
|
+
export declare function stringToFloat(value: unknown): number;
|
|
19
|
+
/** Parse a stringified JSON operand (V2 _json_obj/_json_arr parity). A real
|
|
20
|
+
* object/array passes through. A string parses with JSON.parse, falling back
|
|
21
|
+
* to a python-repr acceptance (single→double quotes, True/False/None). Parse
|
|
22
|
+
* failures THROW — a malformed operand fails loudly, never silently. */
|
|
23
|
+
export declare function jsonCoerce(value: unknown): unknown;
|
|
24
|
+
declare const ASSERTION_CONDITIONS: readonly ["equals", "not_equals", "greater_than", "less_than", "greater_than_or_equal", "less_than_or_equal", "start_with", "end_with", "contains", "not_contains", "length_equals", "type_equals", "json_key_exists", "json_keys_count", "json_array_length_equals", "json_array_contains", "json_value_equals", "in", "not_in", "lower_case", "upper_case"];
|
|
25
|
+
export type AssertionConditionValue = (typeof ASSERTION_CONDITIONS)[number];
|
|
26
|
+
/** Resolve an operator string (aliases + case-insensitive); unknown THROWS —
|
|
27
|
+
* never a silent EQUALS fallback that would produce a wrong verdict. */
|
|
28
|
+
export declare function AssertionCondition(raw: string): AssertionConditionValue;
|
|
29
|
+
type LogicalOp = 'AND' | 'OR' | 'NOT';
|
|
30
|
+
export type AssertionResolver = (template: string, variables?: Record<string, unknown>) => unknown | Promise<unknown>;
|
|
31
|
+
export interface AssertionJson {
|
|
32
|
+
operator?: string | string[];
|
|
33
|
+
assertion_operands?: string[];
|
|
34
|
+
left_operand?: unknown;
|
|
35
|
+
right_operand?: unknown;
|
|
36
|
+
operands?: AssertionJson[];
|
|
37
|
+
sub_results?: unknown[];
|
|
38
|
+
sub_checks?: unknown[];
|
|
39
|
+
composite_operator?: string;
|
|
40
|
+
verification?: string;
|
|
41
|
+
claim?: string;
|
|
42
|
+
}
|
|
43
|
+
export declare class Assertion {
|
|
44
|
+
readonly assertionOperator: AssertionConditionValue[];
|
|
45
|
+
readonly assertionOperands: LogicalOp[];
|
|
46
|
+
readonly leftOperand: unknown;
|
|
47
|
+
readonly rightOperand: unknown;
|
|
48
|
+
readonly operands: Assertion[];
|
|
49
|
+
readonly claim: string;
|
|
50
|
+
constructor(opts: {
|
|
51
|
+
assertionOperator?: AssertionConditionValue[];
|
|
52
|
+
assertionOperands?: LogicalOp[];
|
|
53
|
+
leftOperand?: unknown;
|
|
54
|
+
rightOperand?: unknown;
|
|
55
|
+
operands?: Assertion[];
|
|
56
|
+
claim?: string;
|
|
57
|
+
});
|
|
58
|
+
private resolve;
|
|
59
|
+
private accessNestedValue;
|
|
60
|
+
private evalLeafCondition;
|
|
61
|
+
/** Evaluate this node → [passed, usedVariables]. */
|
|
62
|
+
evaluate(variables?: Record<string, unknown>, getVariableValue?: AssertionResolver | null): Promise<[boolean, Record<string, unknown>]>;
|
|
63
|
+
/** Deserialize an assertion-tree dict (the generator's emitted shape). */
|
|
64
|
+
static fromJson(json: AssertionJson): Assertion;
|
|
65
|
+
}
|
|
66
|
+
export {};
|
|
67
|
+
//# sourceMappingURL=assertionV3.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assertionV3.d.ts","sourceRoot":"","sources":["../../src/helpers/assertionV3.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH;;8EAE8E;AAC9E,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAqBtF;AAeD;;;wBAGwB;AACxB,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAapD;AAsDD;;;wEAGwE;AACxE,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAYlD;AAID,QAAA,MAAM,oBAAoB,+VAQhB,CAAC;AAEX,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAU5E;wEACwE;AACxE,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,uBAAuB,CAQvE;AAED,KAAK,SAAS,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC;AAKtC,MAAM,MAAM,iBAAiB,GAAG,CAC9B,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAChC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAEhC,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,SAAS;IACpB,QAAQ,CAAC,iBAAiB,EAAE,uBAAuB,EAAE,CAAC;IACtD,QAAQ,CAAC,iBAAiB,EAAE,SAAS,EAAE,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;gBAEX,IAAI,EAAE;QAChB,iBAAiB,CAAC,EAAE,uBAAuB,EAAE,CAAC;QAC9C,iBAAiB,CAAC,EAAE,SAAS,EAAE,CAAC;QAChC,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC;QACvB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB;YAWa,OAAO;IAyBrB,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,iBAAiB;IAqFzB,oDAAoD;IAC9C,QAAQ,CACZ,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACvC,gBAAgB,GAAE,iBAAiB,GAAG,IAAW,GAChD,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAmC9C,0EAA0E;IAC1E,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS;CAiChD"}
|
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code-side assertion evaluator — the V3 local-eval path.
|
|
3
|
+
*
|
|
4
|
+
* Port of PY _helpers/_assertion_v3_eval.py (itself ported from the Selenium
|
|
5
|
+
* runtime). Evaluates an operator/operand tree produced by the code generator
|
|
6
|
+
* purely locally: no analyzer API, no driver — dict values + the variable
|
|
7
|
+
* store only. Verdict-parity notes are inline where JS-native semantics had
|
|
8
|
+
* to be adapted (type tags, literal classification).
|
|
9
|
+
*/
|
|
10
|
+
// ── Colour normalization ──────────────────────────────────────────────────────
|
|
11
|
+
const HEX_COLOR_RE = /^#([0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/;
|
|
12
|
+
const RGB_COLOR_RE = /^rgba?\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)\s*(?:,\s*([\d.]+)\s*)?\)$/i;
|
|
13
|
+
/** Parse a CSS colour into canonical [r,g,b,alpha]; null → fall back to plain
|
|
14
|
+
* compare. A background_color query returns computed `rgb(245, 245, 245)`
|
|
15
|
+
* while the authored expected is `#f5f5f5` — equals must compare by value. */
|
|
16
|
+
export function normalizeColor(value) {
|
|
17
|
+
if (typeof value !== 'string')
|
|
18
|
+
return null;
|
|
19
|
+
const s = value.trim();
|
|
20
|
+
const hm = HEX_COLOR_RE.exec(s);
|
|
21
|
+
if (hm) {
|
|
22
|
+
let h = hm[1];
|
|
23
|
+
if (h.length === 3 || h.length === 4)
|
|
24
|
+
h = [...h].map((c) => c + c).join('');
|
|
25
|
+
const r = parseInt(h.slice(0, 2), 16);
|
|
26
|
+
const g = parseInt(h.slice(2, 4), 16);
|
|
27
|
+
const b = parseInt(h.slice(4, 6), 16);
|
|
28
|
+
const a = h.length === 8 ? Math.round((parseInt(h.slice(6, 8), 16) / 255) * 1000) / 1000 : 1.0;
|
|
29
|
+
return [r, g, b, a];
|
|
30
|
+
}
|
|
31
|
+
const rm = RGB_COLOR_RE.exec(s);
|
|
32
|
+
if (rm) {
|
|
33
|
+
const nums = [rm[1], rm[2], rm[3]].map((x) => Math.round(Number(x)));
|
|
34
|
+
if (nums.some((c) => !Number.isFinite(c) || c < 0 || c > 255))
|
|
35
|
+
return null;
|
|
36
|
+
const a = rm[4] !== undefined ? Math.round(Number(rm[4]) * 1000) / 1000 : 1.0;
|
|
37
|
+
return [nums[0], nums[1], nums[2], a];
|
|
38
|
+
}
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
// ── Operand coercions (V2 parity) ─────────────────────────────────────────────
|
|
42
|
+
/** bool-vs-string equality pair → lowercased strings, so true == 'true'. */
|
|
43
|
+
function normalizeBoolStr(left, right) {
|
|
44
|
+
if ((typeof left === 'boolean' && typeof right === 'string') ||
|
|
45
|
+
(typeof left === 'string' && typeof right === 'boolean')) {
|
|
46
|
+
return [String(left).toLowerCase(), String(right).toLowerCase()];
|
|
47
|
+
}
|
|
48
|
+
return [left, right];
|
|
49
|
+
}
|
|
50
|
+
/** Currency-tolerant numeric parse (V2 UIActions.string_to_float parity):
|
|
51
|
+
* "$7" -> 7, "7a" -> 7, "abc" -> 0, negative if '-' anywhere; a multi-dot
|
|
52
|
+
* residue like "1.2.3" THROWS — V2 crashed there and the loud failure is the
|
|
53
|
+
* faithful behavior. */
|
|
54
|
+
export function stringToFloat(value) {
|
|
55
|
+
if (typeof value === 'number')
|
|
56
|
+
return value;
|
|
57
|
+
const s = String(value);
|
|
58
|
+
const direct = Number(s);
|
|
59
|
+
if (s.trim() !== '' && Number.isFinite(direct))
|
|
60
|
+
return direct;
|
|
61
|
+
const isNegative = s.includes('-');
|
|
62
|
+
const kept = [...s].filter((c) => (c >= '0' && c <= '9') || c === '.').join('');
|
|
63
|
+
if (kept === '')
|
|
64
|
+
return 0;
|
|
65
|
+
const parsed = Number(kept);
|
|
66
|
+
if (!Number.isFinite(parsed)) {
|
|
67
|
+
throw new Error(`could not convert string to float: '${kept}'`);
|
|
68
|
+
}
|
|
69
|
+
return isNegative ? -parsed : parsed;
|
|
70
|
+
}
|
|
71
|
+
/** Coerce ONLY on mixed exact type: one real number, one string (booleans
|
|
72
|
+
* excluded). Two strings stay raw, so "007" == "7" is false (V2 parity). */
|
|
73
|
+
function coerceNumericMixed(left, right) {
|
|
74
|
+
const leftNum = typeof left === 'number';
|
|
75
|
+
const rightNum = typeof right === 'number';
|
|
76
|
+
if ((leftNum && typeof right === 'string') || (typeof left === 'string' && rightNum)) {
|
|
77
|
+
return [stringToFloat(left), stringToFloat(right)];
|
|
78
|
+
}
|
|
79
|
+
return [left, right];
|
|
80
|
+
}
|
|
81
|
+
import { normalizeText } from './textNormalize.js';
|
|
82
|
+
/** length_equals: a numeric operand is the number itself, else its length. */
|
|
83
|
+
function areLengthsEqual(value1, value2) {
|
|
84
|
+
const length = (val) => {
|
|
85
|
+
const s = String(val);
|
|
86
|
+
const f = Number(s.trim() === '' ? NaN : s);
|
|
87
|
+
if (Number.isFinite(f) && Number.isInteger(f))
|
|
88
|
+
return f;
|
|
89
|
+
return s.length;
|
|
90
|
+
};
|
|
91
|
+
return length(value1) === length(value2);
|
|
92
|
+
}
|
|
93
|
+
/** type_equals: map type-name strings to canonical tags, else classify the
|
|
94
|
+
* literal. Tags mirror PYTHON types (int/float distinct) so verdicts match:
|
|
95
|
+
* type_equals("5", "5.5") is false in both runtimes. */
|
|
96
|
+
const TYPE_NAME_TAGS = {
|
|
97
|
+
int: 'int', str: 'str', float: 'float', bool: 'bool', boolean: 'bool',
|
|
98
|
+
list: 'list', dict: 'dict', tuple: 'tuple', set: 'set',
|
|
99
|
+
};
|
|
100
|
+
function literalTag(val) {
|
|
101
|
+
const v = val.trim().toLowerCase();
|
|
102
|
+
if (v.includes('true') || v.includes('false'))
|
|
103
|
+
return 'bool';
|
|
104
|
+
if (v in TYPE_NAME_TAGS)
|
|
105
|
+
return TYPE_NAME_TAGS[v];
|
|
106
|
+
try {
|
|
107
|
+
const parsed = JSON.parse(val);
|
|
108
|
+
if (typeof parsed === 'number')
|
|
109
|
+
return Number.isInteger(parsed) ? 'int' : 'float';
|
|
110
|
+
if (typeof parsed === 'boolean')
|
|
111
|
+
return 'bool';
|
|
112
|
+
if (Array.isArray(parsed))
|
|
113
|
+
return 'list';
|
|
114
|
+
if (parsed !== null && typeof parsed === 'object')
|
|
115
|
+
return 'dict';
|
|
116
|
+
return 'str';
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
return 'str';
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
function areTypesEqual(value1, value2) {
|
|
123
|
+
return literalTag(String(value1)) === literalTag(String(value2));
|
|
124
|
+
}
|
|
125
|
+
/** Parse a stringified JSON operand (V2 _json_obj/_json_arr parity). A real
|
|
126
|
+
* object/array passes through. A string parses with JSON.parse, falling back
|
|
127
|
+
* to a python-repr acceptance (single→double quotes, True/False/None). Parse
|
|
128
|
+
* failures THROW — a malformed operand fails loudly, never silently. */
|
|
129
|
+
export function jsonCoerce(value) {
|
|
130
|
+
if (typeof value !== 'string')
|
|
131
|
+
return value;
|
|
132
|
+
try {
|
|
133
|
+
return JSON.parse(value);
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
const pyish = value
|
|
137
|
+
.replace(/\bTrue\b/g, 'true')
|
|
138
|
+
.replace(/\bFalse\b/g, 'false')
|
|
139
|
+
.replace(/\bNone\b/g, 'null')
|
|
140
|
+
.replace(/'/g, '"');
|
|
141
|
+
return JSON.parse(pyish); // throws on genuine garbage — deliberate
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// ── Operators ─────────────────────────────────────────────────────────────────
|
|
145
|
+
const ASSERTION_CONDITIONS = [
|
|
146
|
+
'equals', 'not_equals', 'greater_than', 'less_than',
|
|
147
|
+
'greater_than_or_equal', 'less_than_or_equal',
|
|
148
|
+
'start_with', 'end_with', 'contains', 'not_contains',
|
|
149
|
+
'length_equals', 'type_equals',
|
|
150
|
+
'json_key_exists', 'json_keys_count', 'json_array_length_equals',
|
|
151
|
+
'json_array_contains', 'json_value_equals',
|
|
152
|
+
'in', 'not_in', 'lower_case', 'upper_case',
|
|
153
|
+
];
|
|
154
|
+
const CONDITION_ALIASES = {
|
|
155
|
+
equal: 'equals', equals: 'equals',
|
|
156
|
+
not_equal: 'not_equals', not_equals: 'not_equals',
|
|
157
|
+
start_with: 'start_with', starts_with: 'start_with',
|
|
158
|
+
end_with: 'end_with', ends_with: 'end_with',
|
|
159
|
+
contain: 'contains', contains: 'contains',
|
|
160
|
+
};
|
|
161
|
+
/** Resolve an operator string (aliases + case-insensitive); unknown THROWS —
|
|
162
|
+
* never a silent EQUALS fallback that would produce a wrong verdict. */
|
|
163
|
+
export function AssertionCondition(raw) {
|
|
164
|
+
const normalized = raw.trim().toLowerCase();
|
|
165
|
+
if (ASSERTION_CONDITIONS.includes(normalized)) {
|
|
166
|
+
return normalized;
|
|
167
|
+
}
|
|
168
|
+
const alias = CONDITION_ALIASES[normalized];
|
|
169
|
+
if (alias)
|
|
170
|
+
return alias;
|
|
171
|
+
throw new Error(`'${raw}' is not a valid AssertionCondition`);
|
|
172
|
+
}
|
|
173
|
+
const LOGICAL_OPS = ['AND', 'OR', 'NOT'];
|
|
174
|
+
export class Assertion {
|
|
175
|
+
assertionOperator;
|
|
176
|
+
assertionOperands;
|
|
177
|
+
leftOperand;
|
|
178
|
+
rightOperand;
|
|
179
|
+
operands;
|
|
180
|
+
claim;
|
|
181
|
+
constructor(opts) {
|
|
182
|
+
this.assertionOperator = opts.assertionOperator ?? [];
|
|
183
|
+
this.assertionOperands = opts.assertionOperands ?? [];
|
|
184
|
+
this.leftOperand = opts.leftOperand;
|
|
185
|
+
this.rightOperand = opts.rightOperand;
|
|
186
|
+
this.operands = opts.operands ?? [];
|
|
187
|
+
this.claim = opts.claim ?? '';
|
|
188
|
+
}
|
|
189
|
+
// ── helpers ─────────────────────────────────────────────────────────────────
|
|
190
|
+
async resolve(value, variables, getVariableValue) {
|
|
191
|
+
if (typeof value !== 'string')
|
|
192
|
+
return [value, {}];
|
|
193
|
+
if (getVariableValue) {
|
|
194
|
+
// Native type intact; coercion happens later, operator-aware (V2 parity).
|
|
195
|
+
const resolved = await getVariableValue(value, variables);
|
|
196
|
+
return [resolved, { [value]: resolved }];
|
|
197
|
+
}
|
|
198
|
+
const s = value.trim();
|
|
199
|
+
if (s.startsWith('{{') && s.endsWith('}}')) {
|
|
200
|
+
const key = s.slice(2, -2).trim();
|
|
201
|
+
const resolved = this.accessNestedValue(variables, key);
|
|
202
|
+
return [resolved, { [key]: resolved }];
|
|
203
|
+
}
|
|
204
|
+
if (s.startsWith('${') && s.endsWith('}')) {
|
|
205
|
+
const key = s.slice(2, -1).trim();
|
|
206
|
+
const resolved = this.accessNestedValue(variables, key);
|
|
207
|
+
return [resolved, { [key]: resolved }];
|
|
208
|
+
}
|
|
209
|
+
return [value, {}];
|
|
210
|
+
}
|
|
211
|
+
accessNestedValue(dump, name) {
|
|
212
|
+
let value = dump;
|
|
213
|
+
for (let key of name.split('.')) {
|
|
214
|
+
while (key.includes('[') && key.includes(']')) {
|
|
215
|
+
const base = key.slice(0, key.indexOf('['));
|
|
216
|
+
const index = parseInt(key.slice(key.indexOf('[') + 1, key.indexOf(']')), 10);
|
|
217
|
+
if (base)
|
|
218
|
+
value = value[base];
|
|
219
|
+
value = value[index];
|
|
220
|
+
key = key.slice(key.indexOf(']') + 1);
|
|
221
|
+
}
|
|
222
|
+
if (key)
|
|
223
|
+
value = value[key];
|
|
224
|
+
}
|
|
225
|
+
return value;
|
|
226
|
+
}
|
|
227
|
+
evalLeafCondition(cond, left, right) {
|
|
228
|
+
const ci = { caseInsensitive: true };
|
|
229
|
+
switch (cond) {
|
|
230
|
+
case 'equals':
|
|
231
|
+
case 'not_equals': {
|
|
232
|
+
const lc = normalizeColor(left);
|
|
233
|
+
const rc = normalizeColor(right);
|
|
234
|
+
let result;
|
|
235
|
+
if (lc !== null && rc !== null) {
|
|
236
|
+
result = lc.every((v, i) => v === rc[i]);
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
const [cl, cr] = coerceNumericMixed(left, right);
|
|
240
|
+
const [l, r] = normalizeBoolStr(cl, cr);
|
|
241
|
+
result = l === r;
|
|
242
|
+
}
|
|
243
|
+
return cond === 'equals' ? result : !result;
|
|
244
|
+
}
|
|
245
|
+
// V2 applies the bool<->str lowering for EVERY operator, so ordering
|
|
246
|
+
// compares lowered strings rather than raising on bool vs str.
|
|
247
|
+
case 'greater_than':
|
|
248
|
+
case 'less_than':
|
|
249
|
+
case 'greater_than_or_equal':
|
|
250
|
+
case 'less_than_or_equal': {
|
|
251
|
+
const [cl, cr] = coerceNumericMixed(left, right);
|
|
252
|
+
const [l, r] = normalizeBoolStr(cl, cr);
|
|
253
|
+
if (cond === 'greater_than')
|
|
254
|
+
return l > r;
|
|
255
|
+
if (cond === 'less_than')
|
|
256
|
+
return l < r;
|
|
257
|
+
if (cond === 'greater_than_or_equal')
|
|
258
|
+
return l >= r;
|
|
259
|
+
return l <= r;
|
|
260
|
+
}
|
|
261
|
+
case 'contains':
|
|
262
|
+
return normalizeText(left, ci).includes(normalizeText(right, ci));
|
|
263
|
+
case 'not_contains':
|
|
264
|
+
return !normalizeText(left, ci).includes(normalizeText(right, ci));
|
|
265
|
+
case 'start_with':
|
|
266
|
+
return normalizeText(left, ci).startsWith(normalizeText(right, ci));
|
|
267
|
+
case 'end_with':
|
|
268
|
+
return normalizeText(left, ci).endsWith(normalizeText(right, ci));
|
|
269
|
+
case 'length_equals':
|
|
270
|
+
return areLengthsEqual(left, right);
|
|
271
|
+
case 'type_equals':
|
|
272
|
+
return areTypesEqual(left, right);
|
|
273
|
+
case 'lower_case':
|
|
274
|
+
return normalizeText(left) === normalizeText(left, ci);
|
|
275
|
+
case 'upper_case':
|
|
276
|
+
return normalizeText(left) === normalizeText(left, ci).toUpperCase();
|
|
277
|
+
case 'in':
|
|
278
|
+
if (Array.isArray(right))
|
|
279
|
+
return right.includes(left);
|
|
280
|
+
return normalizeText(right, ci).includes(normalizeText(left, ci));
|
|
281
|
+
case 'not_in':
|
|
282
|
+
if (Array.isArray(right))
|
|
283
|
+
return !right.includes(left);
|
|
284
|
+
return !normalizeText(right, ci).includes(normalizeText(left, ci));
|
|
285
|
+
case 'json_key_exists': {
|
|
286
|
+
const c = jsonCoerce(left);
|
|
287
|
+
return c !== null && typeof c === 'object' && !Array.isArray(c) && String(right) in c;
|
|
288
|
+
}
|
|
289
|
+
case 'json_keys_count': {
|
|
290
|
+
const c = jsonCoerce(left);
|
|
291
|
+
return c !== null && typeof c === 'object' && !Array.isArray(c) &&
|
|
292
|
+
Object.keys(c).length === parseInt(String(right), 10);
|
|
293
|
+
}
|
|
294
|
+
case 'json_array_length_equals': {
|
|
295
|
+
const c = jsonCoerce(left);
|
|
296
|
+
return Array.isArray(c) && c.length === parseInt(String(right), 10);
|
|
297
|
+
}
|
|
298
|
+
case 'json_array_contains': {
|
|
299
|
+
const c = jsonCoerce(left);
|
|
300
|
+
// deep-ish membership: primitives by ===, objects by JSON identity
|
|
301
|
+
return Array.isArray(c) && c.some((item) => item === right || JSON.stringify(item) === JSON.stringify(right));
|
|
302
|
+
}
|
|
303
|
+
case 'json_value_equals': {
|
|
304
|
+
const c = jsonCoerce(left);
|
|
305
|
+
return c !== null && typeof c === 'object' && !Array.isArray(c) &&
|
|
306
|
+
Array.isArray(right) && right.length === 2 &&
|
|
307
|
+
c[String(right[0])] === right[1];
|
|
308
|
+
}
|
|
309
|
+
default:
|
|
310
|
+
throw new Error(`Unsupported condition: ${String(cond)}`);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
// ── public API ──────────────────────────────────────────────────────────────
|
|
314
|
+
/** Evaluate this node → [passed, usedVariables]. */
|
|
315
|
+
async evaluate(variables = {}, getVariableValue = null) {
|
|
316
|
+
// Logical group node
|
|
317
|
+
if (this.operands.length) {
|
|
318
|
+
const op = this.assertionOperands[0] ?? 'AND';
|
|
319
|
+
// NOT is unary: negate the single child.
|
|
320
|
+
if (op === 'NOT') {
|
|
321
|
+
if (this.operands.length !== 1) {
|
|
322
|
+
throw new Error(`NOT requires exactly one operand, got ${this.operands.length}`);
|
|
323
|
+
}
|
|
324
|
+
const [result, used] = await this.operands[0].evaluate(variables, getVariableValue);
|
|
325
|
+
return [!result, used];
|
|
326
|
+
}
|
|
327
|
+
let [result, used] = await this.operands[0].evaluate(variables, getVariableValue);
|
|
328
|
+
for (let i = 1; i < this.operands.length; i++) {
|
|
329
|
+
const [val, childUsed] = await this.operands[i].evaluate(variables, getVariableValue);
|
|
330
|
+
Object.assign(used, childUsed);
|
|
331
|
+
if (op === 'AND')
|
|
332
|
+
result = result && val;
|
|
333
|
+
else if (op === 'OR')
|
|
334
|
+
result = result || val;
|
|
335
|
+
else
|
|
336
|
+
throw new Error(`Unsupported logical operator: ${String(op)}`);
|
|
337
|
+
}
|
|
338
|
+
return [result, used];
|
|
339
|
+
}
|
|
340
|
+
// Leaf node: all listed conditions must hold (logical AND).
|
|
341
|
+
const [left, leftUsed] = await this.resolve(this.leftOperand, variables, getVariableValue);
|
|
342
|
+
const [right, rightUsed] = await this.resolve(this.rightOperand, variables, getVariableValue);
|
|
343
|
+
const used = { ...leftUsed, ...rightUsed };
|
|
344
|
+
for (const cond of this.assertionOperator) {
|
|
345
|
+
if (!this.evalLeafCondition(cond, left, right))
|
|
346
|
+
return [false, used];
|
|
347
|
+
}
|
|
348
|
+
return [true, used];
|
|
349
|
+
}
|
|
350
|
+
/** Deserialize an assertion-tree dict (the generator's emitted shape). */
|
|
351
|
+
static fromJson(json) {
|
|
352
|
+
const claim = json.claim ?? '';
|
|
353
|
+
// Logical group — new format: assertion_operands[0] is AND/OR/NOT.
|
|
354
|
+
const ao = json.assertion_operands ?? [];
|
|
355
|
+
if (ao.length && LOGICAL_OPS.includes(ao[0])) {
|
|
356
|
+
return new Assertion({
|
|
357
|
+
assertionOperands: [ao[0]],
|
|
358
|
+
operands: (json.operands ?? []).map((o) => Assertion.fromJson(o)),
|
|
359
|
+
claim,
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
// Logical group — old format: operator is the connector string.
|
|
363
|
+
const opData = json.operator ?? [];
|
|
364
|
+
if (typeof opData === 'string' && LOGICAL_OPS.includes(opData)) {
|
|
365
|
+
return new Assertion({
|
|
366
|
+
assertionOperands: [opData],
|
|
367
|
+
operands: (json.operands ?? []).map((o) => Assertion.fromJson(o)),
|
|
368
|
+
claim,
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
// Leaf — operator may be a string or list; empty defaults to equals.
|
|
372
|
+
const ops = Array.isArray(opData) ? opData : [opData];
|
|
373
|
+
const conditions = ops.length && ops[0]
|
|
374
|
+
? ops.map((o) => AssertionCondition(String(o)))
|
|
375
|
+
: ['equals'];
|
|
376
|
+
return new Assertion({
|
|
377
|
+
assertionOperator: conditions,
|
|
378
|
+
leftOperand: json.left_operand,
|
|
379
|
+
rightOperand: json.right_operand,
|
|
380
|
+
claim,
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
//# sourceMappingURL=assertionV3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assertionV3.js","sourceRoot":"","sources":["../../src/helpers/assertionV3.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
declare const POSSIBLE_CONDITION_VALUES: readonly ["==", "!=", ">", "<", ">=", "<=", "contains", "not_contains", "starts_with", "ends_with"];
|
|
2
|
+
export type PossibleConditionValue = (typeof POSSIBLE_CONDITION_VALUES)[number];
|
|
3
|
+
interface PossibleConditionFactory {
|
|
4
|
+
(raw: string): PossibleConditionValue;
|
|
5
|
+
EQUALS: PossibleConditionValue;
|
|
6
|
+
NOT_EQUALS: PossibleConditionValue;
|
|
7
|
+
GREATER_THAN: PossibleConditionValue;
|
|
8
|
+
LESS_THAN: PossibleConditionValue;
|
|
9
|
+
GREATER_THAN_OR_EQUALS: PossibleConditionValue;
|
|
10
|
+
LESS_THAN_OR_EQUALS: PossibleConditionValue;
|
|
11
|
+
CONTAINS: PossibleConditionValue;
|
|
12
|
+
NOT_CONTAINS: PossibleConditionValue;
|
|
13
|
+
STARTS_WITH: PossibleConditionValue;
|
|
14
|
+
ENDS_WITH: PossibleConditionValue;
|
|
15
|
+
}
|
|
16
|
+
export declare const PossibleCondition: PossibleConditionFactory;
|
|
17
|
+
export type ConcatenationOperatorValue = 'AND' | 'OR';
|
|
18
|
+
interface ConcatenationOperatorFactory {
|
|
19
|
+
(raw: string): ConcatenationOperatorValue;
|
|
20
|
+
AND: ConcatenationOperatorValue;
|
|
21
|
+
OR: ConcatenationOperatorValue;
|
|
22
|
+
}
|
|
23
|
+
export declare const ConcatenationOperator: ConcatenationOperatorFactory;
|
|
24
|
+
/** A single comparison triple: left_operand op right_operand. */
|
|
25
|
+
export declare class ResolvedCondition {
|
|
26
|
+
readonly leftOperand: string;
|
|
27
|
+
readonly operator: PossibleConditionValue;
|
|
28
|
+
readonly rightOperand: string;
|
|
29
|
+
constructor(leftOperand: string, operator: PossibleConditionValue, rightOperand: string);
|
|
30
|
+
toDict(): {
|
|
31
|
+
left_operand: string;
|
|
32
|
+
operator: string;
|
|
33
|
+
right_operand: string;
|
|
34
|
+
};
|
|
35
|
+
/** Parse 'left op right' whitespace-delimited string. */
|
|
36
|
+
static fromString(condition: string): ResolvedCondition;
|
|
37
|
+
static fromJson(json: {
|
|
38
|
+
left_operand?: string;
|
|
39
|
+
operator?: string;
|
|
40
|
+
right_operand?: string;
|
|
41
|
+
}): ResolvedCondition;
|
|
42
|
+
toString(): string;
|
|
43
|
+
equals(other: unknown): boolean;
|
|
44
|
+
}
|
|
45
|
+
export type VariableResolver = (template: string, variables?: Record<string, unknown>) => unknown | Promise<unknown>;
|
|
46
|
+
/**
|
|
47
|
+
* Composite condition: ResolvedConditions joined by ConcatenationOperators.
|
|
48
|
+
* `await cond.evaluate()` returns `[boolean, usedVariables]`.
|
|
49
|
+
*/
|
|
50
|
+
export declare class Condition {
|
|
51
|
+
readonly conditions: ResolvedCondition[];
|
|
52
|
+
readonly connectors: ConcatenationOperatorValue[];
|
|
53
|
+
readonly isV3: boolean;
|
|
54
|
+
constructor(opts: {
|
|
55
|
+
conditions: ResolvedCondition[];
|
|
56
|
+
connectors: ConcatenationOperatorValue[];
|
|
57
|
+
isV3?: boolean;
|
|
58
|
+
});
|
|
59
|
+
private resolvePlaceholder;
|
|
60
|
+
/** Dotted + bracket-indexed traversal ('api_x.response_body.items[0].id'). */
|
|
61
|
+
private accessNestedValue;
|
|
62
|
+
private isNumeric;
|
|
63
|
+
private toNumeric;
|
|
64
|
+
private cleanString;
|
|
65
|
+
/** Coerce mixed string/number operands before comparing (PY parity). */
|
|
66
|
+
private typecast;
|
|
67
|
+
/** Normalize a text operand for substring/prefix/suffix comparison.
|
|
68
|
+
* V3: accent-fold + case-fold; V4: plain String(). */
|
|
69
|
+
private cmp;
|
|
70
|
+
private evalCondition;
|
|
71
|
+
/**
|
|
72
|
+
* Evaluate all conditions. Returns `[result, usedVariables]`.
|
|
73
|
+
*
|
|
74
|
+
* With no arguments (the emitted-code shape) variables resolve through the
|
|
75
|
+
* binding's own store. Pass an explicit resolver/variables for local eval.
|
|
76
|
+
*/
|
|
77
|
+
evaluate(variables?: Record<string, unknown>, getVariableValue?: VariableResolver | null): Promise<[boolean, Record<string, unknown>]>;
|
|
78
|
+
toDict(): {
|
|
79
|
+
connectors: string[];
|
|
80
|
+
conditions: ReturnType<ResolvedCondition['toDict']>[];
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
export {};
|
|
84
|
+
//# sourceMappingURL=condition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"condition.d.ts","sourceRoot":"","sources":["../../src/helpers/condition.ts"],"names":[],"mappings":"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"}
|