1 | "use strict";
|
---|
2 |
|
---|
3 | var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
---|
4 | exports.__esModule = true;
|
---|
5 | exports.default = void 0;
|
---|
6 | var _ramdaAdjunct = require("ramda-adjunct");
|
---|
7 | var _apidomCore = require("@swagger-api/apidom-core");
|
---|
8 | var _parse = _interopRequireDefault(require("./parse.cjs"));
|
---|
9 | var _EvaluationJsonPointerError = _interopRequireDefault(require("./errors/EvaluationJsonPointerError.cjs"));
|
---|
10 | // evaluates JSON Pointer against ApiDOM fragment
|
---|
11 | const evaluate = (pointer, element) => {
|
---|
12 | let tokens;
|
---|
13 | try {
|
---|
14 | tokens = (0, _parse.default)(pointer);
|
---|
15 | } catch (error) {
|
---|
16 | throw new _EvaluationJsonPointerError.default(`JSON Pointer evaluation failed while parsing the pointer "${pointer}".`, {
|
---|
17 | pointer,
|
---|
18 | element: (0, _apidomCore.cloneDeep)(element),
|
---|
19 | cause: error
|
---|
20 | });
|
---|
21 | }
|
---|
22 | return tokens.reduce((acc, token, tokenPosition) => {
|
---|
23 | if ((0, _apidomCore.isObjectElement)(acc)) {
|
---|
24 | // @ts-ignore
|
---|
25 | if (!acc.hasKey(token)) {
|
---|
26 | throw new _EvaluationJsonPointerError.default(`JSON Pointer evaluation failed while evaluating token "${token}" against an ObjectElement`, {
|
---|
27 | pointer,
|
---|
28 | tokens,
|
---|
29 | failedToken: token,
|
---|
30 | failedTokenPosition: tokenPosition,
|
---|
31 | element: (0, _apidomCore.cloneDeep)(acc)
|
---|
32 | });
|
---|
33 | }
|
---|
34 | // @ts-ignore
|
---|
35 | return acc.get(token);
|
---|
36 | }
|
---|
37 | if ((0, _apidomCore.isArrayElement)(acc)) {
|
---|
38 | if (!(token in acc.content) || !(0, _ramdaAdjunct.isInteger)(Number(token))) {
|
---|
39 | throw new _EvaluationJsonPointerError.default(`JSON Pointer evaluation failed while evaluating token "${token}" against an ArrayElement`, {
|
---|
40 | pointer,
|
---|
41 | tokens,
|
---|
42 | failedToken: token,
|
---|
43 | failedTokenPosition: tokenPosition,
|
---|
44 | element: (0, _apidomCore.cloneDeep)(acc)
|
---|
45 | });
|
---|
46 | }
|
---|
47 | // @ts-ignore
|
---|
48 | return acc.get(Number(token));
|
---|
49 | }
|
---|
50 | throw new _EvaluationJsonPointerError.default(`JSON Pointer evaluation failed while evaluating token "${token}" against an unexpected Element`, {
|
---|
51 | pointer,
|
---|
52 | tokens,
|
---|
53 | failedToken: token,
|
---|
54 | failedTokenPosition: tokenPosition,
|
---|
55 | element: (0, _apidomCore.cloneDeep)(acc)
|
---|
56 | });
|
---|
57 | }, element);
|
---|
58 | };
|
---|
59 | var _default = exports.default = evaluate; |
---|