chore: split app to commons and web (squash commit)

This commit is contained in:
Andrew Bastin
2022-12-02 02:57:46 -05:00
parent fb827e3586
commit 3d004f2322
535 changed files with 1487 additions and 501 deletions

View File

@@ -0,0 +1,57 @@
import { HoppRESTResponse } from "../types/HoppRESTResponse"
import jsonLens from "./jsonLens"
import rawLens from "./rawLens"
import imageLens from "./imageLens"
import htmlLens from "./htmlLens"
import xmlLens from "./xmlLens"
import pdfLens from "./pdfLens"
import { defineAsyncComponent } from "vue"
export type Lens = {
lensName: string
isSupportedContentType: (contentType: string) => boolean
renderer: string
rendererImport: ReturnType<typeof defineAsyncComponent>
}
export const lenses: Lens[] = [
jsonLens,
imageLens,
htmlLens,
xmlLens,
pdfLens,
rawLens,
]
export function getSuitableLenses(response: HoppRESTResponse): Lens[] {
// return empty array if response is loading or error
if (
response.type === "loading" ||
response.type === "network_fail" ||
response.type === "script_fail" ||
response.type === "fail"
)
return []
const contentType = response.headers.find((h) => h.key === "content-type")
if (!contentType) return [rawLens]
const result = []
for (const lens of lenses) {
if (lens.isSupportedContentType(contentType.value)) result.push(lens)
}
return result
}
type LensRenderers = {
[key: string]: Lens["rendererImport"]
}
export function getLensRenderers(): LensRenderers {
const response: LensRenderers = {}
for (const lens of lenses) {
response[lens.renderer] = lens.rendererImport
}
return response
}