forked from sombochea/verdaccio-ui
fix(api): correctly handle responses with missing content-type header
Also prevents non .tgz requests from being handled as tgz requests — the previous if condition was incorrect
This commit is contained in:
parent
40a25a2507
commit
2049022477
@ -11,6 +11,22 @@ describe('api', () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
describe('handleResponseType', () => {
|
describe('handleResponseType', () => {
|
||||||
|
test('should handle missing Content-Type', async () => {
|
||||||
|
const response: Response = {
|
||||||
|
url: 'http://localhost:8080/-/packages',
|
||||||
|
ok: false,
|
||||||
|
// @ts-ignore
|
||||||
|
headers: {
|
||||||
|
get: () => null,
|
||||||
|
} as Headers,
|
||||||
|
} as Response;
|
||||||
|
|
||||||
|
const handled = await handleResponseType(response);
|
||||||
|
|
||||||
|
// Should this actually return [false, null] ?
|
||||||
|
expect(handled).toBeUndefined();
|
||||||
|
});
|
||||||
|
|
||||||
test('should test tgz scenario', async () => {
|
test('should test tgz scenario', async () => {
|
||||||
const blob = new Blob(['foo']);
|
const blob = new Blob(['foo']);
|
||||||
const blobPromise = Promise.resolve<Blob>(blob);
|
const blobPromise = Promise.resolve<Blob>(blob);
|
||||||
|
@ -8,20 +8,20 @@ import '../../types';
|
|||||||
*/
|
*/
|
||||||
export function handleResponseType(response: Response): Promise<[boolean, Blob | string]> | Promise<void> {
|
export function handleResponseType(response: Response): Promise<[boolean, Blob | string]> | Promise<void> {
|
||||||
if (response.headers) {
|
if (response.headers) {
|
||||||
const contentType = response.headers.get('Content-Type') as string;
|
const contentType = response.headers.get('Content-Type');
|
||||||
if (contentType.includes('application/pdf')) {
|
if (contentType && contentType.includes('application/pdf')) {
|
||||||
return Promise.all([response.ok, response.blob()]);
|
return Promise.all([response.ok, response.blob()]);
|
||||||
}
|
}
|
||||||
if (contentType.includes('application/json')) {
|
if (contentType && contentType.includes('application/json')) {
|
||||||
return Promise.all([response.ok, response.json()]);
|
return Promise.all([response.ok, response.json()]);
|
||||||
}
|
}
|
||||||
// it includes all text types
|
// it includes all text types
|
||||||
if (contentType.includes('text/')) {
|
if (contentType && contentType.includes('text/')) {
|
||||||
return Promise.all([response.ok, response.text()]);
|
return Promise.all([response.ok, response.text()]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// unfortunatelly on download files there is no header available
|
// unfortunatelly on download files there is no header available
|
||||||
if (response.url && response.url.endsWith('.tgz') !== null) {
|
if (response.url && response.url.endsWith('.tgz') === true) {
|
||||||
return Promise.all([response.ok, response.blob()]);
|
return Promise.all([response.ok, response.blob()]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user