refactor: monorepo+pnpm (removed husky)

This commit is contained in:
Andrew Bastin
2021-09-10 00:28:28 +05:30
parent 917550ff4d
commit b28f82a881
445 changed files with 81301 additions and 63752 deletions

View File

@@ -0,0 +1,84 @@
import { lenses, getSuitableLenses, getLensRenderers } from "../lenses"
import rawLens from "../rawLens"
describe("getSuitableLenses", () => {
test("returns raw lens if no content type reported (null/undefined)", () => {
const nullResult = getSuitableLenses({
headers: {
"content-type": null,
},
})
const undefinedResult = getSuitableLenses({
headers: {},
})
expect(nullResult).toHaveLength(1)
expect(nullResult).toContainEqual(rawLens)
expect(undefinedResult).toHaveLength(1)
expect(undefinedResult).toContainEqual(rawLens)
})
const contentTypes = {
JSON: [
"application/json",
"application/ld+json",
"application/hal+json; charset=utf8",
],
Image: [
"image/gif",
"image/jpeg; foo=bar",
"image/png",
"image/bmp",
"image/svg+xml",
"image/x-icon",
"image/vnd.microsoft.icon",
],
HTML: ["text/html", "application/xhtml+xml", "text/html; charset=utf-8"],
XML: [
"text/xml",
"application/xml",
"application/xhtml+xml; charset=utf-8",
],
}
lenses
.filter(({ lensName }) => lensName !== rawLens.lensName)
.forEach((el) => {
test(`returns ${el.lensName} lens for its content-types`, () => {
contentTypes[el.lensName].forEach((contentType) => {
expect(
getSuitableLenses({
headers: {
"content-type": contentType,
},
})
).toContainEqual(el)
})
})
test(`returns Raw Lens along with ${el.lensName} for the content types`, () => {
contentTypes[el.lensName].forEach((contentType) => {
expect(
getSuitableLenses({
headers: {
"content-type": contentType,
},
})
).toContainEqual(rawLens)
})
})
})
})
describe("getLensRenderers", () => {
test("returns all the lens renderers", () => {
const res = getLensRenderers()
lenses.forEach(({ renderer, rendererImport }) => {
expect(res).toHaveProperty(renderer)
expect(res[renderer]).toBe(rendererImport)
})
})
})

View File

@@ -0,0 +1,10 @@
const htmlLens = {
lensName: "response.html",
isSupportedContentType: (contentType) =>
/\btext\/html|application\/xhtml\+xml\b/i.test(contentType),
renderer: "htmlres",
rendererImport: () =>
import("~/components/lenses/renderers/HTMLLensRenderer"),
}
export default htmlLens

View File

@@ -0,0 +1,12 @@
const imageLens = {
lensName: "response.image",
isSupportedContentType: (contentType) =>
/\bimage\/(?:gif|jpeg|png|bmp|svg\+xml|x-icon|vnd\.microsoft\.icon)\b/i.test(
contentType
),
renderer: "imageres",
rendererImport: () =>
import("~/components/lenses/renderers/ImageLensRenderer"),
}
export default imageLens

View File

@@ -0,0 +1,11 @@
import { isJSONContentType } from "../utils/contenttypes"
const jsonLens = {
lensName: "response.json",
isSupportedContentType: isJSONContentType,
renderer: "json",
rendererImport: () =>
import("~/components/lenses/renderers/JSONLensRenderer"),
}
export default jsonLens

View File

@@ -0,0 +1,28 @@
import jsonLens from "./jsonLens"
import rawLens from "./rawLens"
import imageLens from "./imageLens"
import htmlLens from "./htmlLens"
import xmlLens from "./xmlLens"
export const lenses = [jsonLens, imageLens, htmlLens, xmlLens, rawLens]
export function getSuitableLenses(response) {
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
}
export function getLensRenderers() {
const response = {}
for (const lens of lenses) {
response[lens.renderer] = lens.rendererImport
}
return response
}

View File

@@ -0,0 +1,8 @@
const rawLens = {
lensName: "response.raw",
isSupportedContentType: () => true,
renderer: "raw",
rendererImport: () => import("~/components/lenses/renderers/RawLensRenderer"),
}
export default rawLens

View File

@@ -0,0 +1,8 @@
const xmlLens = {
lensName: "response.xml",
isSupportedContentType: (contentType) => /\bxml\b/i.test(contentType),
renderer: "xmlres",
rendererImport: () => import("~/components/lenses/renderers/XMLLensRenderer"),
}
export default xmlLens