@hyperjump/browser
Advanced tools
Comparing version 0.9.1 to 0.9.2
@@ -6,2 +6,3 @@ const makeFetchHappen = require("make-fetch-happen"); | ||
const construct = (url, headers, body) => Object.freeze({ url, headers, body }); | ||
const extend = (doc, extras) => Object.freeze({ ...doc, ...extras }); | ||
@@ -15,3 +16,6 @@ const nil = construct("", {}, undefined); | ||
if (uriReference(doc.url) === uriReference(resolvedUrl)) { | ||
result = construct(resolvedUrl, doc.headers, doc.body); | ||
result = extend(doc, { url: resolvedUrl }); | ||
} else if (doc.embedded && uriReference(resolvedUrl) in doc.embedded) { | ||
const headers = { "content-type": doc.headers["content-type"] }; | ||
result = construct(resolvedUrl, headers, doc.embedded[resolvedUrl]); | ||
} else { | ||
@@ -43,2 +47,2 @@ const response = await fetch(resolvedUrl, options); | ||
module.exports = { construct, nil, get, source, addContentType }; | ||
module.exports = { construct, extend, nil, get, source, addContentType }; |
@@ -10,15 +10,21 @@ const JsonPointer = require("@hyperjump/json-pointer"); | ||
const contentTypeHandler = async (doc, options) => { | ||
let jsonDoc = await Json.contentTypeHandler(doc, options); | ||
let docValue = value(jsonDoc); | ||
const jrefDoc = (!("jref" in doc)) ? Hyperjump.extend(doc, parse(doc)) : doc; | ||
const docValue = value(jrefDoc); | ||
return isRef(docValue) ? await get(docValue["$ref"], jrefDoc, options) : jrefDoc; | ||
}; | ||
if (isId(docValue)) { | ||
const id = docValue["$id"]; | ||
delete docValue["$id"]; | ||
// TODO: Cache embedded document. I'll probably need to implement my own HTTP Cache for this. | ||
const headers = { "content-type": jsonDoc.headers["content-type"] }; | ||
jsonDoc = Hyperjump.construct(id, headers, JSON.stringify(docValue)); | ||
docValue = value(jsonDoc); | ||
} | ||
const parse = (doc) => { | ||
const embedded = {}; | ||
const jref = JSON.parse(Hyperjump.source(doc), (key, value) => { | ||
if (isId(value)) { | ||
const id = uriReference(value["$id"]); | ||
delete value["$id"]; | ||
embedded[id] = JSON.stringify(value); | ||
return { "$ref": id }; | ||
} else { | ||
return value; | ||
} | ||
}); | ||
return isRef(docValue) ? await get(docValue["$ref"], jsonDoc, options) : jsonDoc; | ||
return { jref, embedded }; | ||
}; | ||
@@ -37,3 +43,3 @@ | ||
const value = (doc) => JsonPointer.get(pointer(doc), Json.value(doc)); | ||
const value = (doc) => JsonPointer.get(pointer(doc), doc.jref); | ||
@@ -69,2 +75,3 @@ const pointer = (doc) => decodeURIComponent(uriFragment(doc.url)); | ||
const uriFragment = (url) => url.split("#", 2)[1] || ""; | ||
const uriReference = (url) => url.split("#", 1)[0]; | ||
const isObject = (value) => typeof value === "object" && !Array.isArray(value) && value !== null; | ||
@@ -71,0 +78,0 @@ const isRef = (value) => isObject(value) && "$ref" in value; |
{ | ||
"name": "@hyperjump/browser", | ||
"version": "0.9.1", | ||
"version": "0.9.2", | ||
"description": "A generic hypermedia client for JSON Reference", | ||
@@ -5,0 +5,0 @@ "scripts": { |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
24308
114