@swaggerexpert/jsonpath 4.0.1 → 4.0.3
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/README.md +2 -0
- package/SECURITY.md +2 -1
- package/cjs/evaluate/index.cjs +21 -9
- package/es/evaluate/index.mjs +21 -9
- package/package.json +1 -1
- package/types/index.d.ts +6 -0
package/README.md
CHANGED
|
@@ -16,6 +16,8 @@ The development of this library contributed to the identification and formal sub
|
|
|
16
16
|
- [Errata ID: 8354](https://www.rfc-editor.org/errata/eid8354)
|
|
17
17
|
|
|
18
18
|
This library is **100% compliant** with the [JSONPath Compliance Test Suite](https://github.com/jsonpath-standard/jsonpath-compliance-test-suite).
|
|
19
|
+
It is also included in the [JSONPath Comparison](https://cburgmer.github.io/json-path-comparison/) project,
|
|
20
|
+
executing all queries without errors.
|
|
19
21
|
|
|
20
22
|
<table>
|
|
21
23
|
<tr>
|
package/SECURITY.md
CHANGED
|
@@ -8,7 +8,8 @@ If you believe you've found an exploitable security issue in @swaggerexpert/json
|
|
|
8
8
|
|---------|--------------------|
|
|
9
9
|
| ^1.0.0 | :x: |
|
|
10
10
|
| ^2.0.0 | :x: |
|
|
11
|
-
| ^3.0.0 | :
|
|
11
|
+
| ^3.0.0 | :x: |
|
|
12
|
+
| ^4.0.0 | :white_check_mark: |
|
|
12
13
|
|
|
13
14
|
## Reporting a Vulnerability
|
|
14
15
|
|
package/cjs/evaluate/index.cjs
CHANGED
|
@@ -6,6 +6,7 @@ var _index = _interopRequireDefault(require("../parse/index.cjs"));
|
|
|
6
6
|
var NormalizedPath = _interopRequireWildcard(require("../normalized-path.cjs"));
|
|
7
7
|
var _segment = _interopRequireDefault(require("./visitors/segment.cjs"));
|
|
8
8
|
var _index2 = _interopRequireDefault(require("./realms/json/index.cjs"));
|
|
9
|
+
var _JSONPathParseError = _interopRequireDefault(require("../errors/JSONPathParseError.cjs"));
|
|
9
10
|
var _JSONPathEvaluateError = _interopRequireDefault(require("../errors/JSONPathEvaluateError.cjs"));
|
|
10
11
|
var defaultFunctions = _interopRequireWildcard(require("./functions/index.cjs"));
|
|
11
12
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
@@ -29,6 +30,8 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
|
|
|
29
30
|
* Default is JSONEvaluationRealm for plain objects/arrays.
|
|
30
31
|
* @property {Object} [functions] - Optional custom function registry.
|
|
31
32
|
* Can extend or override built-in functions (length, count, match, search, value).
|
|
33
|
+
* @property {boolean} [trace=true] - Enable parser tracing for detailed error messages.
|
|
34
|
+
* When true, syntax errors include position and expected tokens.
|
|
32
35
|
*/
|
|
33
36
|
|
|
34
37
|
/**
|
|
@@ -38,7 +41,8 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
|
|
|
38
41
|
* @param {string} expression - JSONPath expression
|
|
39
42
|
* @param {EvaluateOptions} [options] - Evaluation options
|
|
40
43
|
* @returns {unknown[]} - Array of matched values
|
|
41
|
-
* @throws {
|
|
44
|
+
* @throws {JSONPathParseError} If the expression is invalid (syntax or semantic error)
|
|
45
|
+
* @throws {JSONPathEvaluateError} If an unexpected error occurs during evaluation
|
|
42
46
|
*
|
|
43
47
|
* @example
|
|
44
48
|
* // Simple query
|
|
@@ -60,21 +64,29 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
|
|
|
60
64
|
const evaluate = (value, expression, {
|
|
61
65
|
callback,
|
|
62
66
|
realm = new _index2.default(),
|
|
63
|
-
functions = defaultFunctions
|
|
67
|
+
functions = defaultFunctions,
|
|
68
|
+
trace = true
|
|
64
69
|
} = {}) => {
|
|
65
|
-
// Parse the expression
|
|
66
|
-
const
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
+
// Parse the expression with trace enabled for better error messages
|
|
71
|
+
const {
|
|
72
|
+
result,
|
|
73
|
+
trace: parseTrace,
|
|
74
|
+
tree
|
|
75
|
+
} = (0, _index.default)(expression, {
|
|
76
|
+
trace: !!trace
|
|
77
|
+
});
|
|
78
|
+
if (!result.success) {
|
|
79
|
+
let message = `Invalid JSONPath expression: "${expression}". Syntax error at position ${result.maxMatched}`;
|
|
80
|
+
message += parseTrace ? `, expected ${parseTrace.inferExpectations()}` : '';
|
|
81
|
+
throw new _JSONPathParseError.default(message, {
|
|
82
|
+
jsonPath: expression
|
|
70
83
|
});
|
|
71
84
|
}
|
|
72
85
|
try {
|
|
73
86
|
// The tree is the AST root directly (JsonPathQuery node)
|
|
74
|
-
const ast = parseResult.tree;
|
|
75
87
|
const {
|
|
76
88
|
segments
|
|
77
|
-
} =
|
|
89
|
+
} = tree;
|
|
78
90
|
const results = [];
|
|
79
91
|
|
|
80
92
|
// Handle empty query ($ with no segments)
|
package/es/evaluate/index.mjs
CHANGED
|
@@ -12,6 +12,7 @@ import parse from "../parse/index.mjs";
|
|
|
12
12
|
import * as NormalizedPath from "../normalized-path.mjs";
|
|
13
13
|
import visitSegment from "./visitors/segment.mjs";
|
|
14
14
|
import JSONEvaluationRealm from "./realms/json/index.mjs";
|
|
15
|
+
import JSONPathParseError from "../errors/JSONPathParseError.mjs";
|
|
15
16
|
import JSONPathEvaluateError from "../errors/JSONPathEvaluateError.mjs";
|
|
16
17
|
import * as defaultFunctions from "./functions/index.mjs";
|
|
17
18
|
/**
|
|
@@ -22,6 +23,8 @@ import * as defaultFunctions from "./functions/index.mjs";
|
|
|
22
23
|
* Default is JSONEvaluationRealm for plain objects/arrays.
|
|
23
24
|
* @property {Object} [functions] - Optional custom function registry.
|
|
24
25
|
* Can extend or override built-in functions (length, count, match, search, value).
|
|
26
|
+
* @property {boolean} [trace=true] - Enable parser tracing for detailed error messages.
|
|
27
|
+
* When true, syntax errors include position and expected tokens.
|
|
25
28
|
*/
|
|
26
29
|
/**
|
|
27
30
|
* Evaluate a JSONPath expression against a value.
|
|
@@ -30,7 +33,8 @@ import * as defaultFunctions from "./functions/index.mjs";
|
|
|
30
33
|
* @param {string} expression - JSONPath expression
|
|
31
34
|
* @param {EvaluateOptions} [options] - Evaluation options
|
|
32
35
|
* @returns {unknown[]} - Array of matched values
|
|
33
|
-
* @throws {
|
|
36
|
+
* @throws {JSONPathParseError} If the expression is invalid (syntax or semantic error)
|
|
37
|
+
* @throws {JSONPathEvaluateError} If an unexpected error occurs during evaluation
|
|
34
38
|
*
|
|
35
39
|
* @example
|
|
36
40
|
* // Simple query
|
|
@@ -52,21 +56,29 @@ import * as defaultFunctions from "./functions/index.mjs";
|
|
|
52
56
|
const evaluate = (value, expression, {
|
|
53
57
|
callback,
|
|
54
58
|
realm = new JSONEvaluationRealm(),
|
|
55
|
-
functions = defaultFunctions
|
|
59
|
+
functions = defaultFunctions,
|
|
60
|
+
trace = true
|
|
56
61
|
} = {}) => {
|
|
57
|
-
// Parse the expression
|
|
58
|
-
const
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
+
// Parse the expression with trace enabled for better error messages
|
|
63
|
+
const {
|
|
64
|
+
result,
|
|
65
|
+
trace: parseTrace,
|
|
66
|
+
tree
|
|
67
|
+
} = parse(expression, {
|
|
68
|
+
trace: !!trace
|
|
69
|
+
});
|
|
70
|
+
if (!result.success) {
|
|
71
|
+
let message = `Invalid JSONPath expression: "${expression}". Syntax error at position ${result.maxMatched}`;
|
|
72
|
+
message += parseTrace ? `, expected ${parseTrace.inferExpectations()}` : '';
|
|
73
|
+
throw new JSONPathParseError(message, {
|
|
74
|
+
jsonPath: expression
|
|
62
75
|
});
|
|
63
76
|
}
|
|
64
77
|
try {
|
|
65
78
|
// The tree is the AST root directly (JsonPathQuery node)
|
|
66
|
-
const ast = parseResult.tree;
|
|
67
79
|
const {
|
|
68
80
|
segments
|
|
69
|
-
} =
|
|
81
|
+
} = tree;
|
|
70
82
|
const results = [];
|
|
71
83
|
|
|
72
84
|
// Handle empty query ($ with no segments)
|
package/package.json
CHANGED
package/types/index.d.ts
CHANGED
|
@@ -279,6 +279,12 @@ export interface EvaluateOptions {
|
|
|
279
279
|
* Can extend or override built-in functions.
|
|
280
280
|
*/
|
|
281
281
|
readonly functions?: Record<string, Function>;
|
|
282
|
+
/**
|
|
283
|
+
* Enable parser tracing for detailed error messages.
|
|
284
|
+
* When true, syntax errors include position and expected tokens.
|
|
285
|
+
* @default true
|
|
286
|
+
*/
|
|
287
|
+
readonly trace?: boolean;
|
|
282
288
|
}
|
|
283
289
|
|
|
284
290
|
/**
|