mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
87 lines
2.2 KiB
TypeScript
87 lines
2.2 KiB
TypeScript
/**
|
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
|
*/
|
|
import type { LensApiResult } from "./router";
|
|
|
|
/**
|
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
|
*/
|
|
export interface LensApiResultContentType {
|
|
resultMapper: (result: LensApiResult<any>) => ({ statusCode: number, content: any, headers: { [ name: string ]: string }})
|
|
}
|
|
|
|
const resultMapperFor =
|
|
(contentType: string): LensApiResultContentType["resultMapper"] =>
|
|
({ response, error, statusCode= error ? 400 : 200, headers = {}}) => ({
|
|
statusCode,
|
|
content: error || response,
|
|
headers: { ...headers, "Content-Type": contentType },
|
|
});
|
|
|
|
export type SupportedFileExtension = "json" | "txt" | "html" | "css" | "gif" | "jpg" | "png" | "svg" | "js" | "woff2" | "ttf";
|
|
|
|
export const contentTypes: Record<SupportedFileExtension, LensApiResultContentType> = {
|
|
json: {
|
|
resultMapper: (result) => {
|
|
const resultMapper = resultMapperFor("application/json");
|
|
|
|
const mappedResult = resultMapper(result);
|
|
|
|
const contentIsObject = typeof mappedResult.content === "object";
|
|
const contentIsBuffer = mappedResult.content instanceof Buffer;
|
|
const contentShouldBeStringified = contentIsObject && !contentIsBuffer;
|
|
|
|
const content = contentShouldBeStringified
|
|
? JSON.stringify(mappedResult.content)
|
|
: mappedResult.content;
|
|
|
|
return {
|
|
...mappedResult,
|
|
content,
|
|
};
|
|
},
|
|
},
|
|
|
|
txt: {
|
|
resultMapper: resultMapperFor("text/plain"),
|
|
},
|
|
|
|
html: {
|
|
resultMapper: resultMapperFor("text/html"),
|
|
},
|
|
|
|
css: {
|
|
resultMapper: resultMapperFor("text/css"),
|
|
},
|
|
|
|
gif: {
|
|
resultMapper: resultMapperFor("image/gif"),
|
|
},
|
|
|
|
jpg: {
|
|
resultMapper: resultMapperFor("image/jpeg"),
|
|
},
|
|
|
|
png: {
|
|
resultMapper: resultMapperFor("image/png"),
|
|
},
|
|
|
|
svg: {
|
|
resultMapper: resultMapperFor("image/svg+xml"),
|
|
},
|
|
|
|
js: {
|
|
resultMapper: resultMapperFor("application/javascript"),
|
|
},
|
|
|
|
woff2: {
|
|
resultMapper: resultMapperFor("font/woff2"),
|
|
},
|
|
|
|
ttf: {
|
|
resultMapper: resultMapperFor("font/ttf"),
|
|
},
|
|
};
|