From ae00a5384b716fa71af427c4f1445d5369f57ede Mon Sep 17 00:00:00 2001 From: Matthias Windisch Date: Tue, 5 Dec 2023 13:01:32 +0100 Subject: [PATCH 1/2] #1 fixed recursive reference error --- src/refs.interceptor.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/refs.interceptor.ts b/src/refs.interceptor.ts index c26310b..b70b688 100644 --- a/src/refs.interceptor.ts +++ b/src/refs.interceptor.ts @@ -66,6 +66,7 @@ export class RefsInterceptor implements HttpInterceptor { } else if ('$id' in obj) { const id = obj.$id; delete obj.$id; + byid[id] = obj; if ('$values' in obj) { // an array obj = obj.$values.map(recurse); } @@ -75,7 +76,6 @@ export class RefsInterceptor implements HttpInterceptor { obj[prop2] = recurse(obj[prop2], prop2, obj); } } - byid[id] = obj; } return obj; })(json); // run it! From d0b3c5a126c098af7486a9aa9ac4d813d57796a2 Mon Sep 17 00:00:00 2001 From: Matthias Windisch Date: Tue, 5 Dec 2023 13:16:13 +0100 Subject: [PATCH 2/2] #2 fixed token error --- src/refs.interceptor.ts | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/refs.interceptor.ts b/src/refs.interceptor.ts index b70b688..442f037 100644 --- a/src/refs.interceptor.ts +++ b/src/refs.interceptor.ts @@ -6,7 +6,7 @@ import { HttpResponse } from '@angular/common/http'; import { Observable } from 'rxjs'; -import { map } from 'rxjs/operators'; +import { filter, map } from 'rxjs/operators'; import * as JSPON from 'jspon'; export class RefsInterceptor implements HttpInterceptor { @@ -66,7 +66,6 @@ export class RefsInterceptor implements HttpInterceptor { } else if ('$id' in obj) { const id = obj.$id; delete obj.$id; - byid[id] = obj; if ('$values' in obj) { // an array obj = obj.$values.map(recurse); } @@ -76,6 +75,7 @@ export class RefsInterceptor implements HttpInterceptor { obj[prop2] = recurse(obj[prop2], prop2, obj); } } + byid[id] = obj; } return obj; })(json); // run it! @@ -88,16 +88,21 @@ export class RefsInterceptor implements HttpInterceptor { } public intercept(req: HttpRequest, next: HttpHandler): Observable> { - return next.handle(RefsInterceptor.generateReferencesRequest(req)).pipe( - map(event => { - // Cannot use instanceof because types from this package do not equal the types of the user - // tslint:disable-next-line: no-string-literal - if (event['status']) { - event = (event as HttpResponse).clone({ - body: RefsInterceptor.resolveReferences((event as HttpResponse).body) - }); + if (req.body && typeof req.body !== 'string' && !(req.body instanceof FormData)) { + req = req.clone({ + body: RefsInterceptor.generateReferences(req.body), + setHeaders: { 'Content-Type': 'application/json' }, + }); + } + + return next.handle(req).pipe( + filter(event => event instanceof HttpResponse), + map((event: HttpResponse) => { + if (typeof event.body == 'object') { + return event.clone({ body: RefsInterceptor.resolveReferences(event.body) }) + } else { + return event; } - return event; }) ); }