diff --git a/package.json b/package.json index 589225c..d53ef58 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,6 @@ "react-remarkable": "1.1.3", "react-schema-form": "0.6.2", "rxjs": "5.4.3", - "uri-js": "4.2.2", "uri-template": "1.0.1", "uuid": "3.3.2" }, diff --git a/src/stream-store/Viewer/HalViewer/components/JsonViewer.tsx b/src/stream-store/Viewer/HalViewer/components/JsonViewer.tsx index 6a09018..f22dbb0 100644 --- a/src/stream-store/Viewer/HalViewer/components/JsonViewer.tsx +++ b/src/stream-store/Viewer/HalViewer/components/JsonViewer.tsx @@ -7,7 +7,7 @@ import { connect, createState } from 'reactive'; import { Observable } from 'rxjs'; import rels from 'stream-store/rels'; import themes from 'themes'; -import { HalResource, NavigatableProps } from 'types'; +import { HalResource, HttpResponse, NavigatableProps } from 'types'; import uriTemplate from 'uri-template'; import { hal, http, reactJsonTheme } from 'utils'; @@ -81,7 +81,7 @@ class JsonViewer extends PureComponent< ); const responses = await Promise.all( - [...new Set([pattern, String(pattern).replace('-', '')])].map(p => + [...new Set([pattern, String(pattern).replace(/-/g, '')])].map(p => http.get({ headers: { authorization }, link: { @@ -91,16 +91,26 @@ class JsonViewer extends PureComponent< ), ); + const streams = this._getStreams(responses); + this.setState({ loading: false, - streams: Object.values( - responses.flatMap(({ body }) => - getStreamLinks(hal.normalizeResource(body as HalResource)), - ), - ), + streams, }); }; + _getStreams = (responses: HttpResponse[]) => + Object.values( + responses + .flatMap(({ body }) => + getStreamLinks(hal.normalizeResource(body as HalResource)), + ) + .map(({ _links, ...resource }) => ({ + ...resource, + _links: hal.resolveLinks('../../', _links), + })), + ); + _handlePotentialStreamIdClose = () => this.setState({ open: false, diff --git a/src/utils/hal.ts b/src/utils/hal.ts index 4bfe7f5..1c1790e 100644 --- a/src/utils/hal.ts +++ b/src/utils/hal.ts @@ -1,5 +1,5 @@ import { HalLink, HalLinks, HalResource } from 'types'; -import { resolve } from 'uri-js'; +import URL from 'url'; const resolveLinks = (url: string, links: HalLinks): HalLinks => Object.keys(links).reduce( @@ -7,7 +7,7 @@ const resolveLinks = (url: string, links: HalLinks): HalLinks => ...akk, [rel]: links[rel].map(({ href, ...link }) => ({ ...link, - href: resolve(url, href || './', { tolerant: true }), + href: URL.resolve(url, href || './'), rel, })), }), diff --git a/yarn.lock b/yarn.lock index 7151b4f..035a0fc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7740,7 +7740,7 @@ upper-case@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" -uri-js@4.2.2, uri-js@^4.2.2: +uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" dependencies: