@yaagoub/decorators
Version:
Angular decorators
39 lines • 6.33 kB
JavaScript
import { from, of, Observable } from 'rxjs';
import { catchError, switchMap } from "rxjs/operators";
export const responseHandlers = {
json: {
handle$: (res) => from(res.text()).pipe(switchMap(text => {
try {
return of(JSON.parse(text));
}
catch {
return of(text);
}
}), catchError(err => of({ error: "Failed to parse response", details: err?.message || err })))
},
text: { handle$: (res) => from(res.text()) },
blob: { handle$: (res) => from(res.blob()) },
arrayBuffer: { handle$: (res) => from(res.arrayBuffer()) },
formData: { handle$: (res) => from(res.formData()) },
stream: {
handle$: (res) => {
if (!res.body) {
throw new Error("Response body is null, cannot create stream");
}
return new Observable(subscriber => {
subscriber.next(res.body);
subscriber.complete();
});
}
},
xml: {
handle$: (res) => from(res.text()).pipe(switchMap(text => {
const parser = typeof DOMParser !== 'undefined'
? new DOMParser()
: new (require('xmldom').DOMParser)();
const xmlDoc = parser.parseFromString(text, "application/xml");
return of(xmlDoc);
}), catchError(err => of({ error: "Failed to parse XML response", details: err?.message || err })))
},
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UtaGFuZGxlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2RlY29yYXRvcnMvc3JjL2h0dHAvaGVscGVycy9yZXNwb25zZS1oYW5kbGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRztJQUM5QixJQUFJLEVBQUU7UUFDSixPQUFPLEVBQUUsQ0FBQyxHQUFhLEVBQUUsRUFBRSxDQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUNuQixTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDZixJQUFJLENBQUM7Z0JBQ0gsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzlCLENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEIsQ0FBQztRQUNILENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUNmLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSwwQkFBMEIsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUN4RSxDQUNGO0tBQ0o7SUFDRCxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRTtJQUN0RCxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRTtJQUN0RCxXQUFXLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRTtJQUNwRSxRQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRTtJQUM5RCxNQUFNLEVBQUU7UUFDTixPQUFPLEVBQUUsQ0FBQyxHQUFhLEVBQUUsRUFBRTtZQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztZQUNqRSxDQUFDO1lBQ0QsT0FBTyxJQUFJLFVBQVUsQ0FBNkIsVUFBVSxDQUFDLEVBQUU7Z0JBQzdELFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUssQ0FBQyxDQUFDO2dCQUMzQixVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDeEIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0tBQ0Y7SUFDRCxHQUFHLEVBQUU7UUFDSCxPQUFPLEVBQUUsQ0FBQyxHQUFhLEVBQUUsRUFBRSxDQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUNuQixTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDZixNQUFNLE1BQU0sR0FBRyxPQUFPLFNBQVMsS0FBSyxXQUFXO2dCQUMvQyxDQUFDLENBQUMsSUFBSSxTQUFTLEVBQUU7Z0JBQ2pCLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFFdEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztZQUMvRCxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQixDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FDZixFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsOEJBQThCLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLElBQUksR0FBRyxFQUFFLENBQUMsQ0FDNUUsQ0FDRjtLQUNKO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZyb20sIG9mLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBzd2l0Y2hNYXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcblxuZXhwb3J0IGNvbnN0IHJlc3BvbnNlSGFuZGxlcnMgPSB7XG4gIGpzb246IHtcbiAgICBoYW5kbGUkOiAocmVzOiBSZXNwb25zZSkgPT5cbiAgICAgIGZyb20ocmVzLnRleHQoKSkucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKHRleHQgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gb2YoSlNPTi5wYXJzZSh0ZXh0KSk7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gb2YodGV4dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT5cbiAgICAgICAgICBvZih7IGVycm9yOiBcIkZhaWxlZCB0byBwYXJzZSByZXNwb25zZVwiLCBkZXRhaWxzOiBlcnI/Lm1lc3NhZ2UgfHwgZXJyIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgfSxcbiAgdGV4dDogeyBoYW5kbGUkOiAocmVzOiBSZXNwb25zZSkgPT4gZnJvbShyZXMudGV4dCgpKSB9LFxuICBibG9iOiB7IGhhbmRsZSQ6IChyZXM6IFJlc3BvbnNlKSA9PiBmcm9tKHJlcy5ibG9iKCkpIH0sXG4gIGFycmF5QnVmZmVyOiB7IGhhbmRsZSQ6IChyZXM6IFJlc3BvbnNlKSA9PiBmcm9tKHJlcy5hcnJheUJ1ZmZlcigpKSB9LFxuICBmb3JtRGF0YTogeyBoYW5kbGUkOiAocmVzOiBSZXNwb25zZSkgPT4gZnJvbShyZXMuZm9ybURhdGEoKSkgfSxcbiAgc3RyZWFtOiB7XG4gICAgaGFuZGxlJDogKHJlczogUmVzcG9uc2UpID0+IHtcbiAgICAgIGlmICghcmVzLmJvZHkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmVzcG9uc2UgYm9keSBpcyBudWxsLCBjYW5ub3QgY3JlYXRlIHN0cmVhbVwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxSZWFkYWJsZVN0cmVhbTxVaW50OEFycmF5Pj4oc3Vic2NyaWJlciA9PiB7XG4gICAgICAgIHN1YnNjcmliZXIubmV4dChyZXMuYm9keSEpO1xuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIHhtbDoge1xuICAgIGhhbmRsZSQ6IChyZXM6IFJlc3BvbnNlKSA9PlxuICAgICAgZnJvbShyZXMudGV4dCgpKS5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAodGV4dCA9PiB7XG4gICAgICAgICAgY29uc3QgcGFyc2VyID0gdHlwZW9mIERPTVBhcnNlciAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICA/IG5ldyBET01QYXJzZXIoKVxuICAgICAgICAgIDogbmV3IChyZXF1aXJlKCd4bWxkb20nKS5ET01QYXJzZXIpKCk7XG5cbiAgICAgICAgICBjb25zdCB4bWxEb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHRleHQsIFwiYXBwbGljYXRpb24veG1sXCIpO1xuICAgICAgICAgIHJldHVybiBvZih4bWxEb2MpO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT5cbiAgICAgICAgICBvZih7IGVycm9yOiBcIkZhaWxlZCB0byBwYXJzZSBYTUwgcmVzcG9uc2VcIiwgZGV0YWlsczogZXJyPy5tZXNzYWdlIHx8IGVyciB9KVxuICAgICAgICApXG4gICAgICApXG4gIH0sXG59O1xuIl19