Skip to content

Commit 1802b8b

Browse files
committed
feat: add better handlnig
1 parent 980fe79 commit 1802b8b

File tree

5 files changed

+19
-6
lines changed

5 files changed

+19
-6
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,7 @@ URIFragmentIdentifier.from('#/foo%22bar'); // => '/foo"bar'
356356
#### Errors
357357

358358
`@swaggerexpert/json-pointer` provides a structured error class hierarchy,
359-
enabling precise error handling across JSON Pointer operations, including parsing, evaluation and compilation and validation.
359+
enabling precise error handling across JSON Pointer operations, including parsing, evaluation ,compilation and validation.
360360

361361
```js
362362
import {

src/compile.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,14 @@ const compile = (referenceTokens) => {
77
return '';
88
}
99

10-
return `/${referenceTokens.map(escape).join('/')}`;
10+
return `/${referenceTokens
11+
.map((referenceToken) => {
12+
if (typeof referenceToken !== 'string' && typeof referenceToken !== 'number') {
13+
throw new TypeError('Reference token must be a string or number');
14+
}
15+
return escape(String(referenceToken));
16+
})
17+
.join('/')}`;
1118
} catch (error) {
1219
throw new JSONPointerCompileError('Unknown error during JSON Pointer compilation', {
1320
cause: error,

src/errors/JSONPointerTypeError.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@ import JSONPointerEvaluateError from './JSONPointerEvaluateError.js';
22

33
class JSONPointerTypeError extends JSONPointerEvaluateError {
44
constructor(referenceToken, options) {
5-
super(`Invalid reference token: '${referenceToken}' (not an object/array)`, options);
5+
super(
6+
`Reference token '${referenceToken}' cannot be applied to non object/array value)`,
7+
options,
8+
);
69
}
710
}
811

src/escape.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
const escape = (referenceToken) => {
2-
return referenceToken.replace(/~/g, '~0').replace(/\//g, '~1');
2+
if (typeof referenceToken !== 'string' && typeof referenceToken !== 'number') {
3+
throw new TypeError('Reference token must be a string or number');
4+
}
5+
6+
return String(referenceToken).replace(/~/g, '~0').replace(/\//g, '~1');
37
};
48

59
export default escape;

src/representation/uri-fragment-identifier.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,8 @@ export const to = (jsonPointer) => {
99
};
1010

1111
export const from = (fragment) => {
12-
const rfc3986Fragment = fragment.startsWith('#') ? fragment.slice(1) : fragment;
13-
1412
try {
13+
const rfc3986Fragment = fragment.startsWith('#') ? fragment.slice(1) : fragment;
1514
return decodeURIComponent(rfc3986Fragment);
1615
} catch {
1716
return fragment;

0 commit comments

Comments
 (0)