@swagger-api/apidom-json-pointer 0.74.1 → 0.76.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.
package/CHANGELOG.md CHANGED
@@ -3,46 +3,39 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
- ## [0.74.1](https://github.com/swagger-api/apidom/compare/v0.74.0...v0.74.1) (2023-07-28)
6
+ # [0.76.0](https://github.com/swagger-api/apidom/compare/v0.75.0...v0.76.0) (2023-09-01)
7
7
 
8
- **Note:** Version bump only for package @swagger-api/apidom-json-pointer
8
+ ### Features
9
9
 
10
+ - **json-path:** use error hierarchy and metadata when throwing errors ([#3107](https://github.com/swagger-api/apidom/issues/3107)) ([d55a846](https://github.com/swagger-api/apidom/commit/d55a8466de9814f19aedbacb48c55761f2f3fe38)), closes [#3039](https://github.com/swagger-api/apidom/issues/3039)
11
+ - **json-pointer:** use error hierarchy and metadata when throwing errors ([#3106](https://github.com/swagger-api/apidom/issues/3106)) ([a17f250](https://github.com/swagger-api/apidom/commit/a17f25052db0d83f1ac3fcea94f2e58b50105df8)), closes [#3039](https://github.com/swagger-api/apidom/issues/3039)
10
12
 
13
+ # [0.75.0](https://github.com/swagger-api/apidom/compare/v0.74.1...v0.75.0) (2023-08-22)
11
14
 
15
+ ### Features
12
16
 
17
+ - add support for Relative JSON Pointer ([#3031](https://github.com/swagger-api/apidom/issues/3031)) ([f537584](https://github.com/swagger-api/apidom/commit/f537584adc4559f682e2a5995b2419b043ad71c5)), closes [#3030](https://github.com/swagger-api/apidom/issues/3030)
13
18
 
14
- # [0.74.0](https://github.com/swagger-api/apidom/compare/v0.73.0...v0.74.0) (2023-07-24)
19
+ ## [0.74.1](https://github.com/swagger-api/apidom/compare/v0.74.0...v0.74.1) (2023-07-28)
15
20
 
16
21
  **Note:** Version bump only for package @swagger-api/apidom-json-pointer
17
22
 
23
+ # [0.74.0](https://github.com/swagger-api/apidom/compare/v0.73.0...v0.74.0) (2023-07-24)
18
24
 
19
-
20
-
25
+ **Note:** Version bump only for package @swagger-api/apidom-json-pointer
21
26
 
22
27
  # [0.73.0](https://github.com/swagger-api/apidom/compare/v0.72.0...v0.73.0) (2023-07-18)
23
28
 
24
29
  **Note:** Version bump only for package @swagger-api/apidom-json-pointer
25
30
 
26
-
27
-
28
-
29
-
30
31
  # [0.72.0](https://github.com/swagger-api/apidom/compare/v0.71.1...v0.72.0) (2023-07-17)
31
32
 
32
33
  **Note:** Version bump only for package @swagger-api/apidom-json-pointer
33
34
 
34
-
35
-
36
-
37
-
38
35
  # [0.71.0](https://github.com/swagger-api/apidom/compare/v0.70.4...v0.71.0) (2023-07-13)
39
36
 
40
37
  **Note:** Version bump only for package @swagger-api/apidom-json-pointer
41
38
 
42
-
43
-
44
-
45
-
46
39
  ## [0.70.1](https://github.com/swagger-api/apidom/compare/v0.70.0...v0.70.1) (2023-06-15)
47
40
 
48
41
  **Note:** Version bump only for package @swagger-api/apidom-json-pointer
package/NOTICE CHANGED
@@ -38,7 +38,7 @@ Copyright (c) 2012 James Halliday, Josh Duff, and other contributors
38
38
  - File packages/apidom-core/src/deepmerge.ts contains algorithms that we originally created
39
39
  in https://github.com/TehShrike/deepmerge/blob/master/index.js to handle deep merging of JavaScript Objects and Arrays.
40
40
  These algorithms have been reverse engineered and adapted to support deep merging of ApiDOM structures.
41
- - File packages/apidom-core/test/deepmerge.ts contains tests and fixtures that we originally created
41
+ - File packages/apidom-core/test/deepmerge.ts contains tests and fixtures that were originally created
42
42
  in https://github.com/TehShrike/deepmerge/blob/master/test/merge.js to test deep merging of JavaScript Objects and Arrays.
43
43
  These tests have been adapted to support testing deep merging of ApiDOM structures.
44
44
  - File packages/apidom-core/README.md contains text fragments that were originally created
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
4
+ exports.__esModule = true;
5
+ exports.default = void 0;
6
+ var _escape = _interopRequireDefault(require("./escape.cjs"));
7
+ var _CompilationJsonPointerError = _interopRequireDefault(require("./errors/CompilationJsonPointerError.cjs"));
8
+ // compile :: String[] -> String
9
+ const compile = tokens => {
10
+ try {
11
+ if (tokens.length === 0) {
12
+ return '';
13
+ }
14
+ return `/${tokens.map(_escape.default).join('/')}`;
15
+ } catch (error) {
16
+ throw new _CompilationJsonPointerError.default('JSON Pointer compilation of tokens encountered an error.', {
17
+ tokens,
18
+ cause: error
19
+ });
20
+ }
21
+ };
22
+ var _default = compile;
23
+ exports.default = _default;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
4
+ exports.__esModule = true;
5
+ exports.default = void 0;
6
+ var _JsonPointerError = _interopRequireDefault(require("./JsonPointerError.cjs"));
7
+ class CompilationJsonPointerError extends _JsonPointerError.default {
8
+ constructor(message, structuredOptions) {
9
+ super(message, structuredOptions);
10
+ if (typeof structuredOptions !== 'undefined') {
11
+ this.tokens = [...structuredOptions.tokens];
12
+ }
13
+ }
14
+ }
15
+ var _default = CompilationJsonPointerError;
16
+ exports.default = _default;
@@ -1,17 +1,26 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
3
4
  exports.__esModule = true;
4
5
  exports.default = void 0;
5
- class EvaluationJsonPointerError extends Error {
6
- constructor(message) {
7
- super(message);
8
- this.name = this.constructor.name;
9
- this.message = message;
10
- if (typeof Error.captureStackTrace === 'function') {
11
- Error.captureStackTrace(this, this.constructor);
12
- } else {
13
- this.stack = new Error(message).stack;
6
+ var _apidomCore = require("@swagger-api/apidom-core");
7
+ var _JsonPointerError = _interopRequireDefault(require("./JsonPointerError.cjs"));
8
+ class EvaluationJsonPointerError extends _JsonPointerError.default {
9
+ constructor(message, structuredOptions) {
10
+ super(message, structuredOptions);
11
+ if (typeof structuredOptions !== 'undefined') {
12
+ this.pointer = structuredOptions.pointer;
13
+ if (Array.isArray(structuredOptions.tokens)) {
14
+ this.tokens = [...structuredOptions.tokens];
15
+ }
16
+ this.failedToken = structuredOptions.failedToken;
17
+ this.failedTokenPosition = structuredOptions.failedTokenPosition;
18
+ this.element = structuredOptions.element.element;
19
+ if ((0, _apidomCore.hasElementSourceMap)(structuredOptions.element)) {
20
+ this.elementSourceMap = (0, _apidomCore.toValue)(structuredOptions.element.getMetaProperty('sourceMap'));
21
+ }
14
22
  }
15
23
  }
16
24
  }
17
- exports.default = EvaluationJsonPointerError;
25
+ var _default = EvaluationJsonPointerError;
26
+ exports.default = _default;
@@ -1,17 +1,16 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
3
4
  exports.__esModule = true;
4
5
  exports.default = void 0;
5
- class InvalidJsonPointerError extends Error {
6
- constructor(pointer) {
7
- super(`Invalid $ref pointer "${pointer}". Pointers must begin with "/"`);
8
- this.name = this.constructor.name;
9
- this.message = `Invalid $ref pointer "${pointer}". Pointers must begin with "/"`;
10
- if (typeof Error.captureStackTrace === 'function') {
11
- Error.captureStackTrace(this, this.constructor);
12
- } else {
13
- this.stack = new Error(`Invalid $ref pointer "${pointer}". Pointers must begin with "/"`).stack;
6
+ var _JsonPointerError = _interopRequireDefault(require("./JsonPointerError.cjs"));
7
+ class InvalidJsonPointerError extends _JsonPointerError.default {
8
+ constructor(message, structuredOptions) {
9
+ super(message, structuredOptions);
10
+ if (typeof structuredOptions !== 'undefined') {
11
+ this.pointer = structuredOptions.pointer;
14
12
  }
15
13
  }
16
14
  }
17
- exports.default = InvalidJsonPointerError;
15
+ var _default = InvalidJsonPointerError;
16
+ exports.default = _default;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.default = void 0;
5
+ var _apidomError = require("@swagger-api/apidom-error");
6
+ class JsonPointerError extends _apidomError.ApiDOMStructuredError {}
7
+ var _default = JsonPointerError;
8
+ exports.default = _default;
package/cjs/escape.cjs ADDED
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.default = void 0;
5
+ var _ramda = require("ramda");
6
+ // escape :: String -> String
7
+ const escape = (0, _ramda.pipe)((0, _ramda.replace)(/~/g, '~0'), (0, _ramda.replace)(/\//g, '~1'), encodeURIComponent);
8
+ var _default = escape;
9
+ exports.default = _default;
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
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,
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: 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: 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: acc
56
+ });
57
+ }, element);
58
+ };
59
+ var _default = evaluate;
60
+ exports.default = _default;
package/cjs/index.cjs CHANGED
@@ -1,96 +1,26 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
3
4
  exports.__esModule = true;
4
- exports.uriToPointer = exports.unescape = exports.parse = exports.evaluate = exports.escape = exports.compile = void 0;
5
- var _ramda = require("ramda");
6
- var _ramdaAdjunct = require("ramda-adjunct");
7
- var _apidomCore = require("@swagger-api/apidom-core");
8
- var _index = require("./errors/index.cjs");
9
- exports.InvalidJsonPointerError = _index.InvalidJsonPointerError;
10
- exports.EvaluationJsonPointerError = _index.EvaluationJsonPointerError;
11
- /**
12
- * decodeURIComponent can throw URIError in certain cases like 'c%d'.
13
- * safeDecodeURIComponent is a safe variant of decodeURIComponent that never trows.
14
- *
15
- * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Malformed_URI|More info about URIError}
16
- */
17
- const safeDecodeURIComponent = encodedURIComponent => {
18
- try {
19
- return decodeURIComponent(encodedURIComponent);
20
- } catch {
21
- return encodedURIComponent;
22
- }
23
- };
24
-
25
- // escape :: String -> String
26
- const escape = (0, _ramda.pipe)((0, _ramda.replace)(/~/g, '~0'), (0, _ramda.replace)(/\//g, '~1'), encodeURIComponent);
27
-
28
- // unescape :: String -> String
29
- exports.escape = escape;
30
- const unescape = (0, _ramda.pipe)((0, _ramda.replace)(/~1/g, '/'), (0, _ramda.replace)(/~0/g, '~'), safeDecodeURIComponent);
31
-
32
- // parse :: String -> String[]
33
- exports.unescape = unescape;
34
- const parse = pointer => {
35
- if ((0, _ramdaAdjunct.isEmptyString)(pointer)) {
36
- return [];
37
- }
38
- if (!(0, _ramda.startsWith)('/', pointer)) {
39
- throw new _index.InvalidJsonPointerError(pointer);
40
- }
41
- const tokens = (0, _ramda.pipe)((0, _ramda.split)('/'), (0, _ramda.map)(unescape))(pointer);
42
- return (0, _ramda.tail)(tokens);
43
- };
44
-
45
- // compile :: String[] -> String
46
- exports.parse = parse;
47
- const compile = tokens => {
48
- if (tokens.length === 0) {
49
- return '';
50
- }
51
- return `/${tokens.map(escape).join('/')}`;
52
- };
53
-
54
- // evaluates JSON Pointer against ApiDOM fragment
55
- exports.compile = compile;
56
- const evaluate = (pointer, element) => {
57
- const tokens = parse(pointer);
58
- return tokens.reduce((acc, token) => {
59
- if ((0, _apidomCore.isObjectElement)(acc)) {
60
- // @ts-ignore
61
- if (!acc.hasKey(token)) {
62
- throw new _index.EvaluationJsonPointerError(`Evaluation failed on token: "${token}"`);
63
- }
64
- // @ts-ignore
65
- return acc.get(token);
66
- }
67
- if ((0, _apidomCore.isArrayElement)(acc)) {
68
- if (!(token in acc.content) || !(0, _ramdaAdjunct.isInteger)(Number(token))) {
69
- throw new _index.EvaluationJsonPointerError(`Evaluation failed on token: "${token}"`);
70
- }
71
- // @ts-ignore
72
- return acc.get(Number(token));
73
- }
74
- throw new _index.EvaluationJsonPointerError(`Evaluation failed on token: "${token}"`);
75
- }, element);
76
- };
77
-
78
- /**
79
- * Returns the hash (URL fragment), of the given path.
80
- * If there is no hash, then the root hash ("#") is returned.
81
- */
82
- exports.evaluate = evaluate;
83
- const getHash = uri => {
84
- const hashIndex = uri.indexOf('#');
85
- if (hashIndex !== -1) {
86
- return uri.substring(hashIndex);
87
- }
88
- return '#';
89
- };
90
-
91
- // uriToPointer :: String -> String
92
- const uriToPointer = uri => {
93
- const hash = getHash(uri);
94
- return (0, _ramdaAdjunct.trimCharsStart)('#', hash);
95
- };
96
- exports.uriToPointer = uriToPointer;
5
+ exports.uriToPointer = exports.unescape = exports.parse = exports.evaluate = exports.escape = exports.compile = exports.JsonPointerError = exports.InvalidJsonPointerError = exports.EvaluationJsonPointerError = exports.CompilationJsonPointerError = void 0;
6
+ var _JsonPointerError = _interopRequireDefault(require("./errors/JsonPointerError.cjs"));
7
+ exports.JsonPointerError = _JsonPointerError.default;
8
+ var _InvalidJsonPointerError = _interopRequireDefault(require("./errors/InvalidJsonPointerError.cjs"));
9
+ exports.InvalidJsonPointerError = _InvalidJsonPointerError.default;
10
+ var _CompilationJsonPointerError = _interopRequireDefault(require("./errors/CompilationJsonPointerError.cjs"));
11
+ exports.CompilationJsonPointerError = _CompilationJsonPointerError.default;
12
+ var _EvaluationJsonPointerError = _interopRequireDefault(require("./errors/EvaluationJsonPointerError.cjs"));
13
+ exports.EvaluationJsonPointerError = _EvaluationJsonPointerError.default;
14
+ var _escape = _interopRequireDefault(require("./escape.cjs"));
15
+ exports.escape = _escape.default;
16
+ var _unescape = _interopRequireDefault(require("./unescape.cjs"));
17
+ exports.unescape = _unescape.default;
18
+ var _parse = _interopRequireWildcard(require("./parse.cjs"));
19
+ exports.parse = _parse.default;
20
+ exports.uriToPointer = _parse.uriToPointer;
21
+ var _compile = _interopRequireDefault(require("./compile.cjs"));
22
+ exports.compile = _compile.default;
23
+ var _evaluate = _interopRequireDefault(require("./evaluate.cjs"));
24
+ exports.evaluate = _evaluate.default;
25
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
26
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
package/cjs/parse.cjs ADDED
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
4
+ exports.__esModule = true;
5
+ exports.uriToPointer = exports.default = void 0;
6
+ var _ramda = require("ramda");
7
+ var _ramdaAdjunct = require("ramda-adjunct");
8
+ var _unescape = _interopRequireDefault(require("./unescape.cjs"));
9
+ var _InvalidJsonPointerError = _interopRequireDefault(require("./errors/InvalidJsonPointerError.cjs"));
10
+ // parse :: String -> String[]
11
+ const parse = pointer => {
12
+ if ((0, _ramdaAdjunct.isEmptyString)(pointer)) {
13
+ return [];
14
+ }
15
+ if (!(0, _ramda.startsWith)('/', pointer)) {
16
+ throw new _InvalidJsonPointerError.default(`Invalid JSON Pointer "${pointer}". JSON Pointers must begin with "/"`, {
17
+ pointer
18
+ });
19
+ }
20
+ try {
21
+ const tokens = (0, _ramda.pipe)((0, _ramda.split)('/'), (0, _ramda.map)(_unescape.default))(pointer);
22
+ return (0, _ramda.tail)(tokens);
23
+ } catch (error) {
24
+ throw new _InvalidJsonPointerError.default(`JSON Pointer parsing of "${pointer}" encountered an error.`, {
25
+ pointer,
26
+ cause: error
27
+ });
28
+ }
29
+ };
30
+
31
+ /**
32
+ * Returns the hash (URL fragment), of the given path.
33
+ * If there is no hash, then the root hash ("#") is returned.
34
+ */
35
+ const getHash = uri => {
36
+ const hashIndex = uri.indexOf('#');
37
+ if (hashIndex !== -1) {
38
+ return uri.substring(hashIndex);
39
+ }
40
+ return '#';
41
+ };
42
+
43
+ // uriToPointer :: String -> String
44
+ const uriToPointer = uri => {
45
+ const hash = getHash(uri);
46
+ return (0, _ramdaAdjunct.trimCharsStart)('#', hash);
47
+ };
48
+ exports.uriToPointer = uriToPointer;
49
+ var _default = parse;
50
+ exports.default = _default;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.default = void 0;
5
+ var _ramda = require("ramda");
6
+ /**
7
+ * decodeURIComponent can throw URIError in certain cases like 'c%d'.
8
+ * safeDecodeURIComponent is a safe variant of decodeURIComponent that never trows.
9
+ *
10
+ * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Malformed_URI|More info about URIError}
11
+ */
12
+ const safeDecodeURIComponent = encodedURIComponent => {
13
+ try {
14
+ return decodeURIComponent(encodedURIComponent);
15
+ } catch {
16
+ return encodedURIComponent;
17
+ }
18
+ };
19
+
20
+ // unescape :: String -> String
21
+ const unescape = (0, _ramda.pipe)((0, _ramda.replace)(/~1/g, '/'), (0, _ramda.replace)(/~0/g, '~'), safeDecodeURIComponent);
22
+ var _default = unescape;
23
+ exports.default = _default;