Skip to content

Commit 2108213

Browse files
committed
Add location the JSON nodes
1 parent ee294fa commit 2108213

11 files changed

+155
-88
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
"vitest": "*"
4646
},
4747
"dependencies": {
48+
"@hyperjump/json-pointer": "^1.1.1",
4849
"@hyperjump/uri": "^1.3.0",
4950
"content-type": "^1.0.5",
5051
"moo": "^0.5.2",

src/hyperjump/hyperjump.d.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { JsonNode } from "../json/jsonast.d.ts";
2-
import type { JrefNode } from "../jref/jref-ast.d.ts";
2+
import type { JrefNode, JrefJrefNode } from "../jref/jref-ast.d.ts";
33
import type { UriSchemePlugin } from "./uri-schemes/uri-scheme-plugin.d.ts";
44
import type { DocumentNode, MediaTypePlugin } from "./media-types/media-type-plugin.d.ts";
55
import type { jsonObjectHas, jsonObjectKeys, jsonValue } from "../json/jsonast-util.js";
@@ -11,7 +11,8 @@ export type GetOptions = {
1111
referencedFrom?: string;
1212
};
1313

14-
export class Hyperjump<T extends JrefNode = JrefNode> {
14+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
15+
export class Hyperjump<T extends JrefNode<any> = JrefJrefNode> {
1516
constructor(config?: HyperjumpConfig);
1617

1718
/**
@@ -29,7 +30,7 @@ export class Hyperjump<T extends JrefNode = JrefNode> {
2930
* @throws {@link RetrievalError}
3031
* @throws {@link json.JsonPointerError}
3132
*/
32-
get: (uri: string, options?: GetOptions) => Promise<JsonNode<T>>;
33+
get: (uri: string, options?: GetOptions) => Promise<T & JsonNode<T>>;
3334

3435
/**
3536
* Add support for a
@@ -93,27 +94,27 @@ export class Hyperjump<T extends JrefNode = JrefNode> {
9394
* This is like indexing into an object or array. It will follow any
9495
* references it encounters so it always returns a JSON compatible value.
9596
*/
96-
step: (key: string, node: JsonNode<T>) => Promise<JsonNode<T>>;
97+
step: (key: string, node: JsonNode<T>) => Promise<T & JsonNode<T>>;
9798

9899
/**
99100
* Iterate over an array node. It will follow any references it encounters so
100101
* it always yields JSON compatible values.
101102
*/
102-
iter: (node: JsonNode<T>) => AsyncGenerator<JsonNode<T>, void, unknown>;
103+
iter: (node: JsonNode<T>) => AsyncGenerator<T & JsonNode<T>, void, unknown>;
103104

104105
keys: typeof jsonObjectKeys;
105106

106107
/**
107108
* Iterate over the values of an object. It will follow any references it
108109
* encounters so it always yields JSON compatible values.
109110
*/
110-
values: (node: JsonNode<T>) => AsyncGenerator<JsonNode<T>, void, unknown>;
111+
values: (node: JsonNode<T>) => AsyncGenerator<T & JsonNode<T>, void, unknown>;
111112

112113
/**
113114
* Iterate over key/value pairs of an object. It will follow any references it
114115
* encounters so it always yields JSON compatible values.
115116
*/
116-
entries: (node: JsonNode<T>) => AsyncGenerator<[string, JsonNode<T>], void, unknown>;
117+
entries: (node: JsonNode<T>) => AsyncGenerator<[string, T & JsonNode<T>], void, unknown>;
117118
}
118119

119120
export class RetrievalError extends Error {

src/hyperjump/hyperjump.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ export class Hyperjump {
9999
/** @type (node: T) => Promise<JsonNode<T>> */
100100
async #followReferences(node) {
101101
if ("jrefType" in node) {
102-
return this.get(node.href, { referencedFrom: node.documentUri });
102+
return this.get(node.href, { referencedFrom: toAbsoluteIri(node.location) });
103103
} else {
104104
return /** @type JsonNode<T> */ (node);
105105
}

src/jref/jref-ast.d.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import {
1313
export interface JrefReferenceNode {
1414
jrefType: "jref-reference";
1515
href: string;
16-
documentUri: string;
1716
};
1817

1918
// eslint-disable-next-line @typescript-eslint/consistent-type-definitions

src/jref/jref-util.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,13 @@ const defaultReviver = (value) => value;
3737
* @type API.fromJref
3838
*/
3939
export const fromJref = (jref, uri, reviver = defaultReviver) => {
40-
return fromJson(jref, (node, key) => {
40+
return fromJson(jref, uri, (node, key) => {
4141
const jrefNode = /** @type JsonNode<JrefJrefNode> */ (node);
4242

4343
const returned = { uri: "" };
4444
if (isReference(jrefNode, returned)) {
4545
jrefNode.jrefType = "jref-reference";
4646
jrefNode.href = resolveIri(returned.uri, uri);
47-
jrefNode.documentUri = uri;
4847
}
4948

5049
node.type = "jref";

0 commit comments

Comments
 (0)