From 54e7b80c5e91470fa516237cd8c2798095d304b5 Mon Sep 17 00:00:00 2001 From: ardier16 Date: Tue, 12 Mar 2024 15:19:42 +0200 Subject: [PATCH 1/2] Fix createLink for root baseUrl --- packages/jac/src/response.test.ts | 18 +++++++++++++++--- packages/jac/src/response.ts | 18 +++++------------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/packages/jac/src/response.test.ts b/packages/jac/src/response.test.ts index 04656f33..2b3e72a0 100644 --- a/packages/jac/src/response.test.ts +++ b/packages/jac/src/response.test.ts @@ -67,13 +67,25 @@ describe('JsonApi response data parsing unit test', () => { apiClient: api, }) - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - expect(response.createLink(response.links.next)).toBe( + expect(response.createLink(response.links.next!)).toBe( '/meta-buy-orders?filter%5Bowner%5D=3d38fff3-847f-45f2-a267-891ba90dac37&include=meta_sell_order%2Cmeta_sell_order.token%2Cmeta_sell_order.token.metadata&page%5Blimit%5D=5&page%5Bnumber%5D=1&page%5Border%5D=desc', ) }) + test('should create correct link from response if link has no match with base URL', () => { + const { JsonApiClient } = jest.requireActual('./json-api') + + const response = parseJsonApiResponse({ + raw: MockWrapper.makeFetcherResponse(RAW_RESPONSE), + isNeedRaw: false, + apiClient: new JsonApiClient({ baseUrl: 'https://localhost:8095' }), + }) + + expect(response.createLink(response.links.next!)).toBe( + '/core/meta-buy-orders?filter%5Bowner%5D=3d38fff3-847f-45f2-a267-891ba90dac37&include=meta_sell_order%2Cmeta_sell_order.token%2Cmeta_sell_order.token.metadata&page%5Blimit%5D=5&page%5Bnumber%5D=1&page%5Border%5D=desc', + ) + }) + test('should return raw response', () => { const rawResponse = MockWrapper.makeFetcherResponse(RAW_RESPONSE) const response = parseJsonApiResponse({ diff --git a/packages/jac/src/response.ts b/packages/jac/src/response.ts index 275f3510..f0f33cef 100644 --- a/packages/jac/src/response.ts +++ b/packages/jac/src/response.ts @@ -120,21 +120,13 @@ export class JsonApiResponse { public createLink(link: Endpoint): Endpoint { const baseUrl = this.#apiClient?.baseUrl - if (!baseUrl) return link - let intersection = '' - - for (const char of link) { - if (baseUrl.endsWith(intersection + char)) { - intersection += char - break - } else { - intersection += char - } - } - - return link.replace(intersection, '') + const baseUrlPath = new URL(baseUrl).pathname + // Do not remove leading slash if baseUrl is root + return baseUrlPath === '/' + ? link + : link.replace(new RegExp(`^${baseUrlPath}`), '') } public async fetchPage( From dd57f7814234ce4c4ff6224c9eb8e5a578cbe9ed Mon Sep 17 00:00:00 2001 From: ardier16 Date: Tue, 12 Mar 2024 15:29:10 +0200 Subject: [PATCH 2/2] Update changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b07b4d97..949f6617 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +### Fixed +- `@distributedlab/jac` - `JsonApiResponse.createLink` method to handle client `baseUrl` with root path ## [1.0.0-rc.13] - 2024-03-02 ### Changed