@redocly/respect-core 2.3.0 → 2.3.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.
@@ -1,8 +1,8 @@
1
- import { JSONPath } from 'jsonpath-plus';
2
1
  import { validateSuccessCriteria, isRegexpSuccessCriteria, isJSONPathSuccessCriteria, } from './validate-success-criteria.js';
3
2
  import { CHECKS } from '../../checks/index.js';
4
3
  import { evaluateRuntimeExpression } from '../../runtime-expressions/index.js';
5
4
  import { createRuntimeExpressionCtx } from '../context/index.js';
5
+ import { evaluateJSONPathCondition } from './evaluate-jsonpath-condition.js';
6
6
  export function checkCriteria({ workflowId, step, criteria: criteriaList = [], ctx, }) {
7
7
  validateSuccessCriteria(criteriaList);
8
8
  const checks = [];
@@ -50,7 +50,7 @@ export function checkCriteria({ workflowId, step, criteria: criteriaList = [], c
50
50
  const data = evaluateRuntimeExpression(context, criteriaContext, ctx.options.logger);
51
51
  checks.push({
52
52
  name: CHECKS.SUCCESS_CRITERIA_CHECK,
53
- passed: evaluateJSONPAthCondition(condition, data),
53
+ passed: evaluateJSONPathCondition(condition, data),
54
54
  message: `Checking jsonpath criteria: ${condition}`,
55
55
  severity: ctx.severity['SUCCESS_CRITERIA_CHECK'],
56
56
  condition: condition,
@@ -78,21 +78,4 @@ export function checkCriteria({ workflowId, step, criteria: criteriaList = [], c
78
78
  });
79
79
  return checks;
80
80
  }
81
- function evaluateJSONPAthCondition(condition, context) {
82
- // Extract JSONPath expressions from the string
83
- const jsonpathMatches = condition.match(/\$\.[a-zA-Z0-9_]+/g) || [];
84
- // Replace JSONPath expressions with their values
85
- const replacedCondition = jsonpathMatches.reduce((acc, match) => {
86
- const jsonpathResult = JSONPath({ path: match, json: context });
87
- const jsonpathResultValue = jsonpathResult[0] || null;
88
- return acc.replace(match, JSON.stringify(jsonpathResultValue));
89
- }, condition);
90
- try {
91
- const evaluateFn = new Function(`return ${replacedCondition};`);
92
- return !!evaluateFn();
93
- }
94
- catch (_error) {
95
- return false;
96
- }
97
- }
98
81
  //# sourceMappingURL=check-success-criteria.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"check-success-criteria.js","sourceRoot":"","sources":["../../../../src/modules/flow-runner/success-criteria/check-success-criteria.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"check-success-criteria.js","sourceRoot":"","sources":["../../../../src/modules/flow-runner/success-criteria/check-success-criteria.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type JsonValue } from 'jsonpath-rfc9535';
2
+ export declare function evaluateJSONPathCondition(condition: string, context: JsonValue): boolean;
3
+ //# sourceMappingURL=evaluate-jsonpath-condition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluate-jsonpath-condition.d.ts","sourceRoot":"","sources":["../../../../src/modules/flow-runner/success-criteria/evaluate-jsonpath-condition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAEzD,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,WAS9E"}
@@ -0,0 +1,176 @@
1
+ import { query } from 'jsonpath-rfc9535';
2
+ export function evaluateJSONPathCondition(condition, context) {
3
+ try {
4
+ const resolvedCondition = parseExpressions(condition, context);
5
+ const evaluateFn = new Function(`return ${resolvedCondition};`);
6
+ return !!evaluateFn();
7
+ }
8
+ catch (error) {
9
+ return false;
10
+ }
11
+ }
12
+ function parseExpressions(condition, context) {
13
+ const expressionsParts = [];
14
+ let i = 0;
15
+ let expressionElements = '';
16
+ while (i < condition.length) {
17
+ if (condition[i] === '$') {
18
+ if (expressionElements.length > 0) {
19
+ expressionsParts.push(expressionElements);
20
+ expressionElements = '';
21
+ }
22
+ const start = i;
23
+ const expression = parseSingleJSONPath(condition, i);
24
+ if (expression.length > 1) {
25
+ const evaluatedExpression = evaluateJSONPathExpression(expression, context);
26
+ expressionsParts.push(evaluatedExpression);
27
+ }
28
+ i = start + expression.length;
29
+ }
30
+ else {
31
+ expressionElements += condition[i];
32
+ i++;
33
+ }
34
+ }
35
+ // Push any remaining content after the while loop
36
+ if (expressionElements.length > 0) {
37
+ expressionsParts.push(expressionElements);
38
+ }
39
+ return expressionsParts.join('');
40
+ }
41
+ function parseSingleJSONPath(condition, startIndex) {
42
+ let jsonpath = '$';
43
+ let bracketDepth = 0;
44
+ let inQuotes = false;
45
+ let quoteChar = '';
46
+ let inFilter = false;
47
+ let filterDepth = 0;
48
+ let i = startIndex + 1; // Skip the '$'
49
+ while (i < condition.length) {
50
+ const char = condition[i];
51
+ if ((char === '"' || char === "'") && !inQuotes) {
52
+ inQuotes = true;
53
+ quoteChar = char;
54
+ jsonpath += char;
55
+ i++;
56
+ continue;
57
+ }
58
+ if (char === quoteChar && inQuotes) {
59
+ inQuotes = false;
60
+ jsonpath += char;
61
+ i++;
62
+ continue;
63
+ }
64
+ if (inQuotes) {
65
+ jsonpath += char;
66
+ i++;
67
+ continue;
68
+ }
69
+ if (char === '[') {
70
+ bracketDepth++;
71
+ if (i + 1 < condition.length && condition[i + 1] === '?') {
72
+ inFilter = true;
73
+ filterDepth = bracketDepth;
74
+ }
75
+ jsonpath += char;
76
+ i++;
77
+ continue;
78
+ }
79
+ if (char === ']') {
80
+ bracketDepth--;
81
+ if (inFilter && bracketDepth < filterDepth) {
82
+ inFilter = false;
83
+ }
84
+ jsonpath += char;
85
+ i++;
86
+ continue;
87
+ }
88
+ // Stop at logical operators, comparison operators, or whitespace (outside of filters)
89
+ if (!inFilter && (/\s/.test(char) || /[<>=!&|,)]/.test(char))) {
90
+ break;
91
+ }
92
+ jsonpath += char;
93
+ i++;
94
+ }
95
+ return jsonpath;
96
+ }
97
+ function evaluateJSONPathExpression(expression, context) {
98
+ // Handle legacy .length suffix for backward compatibility that is not a valid RFC 9535 expression
99
+ if (expression.endsWith('.length')) {
100
+ const basePath = expression.slice(0, -'.length'.length);
101
+ const normalizedPath = transformHyphensToUnderscores(basePath);
102
+ const result = query(context, normalizedPath);
103
+ const value = result[0] ?? null;
104
+ return Array.isArray(value) ? String(value.length) : '0';
105
+ }
106
+ if (expression.includes('[?(') && expression.includes(')]')) {
107
+ return handleFilterExpression(expression, context);
108
+ }
109
+ const normalizedPath = transformHyphensToUnderscores(expression);
110
+ const result = query(context, normalizedPath);
111
+ return JSON.stringify(result[0]);
112
+ }
113
+ function handleFilterExpression(expression, context) {
114
+ const filterMatch = expression.match(/\[\?\((.*)\)\]/);
115
+ if (!filterMatch)
116
+ return 'false';
117
+ const filterCondition = filterMatch[1];
118
+ const basePath = expression.substring(0, expression.indexOf('[?('));
119
+ const normalizedBasePath = transformHyphensToUnderscores(basePath);
120
+ const jsonpathResult = query(context, normalizedBasePath);
121
+ // Flatten the result in case JSONPath returns nested arrays
122
+ const arrayToFilter = Array.isArray(jsonpathResult) ? jsonpathResult.flat() : jsonpathResult;
123
+ if (!Array.isArray(arrayToFilter)) {
124
+ return 'false';
125
+ }
126
+ const filteredArray = arrayToFilter.filter((item) => {
127
+ const convertedCondition = processFilterCondition(filterCondition, item);
128
+ try {
129
+ const safeEval = new Function('item', `return ${convertedCondition};`);
130
+ return !!safeEval(item);
131
+ }
132
+ catch {
133
+ return false;
134
+ }
135
+ });
136
+ const afterFilter = expression.substring(expression.indexOf(')]') + 2);
137
+ if (afterFilter.startsWith('.')) {
138
+ const propertyMatch = afterFilter.match(/\.([a-zA-Z0-9_-]+)/);
139
+ if (propertyMatch) {
140
+ const propertyName = propertyMatch[1].replace(/-/g, '_');
141
+ const propertyValues = filteredArray.map((item) => item[propertyName]);
142
+ return JSON.stringify(propertyValues);
143
+ }
144
+ }
145
+ return filteredArray.length > 0 ? JSON.stringify(filteredArray) : 'false';
146
+ }
147
+ function processFilterCondition(filterCondition, item) {
148
+ let convertedCondition = filterCondition;
149
+ // Handle @.property.match(/pattern/) expressions
150
+ convertedCondition = convertedCondition.replace(/@\.([a-zA-Z0-9_-]+)\.match\(([^)]+)\)/g, (_, prop, pattern) => {
151
+ const normalizedProp = prop.replace(/-/g, '_');
152
+ const value = item[normalizedProp];
153
+ if (typeof value !== 'string')
154
+ return 'false';
155
+ try {
156
+ let cleanPattern = pattern.replace(/^["']|["']$/g, ''); // Remove quotes
157
+ cleanPattern = cleanPattern.replace(/^\/|\/$/g, ''); // Remove leading/trailing slashes
158
+ const regex = new RegExp(cleanPattern);
159
+ return String(regex.test(value));
160
+ }
161
+ catch {
162
+ return 'false';
163
+ }
164
+ });
165
+ // Handle @.property expressions (simple property access)
166
+ convertedCondition = convertedCondition.replace(/@\.([a-zA-Z0-9_-]+)/g, (_, prop) => {
167
+ const normalizedProp = prop.replace(/-/g, '_');
168
+ const value = item[normalizedProp];
169
+ return JSON.stringify(value);
170
+ });
171
+ return convertedCondition;
172
+ }
173
+ function transformHyphensToUnderscores(path) {
174
+ return path.replace(/\.([a-zA-Z0-9_-]+)/g, (_, prop) => '.' + prop.replace(/-/g, '_'));
175
+ }
176
+ //# sourceMappingURL=evaluate-jsonpath-condition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluate-jsonpath-condition.js","sourceRoot":"","sources":["../../../../src/modules/flow-runner/success-criteria/evaluate-jsonpath-condition.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redocly/respect-core",
3
- "version": "2.3.0",
3
+ "version": "2.3.1",
4
4
  "description": "API testing framework core",
5
5
  "type": "module",
6
6
  "types": "lib/index.d.ts",
@@ -39,12 +39,12 @@
39
39
  "@faker-js/faker": "^7.6.0",
40
40
  "@noble/hashes": "^1.8.0",
41
41
  "@redocly/ajv": "8.11.2",
42
- "@redocly/openapi-core": "2.3.0",
42
+ "@redocly/openapi-core": "2.3.1",
43
43
  "better-ajv-errors": "^1.2.0",
44
44
  "colorette": "^2.0.20",
45
45
  "jest-matcher-utils": "^29.3.1",
46
46
  "json-pointer": "^0.6.2",
47
- "jsonpath-plus": "^10.0.6",
47
+ "jsonpath-rfc9535": "1.3.0",
48
48
  "openapi-sampler": "^1.6.1",
49
49
  "outdent": "^0.8.0"
50
50
  },