update to react-monolith@1.9.8 and update code accordingly
+ 1925
- 186
@@ -1,76 +1,76 @@
 {
-  "_generatedAtUnix": 1670633875010,
+  "_generatedAtUnix": 1702173824643,
   "_hashAlgorithm": "sha1",
   "_version": 2,
   "islands": {
     "Code": {
-      "hash": "7a08a2ecee9bdd07ccc9abf6a023174df7812b24",
+      "hash": "637cb859750ff563dc8156f17615d9864f95f561",
       "pathSource": "./app/islands/Code.tsx",
       "pathBundle": "./public/.islands/Code.bundle.js",
       "pathSourceMap": "./public/.islands/Code.bundle.js.map"
     },
     "InstantRouterIndicator": {
-      "hash": "5df7d5388145fb13164baf8361b1d33a332c8841",
+      "hash": "7fd24eef65b3e804b4497a26dc2e96c2af054d20",
       "pathSource": "./app/islands/InstantRouterIndicator.tsx",
       "pathBundle": "./public/.islands/InstantRouterIndicator.bundle.js",
       "pathSourceMap": "./public/.islands/InstantRouterIndicator.bundle.js.map"
     },
     "PullRequestSourceSelect": {
-      "hash": "6f5bba81f415c4790c33ba8a9d3ffb2eb993665f",
+      "hash": "6d0ed5a1d2dfc8841961827e69242458e2ff32fb",
       "pathSource": "./app/islands/PullRequestSourceSelect.tsx",
       "pathBundle": "./public/.islands/PullRequestSourceSelect.bundle.js",
       "pathSourceMap": "./public/.islands/PullRequestSourceSelect.bundle.js.map"
     },
     "RepositoriesList": {
-      "hash": "8e1c3e149243e2a42e1a2d3cea1a51bc101ca656",
+      "hash": "98b735ebcd727f3d34f2e2d4af578dbda9ae3081",
       "pathSource": "./app/islands/RepositoriesList.tsx",
       "pathBundle": "./public/.islands/RepositoriesList.bundle.js",
       "pathSourceMap": "./public/.islands/RepositoriesList.bundle.js.map"
     },
     "RepositoryCommitSummaryLine": {
-      "hash": "7205e3d23a0316c84eb4028cfc8d1614037e60e0",
+      "hash": "11d260b4acaf7aca6fc2b746529617093f3a3356",
       "pathSource": "./app/islands/RepositoryCommitSummaryLine.tsx",
       "pathBundle": "./public/.islands/RepositoryCommitSummaryLine.bundle.js",
       "pathSourceMap": "./public/.islands/RepositoryCommitSummaryLine.bundle.js.map"
     },
     "RepositoryCreateForm": {
-      "hash": "0257bbbe100aef18044efbef31e8635c249c382b",
+      "hash": "d4a64ab2f718fa6b77ea561d33adb242a831e107",
       "pathSource": "./app/islands/RepositoryCreateForm.tsx",
       "pathBundle": "./public/.islands/RepositoryCreateForm.bundle.js",
       "pathSourceMap": "./public/.islands/RepositoryCreateForm.bundle.js.map"
     },
     "RepositoryFilesDiffsList": {
-      "hash": "6e09d3fa17611d991dec13339d0a0e1aa26a3496",
+      "hash": "fd96b0001b9db83675724042cfc0d0c8323fd07b",
       "pathSource": "./app/islands/RepositoryFilesDiffsList.tsx",
       "pathBundle": "./public/.islands/RepositoryFilesDiffsList.bundle.js",
       "pathSourceMap": "./public/.islands/RepositoryFilesDiffsList.bundle.js.map"
     },
     "RepositoryForkForm": {
-      "hash": "ba2b154455bebe93418d07d0dc442ae8274e7077",
+      "hash": "a0ea58d89401471e74e9f1fb60f10e70e187fd1b",
       "pathSource": "./app/islands/RepositoryForkForm.tsx",
       "pathBundle": "./public/.islands/RepositoryForkForm.bundle.js",
       "pathSourceMap": "./public/.islands/RepositoryForkForm.bundle.js.map"
     },
     "RepositoryHero": {
-      "hash": "7875d80ebe7af7e679f0926130be103f0c49410b",
+      "hash": "1539f74a6345fe47637d62faea2e5cc7504c6a72",
       "pathSource": "./app/islands/RepositoryHero.tsx",
       "pathBundle": "./public/.islands/RepositoryHero.bundle.js",
       "pathSourceMap": "./public/.islands/RepositoryHero.bundle.js.map"
     },
     "RepositoryInitialSetup": {
-      "hash": "3161d78d94d0d1106cdaaf96232e0bf3837e65d9",
+      "hash": "5a8bf6a597e995832fd8c4d970281e079b97c3c5",
       "pathSource": "./app/islands/RepositoryInitialSetup.tsx",
       "pathBundle": "./public/.islands/RepositoryInitialSetup.bundle.js",
       "pathSourceMap": "./public/.islands/RepositoryInitialSetup.bundle.js.map"
     },
     "RepositoryPullRequestCreateForm": {
-      "hash": "ba904416b012180a45726b5d025ae2f55b43d158",
+      "hash": "5af2ef37ec2c003ff238db565143d0f522dfbd32",
       "pathSource": "./app/islands/RepositoryPullRequestCreateForm.tsx",
       "pathBundle": "./public/.islands/RepositoryPullRequestCreateForm.bundle.js",
       "pathSourceMap": "./public/.islands/RepositoryPullRequestCreateForm.bundle.js.map"
     },
     "RepositoryTreeView": {
-      "hash": "dd5a8daeb67ea7e25e21a0bf256495c54c7ae48d",
+      "hash": "80608f2940dad21e9e89f6534f9d1a38be8db277",
       "pathSource": "./app/islands/RepositoryTreeView.tsx",
       "pathBundle": "./public/.islands/RepositoryTreeView.bundle.js",
       "pathSourceMap": "./public/.islands/RepositoryTreeView.bundle.js.map"

...
@@ -78,75 +78,75 @@
   },
   "views": {
     "HomeView": {
-      "hash": "a6effb4d7c0dbb5dc53dfdaeadab48881d4e3c9e",
+      "hash": "14f6b7a4360a42125e6ba984ad7f4c5bc89b9f64",
       "pathSource": "./app/views/HomeView.tsx"
     },
     "InternalErrorView": {
-      "hash": "aae11e5992008b39f21645e1ebf8dd884e8941f9",
+      "hash": "16f0d72a0d5e3b56fb7e11bdf8b35c5e60a12643",
       "pathSource": "./app/views/InternalErrorView.tsx"
     },
     "LoginView": {
-      "hash": "1f3e668669f0504880f91d1273d97f9c8195cb34",
+      "hash": "a9c2a6fa3392cfb3ff7efab74c7b694356c8ec1d",
       "pathSource": "./app/views/auth/LoginView.tsx"
     },
     "RegisterView": {
-      "hash": "4e8d118248a0fbb3ebf83f60b5a6518308f813bf",
+      "hash": "b8ae30863b43ab5f1abf0cc8eef267acc661344d",
       "pathSource": "./app/views/auth/RegisterView.tsx"
     },
     "OrganizationDetailsView": {
-      "hash": "d918b9bfef2257d92a8dd1c30ede8ce6021d4001",
+      "hash": "ccb720380689bb15285ed08e8a6925d17f80e21a",
       "pathSource": "./app/views/organization/OrganizationDetailsView.tsx"
     },
     "RepositoryBrowserView": {
-      "hash": "f8c846459384efa5b446d7119391a00c55e803a0",
+      "hash": "9a451556ce04140117bdfe1c01f8289c8d06981a",
       "pathSource": "./app/views/repository/RepositoryBrowserView.tsx"
     },
     "RepositoryCommitsLogView": {
-      "hash": "1b098bca42421339e228814ebeffbbf8bd09224d",
+      "hash": "7d61f9373b0b31cedbf1475ccbdf2055a2e8f3aa",
       "pathSource": "./app/views/repository/RepositoryCommitsLogView.tsx"
     },
     "RepositoryCompareView": {
-      "hash": "52d12401cafb16f88c83cbf55e5cf21e68049c58",
+      "hash": "a18c579196ebc2ec82ae743046a8e02ec03ca8a9",
       "pathSource": "./app/views/repository/RepositoryCompareView.tsx"
     },
     "RepositoryCreateView": {
-      "hash": "4eccb4a55a8d9fad7cea1d3e6f63d129a825d5b0",
+      "hash": "ee8113a9576aa434e4f31dd8cddf559872b8087d",
       "pathSource": "./app/views/repository/RepositoryCreateView.tsx"
     },
     "RepositoryDetailsView": {
-      "hash": "60865fcf0dfa4cfcb8fdf7c98b5ecd5dfc6d4693",
+      "hash": "1b405ef6bb7ac0d8471f2937a1a0424a21de9d67",
       "pathSource": "./app/views/repository/RepositoryDetailsView.tsx"
     },
     "RepositoryExploreView": {
-      "hash": "762873efea7c9a2b0b5f8a6840d5610c885b9318",
+      "hash": "1b5cc5fb0fd692ae993fe8e892c59456346b32c5",
       "pathSource": "./app/views/repository/RepositoryExploreView.tsx"
     },
     "RepositoryForkView": {
-      "hash": "8c5cc4fb207bcc3bae32619ea3c10c1ad1edde4d",
+      "hash": "035ad04f3eba7a86f398515b43609f5506e28792",
       "pathSource": "./app/views/repository/RepositoryForkView.tsx"
     },
     "RepositoryShowObjectView": {
-      "hash": "68dc54d2fd44cdf6cb29491e27ba43389cad0cb0",
+      "hash": "ee4a0c034ffbbc9ae6b257dca2121d629d7049bf",
       "pathSource": "./app/views/repository/RepositoryShowObjectView.tsx"
     },
     "RepositoryPullRequestCreateView": {
-      "hash": "f9dbde47be4d35763f97475a36a1cfa45632ae71",
+      "hash": "d0cb60a6511891581ca12ca2c3b7b54ddd0faebe",
       "pathSource": "./app/views/repositoryPullRequests/RepositoryPullRequestCreateView.tsx"
     },
     "RepositoryPullRequestDetailsView": {
-      "hash": "86b0ea0babddf47d617432446516553abe39f5d5",
+      "hash": "ed4271e3cbb04e19dbf6f622e19149068f2f25cb",
       "pathSource": "./app/views/repositoryPullRequests/RepositoryPullRequestDetailsView.tsx"
     },
     "RepositoryPullRequestsView": {
-      "hash": "0944c853a908e8847d5c77ec097e43859f38b295",
+      "hash": "33831a5912cdf2e8dd0f44f6159ef6b438322445",
       "pathSource": "./app/views/repositoryPullRequests/RepositoryPullRequestsView.tsx"
     },
     "UserDashboardView": {
-      "hash": "573e3c0c4d61352aa049963fa41b555acdc443aa",
+      "hash": "272155a4521b51a4849c4a1bb4b7a2db717a369f",
       "pathSource": "./app/views/user/UserDashboardView.tsx"
     },
     "UserDetailsView": {
-      "hash": "272ad7be3d5f7c3cefc9136b4ac8d361a28562ca",
+      "hash": "29c0fbd75974f8568b3aabb9e5ef72fc08b1f628",
       "pathSource": "./app/views/user/UserDetailsView.tsx"
     }
   }

app/controllers/auth/getLoginView.ts
@@ -4,9 +4,11 @@ import type { ReqHandler } from "@ethicdevs/react-monolith";
 import { AppRoute, AppRouteParams } from "../../routes.defs";
 import LoginView, { LoginViewProps } from "../../views/auth/LoginView";
 
-const getLoginView: ReqHandler = (request, reply) => {
-  const { after_login_goto } =
-    request.query as AppRouteParams[AppRoute.AUTH_LOGIN]["querystring"];
+const getLoginView: ReqHandler<AppRouteParams, AppRoute.AUTH_LOGIN> = (
+  request,
+  reply
+) => {
+  const { after_login_goto } = request.query;
 
   if (after_login_goto != null && after_login_goto.trim().startsWith("/")) {
     // ! TODO(security):

app/controllers/auth/postLoginAction.ts
@@ -5,9 +5,11 @@ import { AppRoute, AppRouteParams } from "../../routes.defs";
 import LoginView, { LoginViewProps } from "../../views/auth/LoginView";
 import { makeAuthService } from "../../services/auth";
 
-const postLoginAction: ReqHandler = async (request, reply) => {
-  const { email_address: emailAddress, password } =
-    request.body as AppRouteParams[AppRoute.AUTH_LOGIN_ACTION]["body"];
+const postLoginAction: ReqHandler<
+  AppRouteParams,
+  AppRoute.AUTH_LOGIN_ACTION
+> = async (request, reply) => {
+  const { email_address: emailAddress, password } = request.body;
 
   const authService = makeAuthService({
     cryptoService: request.cryptoService,

app/controllers/auth/postRegisterAction.ts
@@ -5,7 +5,10 @@ import { AppRoute, AppRouteParams } from "../../routes.defs";
 import RegisterView, { RegisterViewProps } from "../../views/auth/RegisterView";
 import { makeAuthService } from "../../services/auth";
 
-const postRegisterAction: ReqHandler = async (request, reply) => {
+const postRegisterAction: ReqHandler<
+  AppRouteParams,
+  AppRoute.AUTH_REGISTER_ACTION
+> = async (request, reply) => {
   const authService = makeAuthService({
     cryptoService: request.cryptoService,
     request,

...
@@ -13,11 +16,7 @@ const postRegisterAction: ReqHandler = async (request, reply) => {
 
   const reqHandler = reply.makeRequestHandler(request, reply);
 
-  const {
-    email_address: emailAddress,
-    username,
-    password,
-  } = request.body as AppRouteParams[AppRoute.AUTH_REGISTER_ACTION]["body"];
+  const { email_address: emailAddress, username, password } = request.body;
 
   const initialValues = { emailAddress, username };
 

app/controllers/organization/getOrganizationDetailsView.ts
@@ -16,10 +16,12 @@ import OrganizationDetailsView, {
   OrganizationDetailsViewProps,
 } from "../../views/organization/OrganizationDetailsView";
 
-const getOrganizationDetailsView: ReqHandler = async (request, reply) => {
+const getOrganizationDetailsView: ReqHandler<
+  AppRouteParams,
+  AppRoute.ORGANIZATION_DETAILS
+> = async (request, reply) => {
   const { curr_user_uid } = request.session.data;
-  const { orgSlug } =
-    request.params as AppRouteParams[AppRoute.ORGANIZATION_DETAILS]["params"];
+  const { orgSlug } = request.params;
 
   const orgService = makeOrganizationService({ request });
   const organization = (await orgService.getOrganizationBySlug(orgSlug, {

app/controllers/repository/getRepositoryBrowserView.ts
@@ -17,11 +17,11 @@ import RepositoryDetailsView, {
   RepositoryDetailsViewProps,
 } from "../../views/repository/RepositoryDetailsView";
 
-const getRepositoryBrowserView: ReqHandler = async (request, reply) => {
-  const params =
-    request.params as AppRouteParams[AppRoute.REPOSITORY_BROWSER]["params"];
-  const { orgSlug, repoSlug, currentRef: currRef } = params;
-  const path = params["*"] || "";
+const getRepositoryBrowserView: ReqHandler<
+  AppRouteParams,
+  AppRoute.REPOSITORY_BROWSER
+> = async (request, reply) => {
+  const { orgSlug, repoSlug, currentRef: currRef, "*": path } = request.params;
   const currentRef = currRef || Const.DEFAULT_HEAD_REF;
 
   const orgService = makeOrganizationService({ request });

app/controllers/repository/getRepositoryCommitsLogView.ts
@@ -12,9 +12,11 @@ import RepositoryCommitsLogView, {
   RepositoryCommitsLogViewProps,
 } from "../../views/repository/RepositoryCommitsLogView";
 
-const getRepositoryCommitsLogView: ReqHandler = async (request, reply) => {
-  const { orgSlug, repoSlug, currentRef } =
-    request.params as AppRouteParams[AppRoute.REPOSITORY_COMMITS_LOG]["params"];
+const getRepositoryCommitsLogView: ReqHandler<
+  AppRouteParams,
+  AppRoute.REPOSITORY_COMMITS_LOG
+> = async (request, reply) => {
+  const { orgSlug, repoSlug, currentRef } = request.params;
 
   const orgService = makeOrganizationService({ request });
   const repoService = makeRepositoryService({ request });

app/controllers/repository/getRepositoryCompareView.ts
@@ -12,9 +12,11 @@ import RepositoryCompareView, {
   RepositoryCompareViewProps,
 } from "../../views/repository/RepositoryCompareView";
 
-const getRepositoryCompareView: ReqHandler = async (request, reply) => {
-  const { orgSlug, repoSlug, refA, refB } =
-    request.params as AppRouteParams[AppRoute.REPOSITORY_COMPARE]["params"];
+const getRepositoryCompareView: ReqHandler<
+  AppRouteParams,
+  AppRoute.REPOSITORY_COMPARE
+> = async (request, reply) => {
+  const { orgSlug, repoSlug, refA, refB } = request.params;
 
   const orgService = makeOrganizationService({ request });
   const repoService = makeRepositoryService({ request });

app/controllers/repository/getRepositoryDetailsView.ts
@@ -17,9 +17,11 @@ import {
   ResourceVisibility,
 } from "@prisma/client";
 
-const getRepositoryDetailsView: ReqHandler = async (request, reply) => {
-  const { orgSlug, repoSlug } =
-    request.params as AppRouteParams[AppRoute.REPOSITORY_DETAILS]["params"];
+const getRepositoryDetailsView: ReqHandler<
+  AppRouteParams,
+  AppRoute.REPOSITORY_DETAILS
+> = async (request, reply) => {
+  const { orgSlug, repoSlug } = request.params;
 
   const orgService = makeOrganizationService({ request });
   const repoService = makeRepositoryService({ request });

app/controllers/repository/getRepositoryForkView.ts
@@ -11,9 +11,10 @@ import RepositoryForkView, {
   RepositoryForkViewProps,
 } from "../../views/repository/RepositoryForkView";
 
-type RouteParams = AppRouteParams[AppRoute.REPOSITORY_FORK];
-
-const getRepositoryForkView: ReqHandler = async (request, reply) => {
+const getRepositoryForkView: ReqHandler<
+  AppRouteParams,
+  AppRoute.REPOSITORY_FORK
+> = async (request, reply) => {
   if (
     request.session.data.authenticated === false ||
     request.session.data.curr_user_uid == null

...
@@ -22,8 +23,8 @@ const getRepositoryForkView: ReqHandler = async (request, reply) => {
     return reply;
   }
 
-  const { orgSlug, repoSlug } = request.params as RouteParams["params"];
-  // const {} = request.body as RouteParams["body"];
+  const { orgSlug, repoSlug } = request.params;
+  // const {} = request.body;
 
   const reqHandler = reply.makeRequestHandler(request, reply);
   const organizationService = makeOrganizationService({ request });

app/controllers/repository/getRepositoryShowObjectView.ts
@@ -12,9 +12,11 @@ import RepositoryShowObjectView, {
   RepositoryShowObjectViewProps,
 } from "../../views/repository/RepositoryShowObjectView";
 
-const getRepositoryShowObjectView: ReqHandler = async (request, reply) => {
-  const { orgSlug, repoSlug, objectId } =
-    request.params as AppRouteParams[AppRoute.REPOSITORY_SHOW_OBJECT]["params"];
+const getRepositoryShowObjectView: ReqHandler<
+  AppRouteParams,
+  AppRoute.REPOSITORY_SHOW_OBJECT
+> = async (request, reply) => {
+  const { orgSlug, repoSlug, objectId } = request.params;
 
   const orgService = makeOrganizationService({ request });
   const repoService = makeRepositoryService({ request });

app/controllers/repository/postRepositoryCreateAction.ts
@@ -13,7 +13,10 @@ import RepositoryCreateView, {
   RepositoryCreateViewProps,
 } from "../../views/repository/RepositoryCreateView";
 
-const postRepositoryCreateAction: ReqHandler = async (request, reply) => {
+const postRepositoryCreateAction: ReqHandler<
+  AppRouteParams,
+  AppRoute.REPOSITORY_CREATE_ACTION
+> = async (request, reply) => {
   if (
     request.session.data.authenticated === false ||
     request.session.data.curr_user_uid == null

...
@@ -49,7 +52,7 @@ const postRepositoryCreateAction: ReqHandler = async (request, reply) => {
     repo_short_description: shortDescription,
     repo_visibility: visibility,
     repo_website_url: websiteUrl,
-  } = body as AppRouteParams[AppRoute.REPOSITORY_CREATE_ACTION]["body"];
+  } = body;
 
   const newRepo = await repoService.createRepository({
     parentOrgSlug, // TODO: Validate it exists first.

app/controllers/repository/postRepositoryForkAction.ts
@@ -14,7 +14,10 @@ import RepositoryForkView, {
   RepositoryForkViewProps,
 } from "../../views/repository/RepositoryForkView";
 
-const postRepositoryForkAction: ReqHandler = async (request, reply) => {
+const postRepositoryForkAction: ReqHandler<
+  AppRouteParams,
+  AppRoute.REPOSITORY_FORK_ACTION
+> = async (request, reply) => {
   if (
     request.session.data.authenticated === false ||
     request.session.data.curr_user_uid == null

...
@@ -29,16 +32,14 @@ const postRepositoryForkAction: ReqHandler = async (request, reply) => {
   const usersService = makeUsersService({ request });
 
   const { body, params, validationError } = request;
-
-  const { orgSlug: sourceOrgSlug, repoSlug: sourceRepoSlug } =
-    params as AppRouteParams[AppRoute.REPOSITORY_FORK_ACTION]["params"];
+  const { orgSlug: sourceOrgSlug, repoSlug: sourceRepoSlug } = params;
 
   const {
     target_org_slug: targetOrgSlug,
     target_repo_slug: targetRepoSlug,
     target_repo_display_name: targetRepoDisplayName,
     target_repo_visibility: targetRepoVisibility,
-  } = body as AppRouteParams[AppRoute.REPOSITORY_FORK_ACTION]["body"];
+  } = body;
 
   const sourceParentOrg = await organizationService.getOrganizationBySlug(
     sourceOrgSlug

app/controllers/repositoryPullRequests/getRepositoryPullRequestCloseAction.ts
@@ -13,12 +13,11 @@ import RepositoryPullRequestsView, {
   RepositoryPullRequestsViewProps,
 } from "../../views/repositoryPullRequests/RepositoryPullRequestsView";
 
-const getRepositoryPullRequestCloseAction: ReqHandler = async (
-  request,
-  reply
-) => {
-  const { orgSlug, repoSlug } =
-    request.params as AppRouteParams[AppRoute.REPOSITORY_PULL_REQUESTS]["params"];
+const getRepositoryPullRequestCloseAction: ReqHandler<
+  AppRouteParams,
+  AppRoute.REPOSITORY_PULL_REQUESTS
+> = async (request, reply) => {
+  const { orgSlug, repoSlug } = request.params;
 
   const orgService = makeOrganizationService({ request });
   const prService = makePullRequestService({ request });

app/controllers/repositoryPullRequests/getRepositoryPullRequestCommentCreateAction.ts
@@ -13,12 +13,11 @@ import RepositoryPullRequestsView, {
   RepositoryPullRequestsViewProps,
 } from "../../views/repositoryPullRequests/RepositoryPullRequestsView";
 
-const getRepositoryPullRequestCommentCreateAction: ReqHandler = async (
-  request,
-  reply
-) => {
-  const { orgSlug, repoSlug } =
-    request.params as AppRouteParams[AppRoute.REPOSITORY_PULL_REQUESTS]["params"];
+const getRepositoryPullRequestCommentCreateAction: ReqHandler<
+  AppRouteParams,
+  AppRoute.REPOSITORY_PULL_REQUESTS
+> = async (request, reply) => {
+  const { orgSlug, repoSlug } = request.params;
 
   const orgService = makeOrganizationService({ request });
   const prService = makePullRequestService({ request });

app/controllers/repositoryPullRequests/getRepositoryPullRequestCommentDeleteAction.ts
@@ -13,12 +13,11 @@ import RepositoryPullRequestsView, {
   RepositoryPullRequestsViewProps,
 } from "../../views/repositoryPullRequests/RepositoryPullRequestsView";
 
-const getRepositoryPullRequestCommentDeleteAction: ReqHandler = async (
-  request,
-  reply
-) => {
-  const { orgSlug, repoSlug } =
-    request.params as AppRouteParams[AppRoute.REPOSITORY_PULL_REQUESTS]["params"];
+const getRepositoryPullRequestCommentDeleteAction: ReqHandler<
+  AppRouteParams,
+  AppRoute.REPOSITORY_PULL_REQUESTS
+> = async (request, reply) => {
+  const { orgSlug, repoSlug } = request.params;
 
   const orgService = makeOrganizationService({ request });
   const prService = makePullRequestService({ request });

app/controllers/repositoryPullRequests/getRepositoryPullRequestCommentUpdateAction.ts
@@ -13,12 +13,11 @@ import RepositoryPullRequestsView, {
   RepositoryPullRequestsViewProps,
 } from "../../views/repositoryPullRequests/RepositoryPullRequestsView";
 
-const getRepositoryPullRequestCommentUpdateAction: ReqHandler = async (
-  request,
-  reply
-) => {
-  const { orgSlug, repoSlug } =
-    request.params as AppRouteParams[AppRoute.REPOSITORY_PULL_REQUESTS]["params"];
+const getRepositoryPullRequestCommentUpdateAction: ReqHandler<
+  AppRouteParams,
+  AppRoute.REPOSITORY_PULL_REQUESTS
+> = async (request, reply) => {
+  const { orgSlug, repoSlug } = request.params;
 
   const orgService = makeOrganizationService({ request });
   const prService = makePullRequestService({ request });

app/controllers/repositoryPullRequests/getRepositoryPullRequestCreateView.ts
@@ -20,15 +20,12 @@ import RepositoryPullRequestCreateView, {
   RepositoryPullRequestCreateViewProps,
 } from "../../views/repositoryPullRequests/RepositoryPullRequestCreateView";
 
-const getRepositoryPullRequestCreateView: ReqHandler = async (
-  request,
-  reply
-) => {
-  const { from_branch } =
-    request.query as AppRouteParams[AppRoute.REPOSITORY_PULL_REQUEST_CREATE]["querystring"];
-
-  const { orgSlug, repoSlug } =
-    request.params as AppRouteParams[AppRoute.REPOSITORY_PULL_REQUEST_CREATE]["params"];
+const getRepositoryPullRequestCreateView: ReqHandler<
+  AppRouteParams,
+  AppRoute.REPOSITORY_PULL_REQUEST_CREATE
+> = async (request, reply) => {
+  const { orgSlug, repoSlug } = request.params;
+  const { from_branch } = request.query;
 
   if (
     request.session.data.authenticated === false ||

app/controllers/repositoryPullRequests/getRepositoryPullRequestDeleteAction.ts
@@ -13,12 +13,11 @@ import RepositoryPullRequestsView, {
   RepositoryPullRequestsViewProps,
 } from "../../views/repositoryPullRequests/RepositoryPullRequestsView";
 
-const getRepositoryPullRequestDeleteAction: ReqHandler = async (
-  request,
-  reply
-) => {
-  const { orgSlug, repoSlug } =
-    request.params as AppRouteParams[AppRoute.REPOSITORY_PULL_REQUESTS]["params"];
+const getRepositoryPullRequestDeleteAction: ReqHandler<
+  AppRouteParams,
+  AppRoute.REPOSITORY_PULL_REQUESTS
+> = async (request, reply) => {
+  const { orgSlug, repoSlug } = request.params;
 
   const orgService = makeOrganizationService({ request });
   const prService = makePullRequestService({ request });

app/controllers/repositoryPullRequests/getRepositoryPullRequestDetailsView.ts
@@ -14,12 +14,11 @@ import RepositoryPullRequestDetailsView, {
   RepositoryPullRequestDetailsViewProps,
 } from "../../views/repositoryPullRequests/RepositoryPullRequestDetailsView";
 
-const getRepositoryPullRequestDetailsView: ReqHandler = async (
-  request,
-  reply
-) => {
-  const { orgSlug, repoSlug, pullUid } =
-    request.params as AppRouteParams[AppRoute.REPOSITORY_PULL_REQUEST_DETAILS]["params"];
+const getRepositoryPullRequestDetailsView: ReqHandler<
+  AppRouteParams,
+  AppRoute.REPOSITORY_PULL_REQUEST_DETAILS
+> = async (request, reply) => {
+  const { orgSlug, repoSlug, pullUid } = request.params;
 
   const orgService = makeOrganizationService({ request });
   const prService = makePullRequestService({ request });

app/controllers/repositoryPullRequests/getRepositoryPullRequestUpdateAction.ts
@@ -13,12 +13,11 @@ import RepositoryPullRequestsView, {
   RepositoryPullRequestsViewProps,
 } from "../../views/repositoryPullRequests/RepositoryPullRequestsView";
 
-const getRepositoryPullRequestUpdateAction: ReqHandler = async (
-  request,
-  reply
-) => {
-  const { orgSlug, repoSlug } =
-    request.params as AppRouteParams[AppRoute.REPOSITORY_PULL_REQUESTS]["params"];
+const getRepositoryPullRequestUpdateAction: ReqHandler<
+  AppRouteParams,
+  AppRoute.REPOSITORY_PULL_REQUESTS
+> = async (request, reply) => {
+  const { orgSlug, repoSlug } = request.params;
 
   const orgService = makeOrganizationService({ request });
   const prService = makePullRequestService({ request });

app/controllers/repositoryPullRequests/getRepositoryPullRequestsView.ts
@@ -13,9 +13,11 @@ import RepositoryPullRequestsView, {
   RepositoryPullRequestsViewProps,
 } from "../../views/repositoryPullRequests/RepositoryPullRequestsView";
 
-const getRepositoryPullRequestsView: ReqHandler = async (request, reply) => {
-  const { orgSlug, repoSlug } =
-    request.params as AppRouteParams[AppRoute.REPOSITORY_PULL_REQUESTS]["params"];
+const getRepositoryPullRequestsView: ReqHandler<
+  AppRouteParams,
+  AppRoute.REPOSITORY_PULL_REQUESTS
+> = async (request, reply) => {
+  const { orgSlug, repoSlug } = request.params;
 
   const orgService = makeOrganizationService({ request });
   const prService = makePullRequestService({ request });

app/controllers/repositoryPullRequests/postRepositoryPullRequestCreateAction.ts
@@ -19,12 +19,10 @@ import RepositoryPullRequestCreateView, {
   RepositoryPullRequestCreateViewProps,
 } from "../../views/repositoryPullRequests/RepositoryPullRequestCreateView";
 
-type CurrentRoute = AppRoute.REPOSITORY_PULL_REQUEST_CREATE_ACTION;
-
-const postRepositoryPullRequestCreateAction: ReqHandler = async (
-  request,
-  reply
-) => {
+const postRepositoryPullRequestCreateAction: ReqHandler<
+  AppRouteParams,
+  AppRoute.REPOSITORY_PULL_REQUEST_CREATE_ACTION
+> = async (request, reply) => {
   if (
     request.session.data.authenticated === false ||
     request.session.data.curr_user_uid == null

...
@@ -33,8 +31,7 @@ const postRepositoryPullRequestCreateAction: ReqHandler = async (
     return reply;
   }
 
-  const { orgSlug, repoSlug } =
-    request.params as AppRouteParams[CurrentRoute]["params"];
+  const { orgSlug, repoSlug } = request.params;
   const {
     description,
     summary,

...
@@ -46,7 +43,7 @@ const postRepositoryPullRequestCreateAction: ReqHandler = async (
     target_parent_org_slug: targetParentOrgSlug,
     target_repository_dest_branch: targetRepoDestBranch,
     target_repository_slug: targetRepoSlug,
-  } = request.body as AppRouteParams[CurrentRoute]["body"];
+  } = request.body;
 
   const orgService = makeOrganizationService({ request });
   const repoService = makeRepositoryService({ request });

app/controllers/repositoryPullRequests/postRepositoryPullRequestMergeAction.ts
@@ -14,16 +14,12 @@ import RepositoryPullRequestsView, {
   RepositoryPullRequestsViewProps,
 } from "../../views/repositoryPullRequests/RepositoryPullRequestsView";
 
-type CurrentRoute = AppRoute.REPOSITORY_PULL_REQUEST_MERGE_ACTION;
-
-const postRepositoryPullRequestMergeAction: ReqHandler = async (
-  request,
-  reply
-) => {
-  const { orgSlug, repoSlug, pullUid } =
-    request.params as AppRouteParams[CurrentRoute]["params"];
-  const { merge_message, merge_summary } =
-    request.body as AppRouteParams[CurrentRoute]["body"];
+const postRepositoryPullRequestMergeAction: ReqHandler<
+  AppRouteParams,
+  AppRoute.REPOSITORY_PULL_REQUEST_MERGE_ACTION
+> = async (request, reply) => {
+  const { orgSlug, repoSlug, pullUid } = request.params;
+  const { merge_message, merge_summary } = request.body;
 
   console.log("params:", {
     merge_message,

app/controllers/syntaxHighlight/highlightCodeAction.ts
@@ -83,15 +83,12 @@ const getNodesRecursive = (
       }));
 };
 
-const highlightCodeAction: ReqHandler = async (request, reply) => {
-  const { outputFormat = "html" } =
-    request.params as AppRouteParams[AppRoute.SYNTAX_HIGHLIGHT_HIGHLIGHT_CODE_ACTION]["params"];
-
-  const {
-    code,
-    language,
-    theme_scheme: themeScheme,
-  } = request.body as AppRouteParams[AppRoute.SYNTAX_HIGHLIGHT_HIGHLIGHT_CODE_ACTION]["body"];
+const highlightCodeAction: ReqHandler<
+  AppRouteParams,
+  AppRoute.SYNTAX_HIGHLIGHT_HIGHLIGHT_CODE_ACTION
+> = async (request, reply) => {
+  const { outputFormat = "html" } = request.params;
+  const { code, language, theme_scheme: themeScheme } = request.body;
 
   if (request.validationError != null) {
     if (outputFormat === "html") {

app/controllers/theme/setThemeSchemeAction.ts
@@ -3,10 +3,12 @@ import { ReqHandler } from "@ethicdevs/react-monolith";
 // app
 import { AppRoute, AppRouteParams } from "../../routes.defs";
 
-const setThemeSchemeAction: ReqHandler = async (request, reply) => {
+const setThemeSchemeAction: ReqHandler<
+  AppRouteParams,
+  AppRoute.THEME_SET_SCHEME_ACTION
+> = async (request, reply) => {
   const { referer } = request.headers;
-  const { themeScheme: desiredScheme } =
-    request.params as AppRouteParams[AppRoute.THEME_SET_SCHEME_ACTION]["params"];
+  const { themeScheme: desiredScheme } = request.params;
 
   reply.setCookie("theme_scheme", desiredScheme === "light" ? "light" : "dark");
   return reply.redirect(302, referer || "/");

app/controllers/user/getUserDetailsView.ts
@@ -9,11 +9,12 @@ import UserDetailsView, {
   UserDetailsViewProps,
 } from "../../views/user/UserDetailsView";
 
-const getUserDetailsView: ReqHandler = async (request, reply) => {
-  const { username } =
-    request.params as AppRouteParams[AppRoute.USER_DETAILS]["params"];
-
+const getUserDetailsView: ReqHandler<
+  AppRouteParams,
+  AppRoute.USER_DETAILS
+> = async (request, reply) => {
   const { curr_user_uid } = request.session.data;
+  const { username } = request.params;
 
   const usersService = makeUsersService({ request });
   const user = await usersService.getUserByUsername(username);

@@ -16,6 +16,7 @@ import fastifyCustomSession, {
 import fastifyFormBody from "@fastify/formbody";
 import fastifyGitServer from "@ethicdevs/fastify-git-server";
 import fastifyServeStatic from "fastify-static";
+import { prismjsPlugin as esBuildPrismJSPlugin } from "esbuild-plugin-prismjs";
 import loadPrismJsLanguages from "prismjs/components/";
 // generated via script[generate:prisma]
 import { GlobalRole, PrismaClient } from "@prisma/client";

...
@@ -92,6 +93,22 @@ async function main(): Promise<AppServer> {
       "markdown-to-jsx": "MarkdownToJSX",
       prismjs: "Prism",
     },
+    esbuild: {
+      plugins: [
+        esBuildPrismJSPlugin({
+          inline: true,
+          languages: ["typescript", "javascript", "json", "css", "markup"],
+          plugins: [
+            "line-highlight",
+            "line-numbers",
+            "show-language",
+            "copy-to-clipboard",
+          ],
+          theme: "okaidia",
+          css: true,
+        }),
+      ],
+    },
     baseHeadTags: [
       {
         kind: "link",

...
@@ -339,8 +356,8 @@ async function main(): Promise<AppServer> {
 
 // Catch errors that are fatal
 ["unhandledRejection", "uncaughtException"].forEach((exception) => {
-  process.on(exception, async (reason: Error) => {
-    await stopAppServerAndExit(server, reason);
+  process.on(exception, async (_reason: Error) => {
+    // await stopAppServerAndExit(server, reason);
   });
 });
 

app/views/repository/RepositoryCommitsLogView.tsx
@@ -43,7 +43,7 @@ const RepositoryCommitsLogView: ReactView<RepositoryCommitsLogViewProps> = ({
             forkedFromRepo={repo.forkedFromRepo}
             forksCount={repo.forks.length}
             parentOrg={parentOrg}
-            path={"Commits"}
+            path={`Commits (${history.length})`}
             repo={repo}
           />
         </IslandWrapper>

@@ -30,8 +30,8 @@
   "dependencies": {
     "@ethicdevs/fastify-custom-session": "^0.6.0",
     "@ethicdevs/fastify-git-server": "^1.6.1",
-    "@ethicdevs/fastify-stream-react-views": "^1.10.2",
-    "@ethicdevs/react-monolith": "^1.7.4",
+    "@ethicdevs/fastify-stream-react-views": "^1.11.3",
+    "@ethicdevs/react-monolith": "^1.9.8",
     "@fastify/cookie": "6.0.0",
     "@fastify/formbody": "6.0.0",
     "@prisma/client": "^4.9.0",

...
@@ -39,6 +39,7 @@
     "cuid": "^2.1.8",
     "diffparser": "^2.0.1",
     "dotenv-flow": "^3.2.0",
+    "esbuild-plugin-prismjs": "^1.0.8",
     "fastify": "^3.27.4",
     "fastify-static": "^4.6.1",
     "file-extension": "^4.0.5",

public/.deps/prismjs.production.min.js
@@ -0,0 +1,1688 @@
+var _self =
+    "undefined" != typeof window
+      ? window
+      : "undefined" != typeof WorkerGlobalScope &&
+        self instanceof WorkerGlobalScope
+      ? self
+      : {},
+  Prism = (function (e) {
+    var t = /(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,
+      n = 0,
+      r = {},
+      a = {
+        manual: e.Prism && e.Prism.manual,
+        disableWorkerMessageHandler:
+          e.Prism && e.Prism.disableWorkerMessageHandler,
+        util: {
+          encode: function e(t) {
+            return t instanceof i
+              ? new i(t.type, e(t.content), t.alias)
+              : Array.isArray(t)
+              ? t.map(e)
+              : t
+                  .replace(/&/g, "&amp;")
+                  .replace(/</g, "&lt;")
+                  .replace(/\u00a0/g, " ");
+          },
+          type: function (e) {
+            return Object.prototype.toString.call(e).slice(8, -1);
+          },
+          objId: function (e) {
+            return (
+              e.__id || Object.defineProperty(e, "__id", { value: ++n }), e.__id
+            );
+          },
+          clone: function e(t, n) {
+            var r, i;
+            switch (((n = n || {}), a.util.type(t))) {
+              case "Object":
+                if (((i = a.util.objId(t)), n[i])) return n[i];
+                for (var s in ((r = {}), (n[i] = r), t))
+                  t.hasOwnProperty(s) && (r[s] = e(t[s], n));
+                return r;
+              case "Array":
+                return (
+                  (i = a.util.objId(t)),
+                  n[i]
+                    ? n[i]
+                    : ((r = []),
+                      (n[i] = r),
+                      t.forEach(function (t, a) {
+                        r[a] = e(t, n);
+                      }),
+                      r)
+                );
+              default:
+                return t;
+            }
+          },
+          getLanguage: function (e) {
+            for (; e; ) {
+              var n = t.exec(e.className);
+              if (n) return n[1].toLowerCase();
+              e = e.parentElement;
+            }
+            return "none";
+          },
+          setLanguage: function (e, n) {
+            (e.className = e.className.replace(RegExp(t, "gi"), "")),
+              e.classList.add("language-" + n);
+          },
+          currentScript: function () {
+            if ("undefined" == typeof document) return null;
+            if ("currentScript" in document) return document.currentScript;
+            try {
+              throw new Error();
+            } catch (r) {
+              var e = (/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(r.stack) ||
+                [])[1];
+              if (e) {
+                var t = document.getElementsByTagName("script");
+                for (var n in t) if (t[n].src == e) return t[n];
+              }
+              return null;
+            }
+          },
+          isActive: function (e, t, n) {
+            for (var r = "no-" + t; e; ) {
+              var a = e.classList;
+              if (a.contains(t)) return !0;
+              if (a.contains(r)) return !1;
+              e = e.parentElement;
+            }
+            return !!n;
+          },
+        },
+        languages: {
+          plain: r,
+          plaintext: r,
+          text: r,
+          txt: r,
+          extend: function (e, t) {
+            var n = a.util.clone(a.languages[e]);
+            for (var r in t) n[r] = t[r];
+            return n;
+          },
+          insertBefore: function (e, t, n, r) {
+            var i = (r = r || a.languages)[e],
+              s = {};
+            for (var l in i)
+              if (i.hasOwnProperty(l)) {
+                if (l == t)
+                  for (var o in n) n.hasOwnProperty(o) && (s[o] = n[o]);
+                n.hasOwnProperty(l) || (s[l] = i[l]);
+              }
+            var u = r[e];
+            return (
+              (r[e] = s),
+              a.languages.DFS(a.languages, function (t, n) {
+                n === u && t != e && (this[t] = s);
+              }),
+              s
+            );
+          },
+          DFS: function e(t, n, r, i) {
+            i = i || {};
+            var s = a.util.objId;
+            for (var l in t)
+              if (t.hasOwnProperty(l)) {
+                n.call(t, l, t[l], r || l);
+                var o = t[l],
+                  u = a.util.type(o);
+                "Object" !== u || i[s(o)]
+                  ? "Array" !== u || i[s(o)] || ((i[s(o)] = !0), e(o, n, l, i))
+                  : ((i[s(o)] = !0), e(o, n, null, i));
+              }
+          },
+        },
+        plugins: {},
+        highlightAll: function (e, t) {
+          a.highlightAllUnder(document, e, t);
+        },
+        highlightAllUnder: function (e, t, n) {
+          var r = {
+            callback: n,
+            container: e,
+            selector:
+              'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code',
+          };
+          a.hooks.run("before-highlightall", r),
+            (r.elements = Array.prototype.slice.apply(
+              r.container.querySelectorAll(r.selector)
+            )),
+            a.hooks.run("before-all-elements-highlight", r);
+          for (var i, s = 0; (i = r.elements[s++]); )
+            a.highlightElement(i, !0 === t, r.callback);
+        },
+        highlightElement: function (t, n, r) {
+          var i = a.util.getLanguage(t),
+            s = a.languages[i];
+          a.util.setLanguage(t, i);
+          var l = t.parentElement;
+          l && "pre" === l.nodeName.toLowerCase() && a.util.setLanguage(l, i);
+          var o = { element: t, language: i, grammar: s, code: t.textContent };
+          function u(e) {
+            (o.highlightedCode = e),
+              a.hooks.run("before-insert", o),
+              (o.element.innerHTML = o.highlightedCode),
+              a.hooks.run("after-highlight", o),
+              a.hooks.run("complete", o),
+              r && r.call(o.element);
+          }
+          if (
+            (a.hooks.run("before-sanity-check", o),
+            (l = o.element.parentElement) &&
+              "pre" === l.nodeName.toLowerCase() &&
+              !l.hasAttribute("tabindex") &&
+              l.setAttribute("tabindex", "0"),
+            !o.code)
+          )
+            return a.hooks.run("complete", o), void (r && r.call(o.element));
+          if ((a.hooks.run("before-highlight", o), o.grammar))
+            if (n && e.Worker) {
+              var c = new Worker(a.filename);
+              (c.onmessage = function (e) {
+                u(e.data);
+              }),
+                c.postMessage(
+                  JSON.stringify({
+                    language: o.language,
+                    code: o.code,
+                    immediateClose: !0,
+                  })
+                );
+            } else u(a.highlight(o.code, o.grammar, o.language));
+          else u(a.util.encode(o.code));
+        },
+        highlight: function (e, t, n) {
+          var r = { code: e, grammar: t, language: n };
+          if ((a.hooks.run("before-tokenize", r), !r.grammar))
+            throw new Error(
+              'The language "' + r.language + '" has no grammar.'
+            );
+          return (
+            (r.tokens = a.tokenize(r.code, r.grammar)),
+            a.hooks.run("after-tokenize", r),
+            i.stringify(a.util.encode(r.tokens), r.language)
+          );
+        },
+        tokenize: function (e, t) {
+          var n = t.rest;
+          if (n) {
+            for (var r in n) t[r] = n[r];
+            delete t.rest;
+          }
+          var u = new (function () {
+            var e = { value: null, prev: null, next: null },
+              t = { value: null, prev: e, next: null };
+            (e.next = t), (this.head = e), (this.tail = t), (this.length = 0);
+          })();
+          return (
+            l(u, u.head, e),
+            (function e(t, n, r, u, c, p) {
+              for (var g in r)
+                if (r.hasOwnProperty(g) && r[g]) {
+                  var d = r[g];
+                  d = Array.isArray(d) ? d : [d];
+                  for (var m = 0; m < d.length; ++m) {
+                    if (p && p.cause == g + "," + m) return;
+                    var f = d[m],
+                      h = f.inside,
+                      v = !!f.lookbehind,
+                      b = !!f.greedy,
+                      k = f.alias;
+                    if (b && !f.pattern.global) {
+                      var y = f.pattern.toString().match(/[imsuy]*$/)[0];
+                      f.pattern = RegExp(f.pattern.source, y + "g");
+                    }
+                    for (
+                      var x = f.pattern || f, w = u.next, P = c;
+                      w !== n.tail && !(p && P >= p.reach);
+                      P += w.value.length, w = w.next
+                    ) {
+                      var F = w.value;
+                      if (n.length > t.length) return;
+                      if (!(F instanceof i)) {
+                        var A,
+                          j = 1;
+                        if (b) {
+                          if (!(A = s(x, P, t, v)) || A.index >= t.length)
+                            break;
+                          var S = A.index,
+                            $ = A.index + A[0].length,
+                            E = P;
+                          for (E += w.value.length; S >= E; )
+                            (w = w.next), (E += w.value.length);
+                          if (
+                            ((E -= w.value.length),
+                            (P = E),
+                            w.value instanceof i)
+                          )
+                            continue;
+                          for (
+                            var C = w;
+                            C !== n.tail &&
+                            (E < $ || "string" == typeof C.value);
+                            C = C.next
+                          )
+                            j++, (E += C.value.length);
+                          j--, (F = t.slice(P, E)), (A.index -= P);
+                        } else if (!(A = s(x, 0, F, v))) continue;
+                        var S = A.index,
+                          L = A[0],
+                          z = F.slice(0, S),
+                          _ = F.slice(S + L.length),
+                          T = P + F.length;
+                        p && T > p.reach && (p.reach = T);
+                        var q = w.prev;
+                        z && ((q = l(n, q, z)), (P += z.length)), o(n, q, j);
+                        var N = new i(g, h ? a.tokenize(L, h) : L, k, L);
+                        if (((w = l(n, q, N)), _ && l(n, w, _), j > 1)) {
+                          var O = { cause: g + "," + m, reach: T };
+                          e(t, n, r, w.prev, P, O),
+                            p && O.reach > p.reach && (p.reach = O.reach);
+                        }
+                      }
+                    }
+                  }
+                }
+            })(e, u, t, u.head, 0),
+            (function (e) {
+              var t = [],
+                n = e.head.next;
+              for (; n !== e.tail; ) t.push(n.value), (n = n.next);
+              return t;
+            })(u)
+          );
+        },
+        hooks: {
+          all: {},
+          add: function (e, t) {
+            var n = a.hooks.all;
+            (n[e] = n[e] || []), n[e].push(t);
+          },
+          run: function (e, t) {
+            var n = a.hooks.all[e];
+            if (n && n.length) for (var r, i = 0; (r = n[i++]); ) r(t);
+          },
+        },
+        Token: i,
+      };
+    function i(e, t, n, r) {
+      (this.type = e),
+        (this.content = t),
+        (this.alias = n),
+        (this.length = 0 | (r || "").length);
+    }
+    function s(e, t, n, r) {
+      e.lastIndex = t;
+      var a = e.exec(n);
+      if (a && r && a[1]) {
+        var i = a[1].length;
+        (a.index += i), (a[0] = a[0].slice(i));
+      }
+      return a;
+    }
+    function l(e, t, n) {
+      var r = t.next,
+        a = { value: n, prev: t, next: r };
+      return (t.next = a), (r.prev = a), e.length++, a;
+    }
+    function o(e, t, n) {
+      for (var r = t.next, a = 0; a < n && r !== e.tail; a++) r = r.next;
+      (t.next = r), (r.prev = t), (e.length -= a);
+    }
+    if (
+      ((e.Prism = a),
+      (i.stringify = function e(t, n) {
+        if ("string" == typeof t) return t;
+        if (Array.isArray(t)) {
+          var r = "";
+          return (
+            t.forEach(function (t) {
+              r += e(t, n);
+            }),
+            r
+          );
+        }
+        var i = {
+            type: t.type,
+            content: e(t.content, n),
+            tag: "span",
+            classes: ["token", t.type],
+            attributes: {},
+            language: n,
+          },
+          s = t.alias;
+        s &&
+          (Array.isArray(s)
+            ? Array.prototype.push.apply(i.classes, s)
+            : i.classes.push(s)),
+          a.hooks.run("wrap", i);
+        var l = "";
+        for (var o in i.attributes)
+          l +=
+            " " +
+            o +
+            '="' +
+            (i.attributes[o] || "").replace(/"/g, "&quot;") +
+            '"';
+        return (
+          "<" +
+          i.tag +
+          ' class="' +
+          i.classes.join(" ") +
+          '"' +
+          l +
+          ">" +
+          i.content +
+          "</" +
+          i.tag +
+          ">"
+        );
+      }),
+      !e.document)
+    )
+      return e.addEventListener
+        ? (a.disableWorkerMessageHandler ||
+            e.addEventListener(
+              "message",
+              function (t) {
+                var n = JSON.parse(t.data),
+                  r = n.language,
+                  i = n.code,
+                  s = n.immediateClose;
+                e.postMessage(a.highlight(i, a.languages[r], r)),
+                  s && e.close();
+              },
+              !1
+            ),
+          a)
+        : a;
+    var u = a.util.currentScript();
+    function c() {
+      a.manual || a.highlightAll();
+    }
+    if (
+      (u &&
+        ((a.filename = u.src),
+        u.hasAttribute("data-manual") && (a.manual = !0)),
+      !a.manual)
+    ) {
+      var p = document.readyState;
+      "loading" === p || ("interactive" === p && u && u.defer)
+        ? document.addEventListener("DOMContentLoaded", c)
+        : window.requestAnimationFrame
+        ? window.requestAnimationFrame(c)
+        : window.setTimeout(c, 16);
+    }
+    return a;
+  })(_self);
+"undefined" != typeof module && module.exports && (module.exports = Prism),
+  "undefined" != typeof global && (global.Prism = Prism),
+  (Prism.languages.markup = {
+    comment: { pattern: /<!--(?:(?!<!--)[\s\S])*?-->/, greedy: !0 },
+    prolog: { pattern: /<\?[\s\S]+?\?>/, greedy: !0 },
+    doctype: {
+      pattern:
+        /<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,
+      greedy: !0,
+      inside: {
+        "internal-subset": {
+          pattern: /(^[^\[]*\[)[\s\S]+(?=\]>$)/,
+          lookbehind: !0,
+          greedy: !0,
+          inside: null,
+        },
+        string: { pattern: /"[^"]*"|'[^']*'/, greedy: !0 },
+        punctuation: /^<!|>$|[[\]]/,
+        "doctype-tag": /^DOCTYPE/i,
+        name: /[^\s<>'"]+/,
+      },
+    },
+    cdata: { pattern: /<!\[CDATA\[[\s\S]*?\]\]>/i, greedy: !0 },
+    tag: {
+      pattern:
+        /<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,
+      greedy: !0,
+      inside: {
+        tag: {
+          pattern: /^<\/?[^\s>\/]+/,
+          inside: { punctuation: /^<\/?/, namespace: /^[^\s>\/:]+:/ },
+        },
+        "special-attr": [],
+        "attr-value": {
+          pattern: /=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,
+          inside: {
+            punctuation: [
+              { pattern: /^=/, alias: "attr-equals" },
+              { pattern: /^(\s*)["']|["']$/, lookbehind: !0 },
+            ],
+          },
+        },
+        punctuation: /\/?>/,
+        "attr-name": {
+          pattern: /[^\s>\/]+/,
+          inside: { namespace: /^[^\s>\/:]+:/ },
+        },
+      },
+    },
+    entity: [
+      { pattern: /&[\da-z]{1,8};/i, alias: "named-entity" },
+      /&#x?[\da-f]{1,8};/i,
+    ],
+  }),
+  (Prism.languages.markup.tag.inside["attr-value"].inside.entity =
+    Prism.languages.markup.entity),
+  (Prism.languages.markup.doctype.inside["internal-subset"].inside =
+    Prism.languages.markup),
+  Prism.hooks.add("wrap", function (e) {
+    "entity" === e.type &&
+      (e.attributes.title = e.content.replace(/&amp;/, "&"));
+  }),
+  Object.defineProperty(Prism.languages.markup.tag, "addInlined", {
+    value: function (e, t) {
+      var n = {};
+      (n["language-" + t] = {
+        pattern: /(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,
+        lookbehind: !0,
+        inside: Prism.languages[t],
+      }),
+        (n.cdata = /^<!\[CDATA\[|\]\]>$/i);
+      var r = {
+        "included-cdata": { pattern: /<!\[CDATA\[[\s\S]*?\]\]>/i, inside: n },
+      };
+      r["language-" + t] = { pattern: /[\s\S]+/, inside: Prism.languages[t] };
+      var a = {};
+      (a[e] = {
+        pattern: RegExp(
+          /(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(
+            /__/g,
+            function () {
+              return e;
+            }
+          ),
+          "i"
+        ),
+        lookbehind: !0,
+        greedy: !0,
+        inside: r,
+      }),
+        Prism.languages.insertBefore("markup", "cdata", a);
+    },
+  }),
+  Object.defineProperty(Prism.languages.markup.tag, "addAttribute", {
+    value: function (e, t) {
+      Prism.languages.markup.tag.inside["special-attr"].push({
+        pattern: RegExp(
+          /(^|["'\s])/.source +
+            "(?:" +
+            e +
+            ")" +
+            /\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,
+          "i"
+        ),
+        lookbehind: !0,
+        inside: {
+          "attr-name": /^[^\s=]+/,
+          "attr-value": {
+            pattern: /=[\s\S]+/,
+            inside: {
+              value: {
+                pattern: /(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,
+                lookbehind: !0,
+                alias: [t, "language-" + t],
+                inside: Prism.languages[t],
+              },
+              punctuation: [{ pattern: /^=/, alias: "attr-equals" }, /"|'/],
+            },
+          },
+        },
+      });
+    },
+  }),
+  (Prism.languages.html = Prism.languages.markup),
+  (Prism.languages.mathml = Prism.languages.markup),
+  (Prism.languages.svg = Prism.languages.markup),
+  (Prism.languages.xml = Prism.languages.extend("markup", {})),
+  (Prism.languages.ssml = Prism.languages.xml),
+  (Prism.languages.atom = Prism.languages.xml),
+  (Prism.languages.rss = Prism.languages.xml),
+  (function (e) {
+    var t =
+      /(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;
+    (e.languages.css = {
+      comment: /\/\*[\s\S]*?\*\//,
+      atrule: {
+        pattern: RegExp(
+          "@[\\w-](?:" +
+            /[^;{\s"']|\s+(?!\s)/.source +
+            "|" +
+            t.source +
+            ")*?" +
+            /(?:;|(?=\s*\{))/.source
+        ),
+        inside: {
+          rule: /^@[\w-]+/,
+          "selector-function-argument": {
+            pattern:
+              /(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,
+            lookbehind: !0,
+            alias: "selector",
+          },
+          keyword: {
+            pattern: /(^|[^\w-])(?:and|not|only|or)(?![\w-])/,
+            lookbehind: !0,
+          },
+        },
+      },
+      url: {
+        pattern: RegExp(
+          "\\burl\\((?:" +
+            t.source +
+            "|" +
+            /(?:[^\\\r\n()"']|\\[\s\S])*/.source +
+            ")\\)",
+          "i"
+        ),
+        greedy: !0,
+        inside: {
+          function: /^url/i,
+          punctuation: /^\(|\)$/,
+          string: { pattern: RegExp("^" + t.source + "$"), alias: "url" },
+        },
+      },
+      selector: {
+        pattern: RegExp(
+          "(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|" +
+            t.source +
+            ")*(?=\\s*\\{)"
+        ),
+        lookbehind: !0,
+      },
+      string: { pattern: t, greedy: !0 },
+      property: {
+        pattern:
+          /(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,
+        lookbehind: !0,
+      },
+      important: /!important\b/i,
+      function: { pattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i, lookbehind: !0 },
+      punctuation: /[(){};:,]/,
+    }),
+      (e.languages.css.atrule.inside.rest = e.languages.css);
+    var n = e.languages.markup;
+    n && (n.tag.addInlined("style", "css"), n.tag.addAttribute("style", "css"));
+  })(Prism),
+  (Prism.languages.clike = {
+    comment: [
+      {
+        pattern: /(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,
+        lookbehind: !0,
+        greedy: !0,
+      },
+      { pattern: /(^|[^\\:])\/\/.*/, lookbehind: !0, greedy: !0 },
+    ],
+    string: {
+      pattern: /(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,
+      greedy: !0,
+    },
+    "class-name": {
+      pattern:
+        /(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,
+      lookbehind: !0,
+      inside: { punctuation: /[.\\]/ },
+    },
+    keyword:
+      /\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,
+    boolean: /\b(?:false|true)\b/,
+    function: /\b\w+(?=\()/,
+    number: /\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,
+    operator: /[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,
+    punctuation: /[{}[\];(),.:]/,
+  }),
+  (Prism.languages.javascript = Prism.languages.extend("clike", {
+    "class-name": [
+      Prism.languages.clike["class-name"],
+      {
+        pattern:
+          /(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,
+        lookbehind: !0,
+      },
+    ],
+    keyword: [
+      { pattern: /((?:^|\})\s*)catch\b/, lookbehind: !0 },
+      {
+        pattern:
+          /(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,
+        lookbehind: !0,
+      },
+    ],
+    function:
+      /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,
+    number: {
+      pattern: RegExp(
+        /(^|[^\w$])/.source +
+          "(?:" +
+          /NaN|Infinity/.source +
+          "|" +
+          /0[bB][01]+(?:_[01]+)*n?/.source +
+          "|" +
+          /0[oO][0-7]+(?:_[0-7]+)*n?/.source +
+          "|" +
+          /0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source +
+          "|" +
+          /\d+(?:_\d+)*n/.source +
+          "|" +
+          /(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/
+            .source +
+          ")" +
+          /(?![\w$])/.source
+      ),
+      lookbehind: !0,
+    },
+    operator:
+      /--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/,
+  })),
+  (Prism.languages.javascript["class-name"][0].pattern =
+    /(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/),
+  Prism.languages.insertBefore("javascript", "keyword", {
+    regex: {
+      pattern: RegExp(
+        /((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source +
+          /\//.source +
+          "(?:" +
+          /(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/
+            .source +
+          "|" +
+          /(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/
+            .source +
+          ")" +
+          /(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/
+            .source
+      ),
+      lookbehind: !0,
+      greedy: !0,
+      inside: {
+        "regex-source": {
+          pattern: /^(\/)[\s\S]+(?=\/[a-z]*$)/,
+          lookbehind: !0,
+          alias: "language-regex",
+          inside: Prism.languages.regex,
+        },
+        "regex-delimiter": /^\/|\/$/,
+        "regex-flags": /^[a-z]+$/,
+      },
+    },
+    "function-variable": {
+      pattern:
+        /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,
+      alias: "function",
+    },
+    parameter: [
+      {
+        pattern:
+          /(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,
+        lookbehind: !0,
+        inside: Prism.languages.javascript,
+      },
+      {
+        pattern:
+          /(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,
+        lookbehind: !0,
+        inside: Prism.languages.javascript,
+      },
+      {
+        pattern:
+          /(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,
+        lookbehind: !0,
+        inside: Prism.languages.javascript,
+      },
+      {
+        pattern:
+          /((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,
+        lookbehind: !0,
+        inside: Prism.languages.javascript,
+      },
+    ],
+    constant: /\b[A-Z](?:[A-Z_]|\dx?)*\b/,
+  }),
+  Prism.languages.insertBefore("javascript", "string", {
+    hashbang: { pattern: /^#!.*/, greedy: !0, alias: "comment" },
+    "template-string": {
+      pattern:
+        /`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,
+      greedy: !0,
+      inside: {
+        "template-punctuation": { pattern: /^`|`$/, alias: "string" },
+        interpolation: {
+          pattern:
+            /((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,
+          lookbehind: !0,
+          inside: {
+            "interpolation-punctuation": {
+              pattern: /^\$\{|\}$/,
+              alias: "punctuation",
+            },
+            rest: Prism.languages.javascript,
+          },
+        },
+        string: /[\s\S]+/,
+      },
+    },
+    "string-property": {
+      pattern:
+        /((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,
+      lookbehind: !0,
+      greedy: !0,
+      alias: "property",
+    },
+  }),
+  Prism.languages.insertBefore("javascript", "operator", {
+    "literal-property": {
+      pattern:
+        /((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,
+      lookbehind: !0,
+      alias: "property",
+    },
+  }),
+  Prism.languages.markup &&
+    (Prism.languages.markup.tag.addInlined("script", "javascript"),
+    Prism.languages.markup.tag.addAttribute(
+      /on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/
+        .source,
+      "javascript"
+    )),
+  (Prism.languages.js = Prism.languages.javascript),
+  (function (e) {
+    e.languages.diff = {
+      coord: [/^(?:\*{3}|-{3}|\+{3}).*$/m, /^@@.*@@$/m, /^\d.*$/m],
+    };
+    var t = {
+      "deleted-sign": "-",
+      "deleted-arrow": "<",
+      "inserted-sign": "+",
+      "inserted-arrow": ">",
+      unchanged: " ",
+      diff: "!",
+    };
+    Object.keys(t).forEach(function (n) {
+      var r = t[n],
+        a = [];
+      /^\w+$/.test(n) || a.push(/\w+/.exec(n)[0]),
+        "diff" === n && a.push("bold"),
+        (e.languages.diff[n] = {
+          pattern: RegExp("^(?:[" + r + "].*(?:\r\n?|\n|(?![\\s\\S])))+", "m"),
+          alias: a,
+          inside: {
+            line: { pattern: /(.)(?=[\s\S]).*(?:\r\n?|\n)?/, lookbehind: !0 },
+            prefix: { pattern: /[\s\S]/, alias: /\w+/.exec(n)[0] },
+          },
+        });
+    }),
+      Object.defineProperty(e.languages.diff, "PREFIXES", { value: t });
+  })(Prism),
+  (function () {
+    if (
+      void 0 !== Prism &&
+      "undefined" != typeof document &&
+      document.querySelector
+    ) {
+      var e,
+        t = "linkable-line-numbers",
+        n = /\n(?!$)/g,
+        r = function () {
+          if (void 0 === e) {
+            var t = document.createElement("div");
+            (t.style.fontSize = "13px"),
+              (t.style.lineHeight = "1.5"),
+              (t.style.padding = "0"),
+              (t.style.border = "0"),
+              (t.innerHTML = "&nbsp;<br />&nbsp;"),
+              document.body.appendChild(t),
+              (e = 38 === t.offsetHeight),
+              document.body.removeChild(t);
+          }
+          return e;
+        },
+        a = !0;
+      Prism.plugins.lineHighlight = {
+        highlightLines: function (e, i, u) {
+          var c = (i =
+              "string" == typeof i ? i : e.getAttribute("data-line") || "")
+              .replace(/\s+/g, "")
+              .split(",")
+              .filter(Boolean),
+            p = +e.getAttribute("data-line-offset") || 0,
+            g = (r() ? parseInt : parseFloat)(getComputedStyle(e).lineHeight),
+            d = Prism.util.isActive(e, "line-numbers"),
+            m = e.querySelector("code"),
+            f = d ? e : m || e,
+            h = [],
+            v = m.textContent.match(n),
+            b = v ? v.length + 1 : 1,
+            k =
+              m && f != m
+                ? (function (e, t) {
+                    var n = getComputedStyle(e),
+                      r = getComputedStyle(t);
+                    function a(e) {
+                      return +e.substr(0, e.length - 2);
+                    }
+                    return (
+                      t.offsetTop +
+                      a(r.borderTopWidth) +
+                      a(r.paddingTop) -
+                      a(n.paddingTop)
+                    );
+                  })(e, m)
+                : 0;
+          c.forEach(function (t) {
+            var n = t.split("-"),
+              r = +n[0],
+              a = +n[1] || r;
+            if (!((a = Math.min(b + p, a)) < r)) {
+              var i =
+                e.querySelector('.line-highlight[data-range="' + t + '"]') ||
+                document.createElement("div");
+              if (
+                (h.push(function () {
+                  i.setAttribute("aria-hidden", "true"),
+                    i.setAttribute("data-range", t),
+                    (i.className = (u || "") + " line-highlight");
+                }),
+                d && Prism.plugins.lineNumbers)
+              ) {
+                var s = Prism.plugins.lineNumbers.getLine(e, r),
+                  l = Prism.plugins.lineNumbers.getLine(e, a);
+                if (s) {
+                  var o = s.offsetTop + k + "px";
+                  h.push(function () {
+                    i.style.top = o;
+                  });
+                }
+                if (l) {
+                  var c = l.offsetTop - s.offsetTop + l.offsetHeight + "px";
+                  h.push(function () {
+                    i.style.height = c;
+                  });
+                }
+              } else
+                h.push(function () {
+                  i.setAttribute("data-start", String(r)),
+                    a > r && i.setAttribute("data-end", String(a)),
+                    (i.style.top = (r - p - 1) * g + k + "px"),
+                    (i.textContent = new Array(a - r + 2).join(" \n"));
+                });
+              h.push(function () {
+                i.style.width = e.scrollWidth + "px";
+              }),
+                h.push(function () {
+                  f.appendChild(i);
+                });
+            }
+          });
+          var y = e.id;
+          if (d && Prism.util.isActive(e, t) && y) {
+            l(e, t) ||
+              h.push(function () {
+                e.classList.add(t);
+              });
+            var x = parseInt(e.getAttribute("data-start") || "1");
+            s(".line-numbers-rows > span", e).forEach(function (e, t) {
+              var n = t + x;
+              e.onclick = function () {
+                var e = y + "." + n;
+                (a = !1),
+                  (location.hash = e),
+                  setTimeout(function () {
+                    a = !0;
+                  }, 1);
+              };
+            });
+          }
+          return function () {
+            h.forEach(o);
+          };
+        },
+      };
+      var i = 0;
+      Prism.hooks.add("before-sanity-check", function (e) {
+        var t = e.element.parentElement;
+        if (u(t)) {
+          var n = 0;
+          s(".line-highlight", t).forEach(function (e) {
+            (n += e.textContent.length), e.parentNode.removeChild(e);
+          }),
+            n &&
+              /^(?: \n)+$/.test(e.code.slice(-n)) &&
+              (e.code = e.code.slice(0, -n));
+        }
+      }),
+        Prism.hooks.add("complete", function e(t) {
+          var n = t.element.parentElement;
+          if (u(n)) {
+            clearTimeout(i);
+            var r = Prism.plugins.lineNumbers,
+              a = t.plugins && t.plugins.lineNumbers;
+            if (l(n, "line-numbers") && r && !a)
+              Prism.hooks.add("line-numbers", e);
+            else
+              Prism.plugins.lineHighlight.highlightLines(n)(),
+                (i = setTimeout(c, 1));
+          }
+        }),
+        window.addEventListener("hashchange", c),
+        window.addEventListener("resize", function () {
+          s("pre")
+            .filter(u)
+            .map(function (e) {
+              return Prism.plugins.lineHighlight.highlightLines(e);
+            })
+            .forEach(o);
+        });
+    }
+    function s(e, t) {
+      return Array.prototype.slice.call((t || document).querySelectorAll(e));
+    }
+    function l(e, t) {
+      return e.classList.contains(t);
+    }
+    function o(e) {
+      e();
+    }
+    function u(e) {
+      return (
+        !(!e || !/pre/i.test(e.nodeName)) &&
+        (!!e.hasAttribute("data-line") ||
+          !(!e.id || !Prism.util.isActive(e, t)))
+      );
+    }
+    function c() {
+      var e = location.hash.slice(1);
+      s(".temporary.line-highlight").forEach(function (e) {
+        e.parentNode.removeChild(e);
+      });
+      var t = (e.match(/\.([\d,-]+)$/) || [, ""])[1];
+      if (t && !document.getElementById(e)) {
+        var n = e.slice(0, e.lastIndexOf(".")),
+          r = document.getElementById(n);
+        if (r)
+          r.hasAttribute("data-line") || r.setAttribute("data-line", ""),
+            Prism.plugins.lineHighlight.highlightLines(r, t, "temporary ")(),
+            a &&
+              document
+                .querySelector(".temporary.line-highlight")
+                .scrollIntoView();
+      }
+    }
+  })(),
+  (function () {
+    if (void 0 !== Prism && "undefined" != typeof document) {
+      var e = /\n(?!$)/g,
+        t = (Prism.plugins.lineNumbers = {
+          getLine: function (e, t) {
+            if ("PRE" === e.tagName && e.classList.contains("line-numbers")) {
+              var n = e.querySelector(".line-numbers-rows");
+              if (n) {
+                var r = parseInt(e.getAttribute("data-start"), 10) || 1,
+                  a = r + (n.children.length - 1);
+                t < r && (t = r), t > a && (t = a);
+                var i = t - r;
+                return n.children[i];
+              }
+            }
+          },
+          resize: function (e) {
+            r([e]);
+          },
+          assumeViewportIndependence: !0,
+        }),
+        n = void 0;
+      window.addEventListener("resize", function () {
+        (t.assumeViewportIndependence && n === window.innerWidth) ||
+          ((n = window.innerWidth),
+          r(
+            Array.prototype.slice.call(
+              document.querySelectorAll("pre.line-numbers")
+            )
+          ));
+      }),
+        Prism.hooks.add("complete", function (t) {
+          if (t.code) {
+            var n = t.element,
+              a = n.parentNode;
+            if (
+              a &&
+              /pre/i.test(a.nodeName) &&
+              !n.querySelector(".line-numbers-rows") &&
+              Prism.util.isActive(n, "line-numbers")
+            ) {
+              n.classList.remove("line-numbers"),
+                a.classList.add("line-numbers");
+              var i,
+                s = t.code.match(e),
+                l = s ? s.length + 1 : 1,
+                o = new Array(l + 1).join("<span></span>");
+              (i = document.createElement("span")).setAttribute(
+                "aria-hidden",
+                "true"
+              ),
+                (i.className = "line-numbers-rows"),
+                (i.innerHTML = o),
+                a.hasAttribute("data-start") &&
+                  (a.style.counterReset =
+                    "linenumber " +
+                    (parseInt(a.getAttribute("data-start"), 10) - 1)),
+                t.element.appendChild(i),
+                r([a]),
+                Prism.hooks.run("line-numbers", t);
+            }
+          }
+        }),
+        Prism.hooks.add("line-numbers", function (e) {
+          (e.plugins = e.plugins || {}), (e.plugins.lineNumbers = !0);
+        });
+    }
+    function r(t) {
+      if (
+        0 !=
+        (t = t.filter(function (e) {
+          var t = (function (e) {
+            if (!e) return null;
+            return window.getComputedStyle
+              ? getComputedStyle(e)
+              : e.currentStyle || null;
+          })(e)["white-space"];
+          return "pre-wrap" === t || "pre-line" === t;
+        })).length
+      ) {
+        var n = t
+          .map(function (t) {
+            var n = t.querySelector("code"),
+              r = t.querySelector(".line-numbers-rows");
+            if (n && r) {
+              var a = t.querySelector(".line-numbers-sizer"),
+                i = n.textContent.split(e);
+              a ||
+                (((a = document.createElement("span")).className =
+                  "line-numbers-sizer"),
+                n.appendChild(a)),
+                (a.innerHTML = "0"),
+                (a.style.display = "block");
+              var s = a.getBoundingClientRect().height;
+              return (
+                (a.innerHTML = ""),
+                {
+                  element: t,
+                  lines: i,
+                  lineHeights: [],
+                  oneLinerHeight: s,
+                  sizer: a,
+                }
+              );
+            }
+          })
+          .filter(Boolean);
+        n.forEach(function (e) {
+          var t = e.sizer,
+            n = e.lines,
+            r = e.lineHeights,
+            a = e.oneLinerHeight;
+          (r[n.length - 1] = void 0),
+            n.forEach(function (e, n) {
+              if (e && e.length > 1) {
+                var i = t.appendChild(document.createElement("span"));
+                (i.style.display = "block"), (i.textContent = e);
+              } else r[n] = a;
+            });
+        }),
+          n.forEach(function (e) {
+            for (
+              var t = e.sizer, n = e.lineHeights, r = 0, a = 0;
+              a < n.length;
+              a++
+            )
+              void 0 === n[a] &&
+                (n[a] = t.children[r++].getBoundingClientRect().height);
+          }),
+          n.forEach(function (e) {
+            var t = e.sizer,
+              n = e.element.querySelector(".line-numbers-rows");
+            (t.style.display = "none"),
+              (t.innerHTML = ""),
+              e.lineHeights.forEach(function (e, t) {
+                n.children[t].style.height = e + "px";
+              });
+          });
+      }
+    }
+  })(),
+  (function () {
+    if (void 0 !== Prism && "undefined" != typeof document) {
+      var e = {
+          javascript: "clike",
+          actionscript: "javascript",
+          apex: ["clike", "sql"],
+          arduino: "cpp",
+          aspnet: ["markup", "csharp"],
+          birb: "clike",
+          bison: "c",
+          c: "clike",
+          csharp: "clike",
+          cpp: "c",
+          cfscript: "clike",
+          chaiscript: ["clike", "cpp"],
+          cilkc: "c",
+          cilkcpp: "cpp",
+          coffeescript: "javascript",
+          crystal: "ruby",
+          "css-extras": "css",
+          d: "clike",
+          dart: "clike",
+          django: "markup-templating",
+          ejs: ["javascript", "markup-templating"],
+          etlua: ["lua", "markup-templating"],
+          erb: ["ruby", "markup-templating"],
+          fsharp: "clike",
+          "firestore-security-rules": "clike",
+          flow: "javascript",
+          ftl: "markup-templating",
+          gml: "clike",
+          glsl: "c",
+          go: "clike",
+          gradle: "clike",
+          groovy: "clike",
+          haml: "ruby",
+          handlebars: "markup-templating",
+          haxe: "clike",
+          hlsl: "c",
+          idris: "haskell",
+          java: "clike",
+          javadoc: ["markup", "java", "javadoclike"],
+          jolie: "clike",
+          jsdoc: ["javascript", "javadoclike", "typescript"],
+          "js-extras": "javascript",
+          json5: "json",
+          jsonp: "json",
+          "js-templates": "javascript",
+          kotlin: "clike",
+          latte: ["clike", "markup-templating", "php"],
+          less: "css",
+          lilypond: "scheme",
+          liquid: "markup-templating",
+          markdown: "markup",
+          "markup-templating": "markup",
+          mongodb: "javascript",
+          n4js: "javascript",
+          objectivec: "c",
+          opencl: "c",
+          parser: "markup",
+          php: "markup-templating",
+          phpdoc: ["php", "javadoclike"],
+          "php-extras": "php",
+          plsql: "sql",
+          processing: "clike",
+          protobuf: "clike",
+          pug: ["markup", "javascript"],
+          purebasic: "clike",
+          purescript: "haskell",
+          qsharp: "clike",
+          qml: "javascript",
+          qore: "clike",
+          racket: "scheme",
+          cshtml: ["markup", "csharp"],
+          jsx: ["markup", "javascript"],
+          tsx: ["jsx", "typescript"],
+          reason: "clike",
+          ruby: "clike",
+          sass: "css",
+          scss: "css",
+          scala: "java",
+          "shell-session": "bash",
+          smarty: "markup-templating",
+          solidity: "clike",
+          soy: "markup-templating",
+          sparql: "turtle",
+          sqf: "clike",
+          squirrel: "clike",
+          stata: ["mata", "java", "python"],
+          "t4-cs": ["t4-templating", "csharp"],
+          "t4-vb": ["t4-templating", "vbnet"],
+          tap: "yaml",
+          tt2: ["clike", "markup-templating"],
+          textile: "markup",
+          twig: "markup-templating",
+          typescript: "javascript",
+          v: "clike",
+          vala: "clike",
+          vbnet: "basic",
+          velocity: "markup",
+          wiki: "markup",
+          xeora: "markup",
+          "xml-doc": "markup",
+          xquery: "markup",
+        },
+        t = {
+          html: "markup",
+          xml: "markup",
+          svg: "markup",
+          mathml: "markup",
+          ssml: "markup",
+          atom: "markup",
+          rss: "markup",
+          js: "javascript",
+          g4: "antlr4",
+          ino: "arduino",
+          "arm-asm": "armasm",
+          art: "arturo",
+          adoc: "asciidoc",
+          avs: "avisynth",
+          avdl: "avro-idl",
+          gawk: "awk",
+          sh: "bash",
+          shell: "bash",
+          shortcode: "bbcode",
+          rbnf: "bnf",
+          oscript: "bsl",
+          cs: "csharp",
+          dotnet: "csharp",
+          cfc: "cfscript",
+          "cilk-c": "cilkc",
+          "cilk-cpp": "cilkcpp",
+          cilk: "cilkcpp",
+          coffee: "coffeescript",
+          conc: "concurnas",
+          jinja2: "django",
+          "dns-zone": "dns-zone-file",
+          dockerfile: "docker",
+          gv: "dot",
+          eta: "ejs",
+          xlsx: "excel-formula",
+          xls: "excel-formula",
+          gamemakerlanguage: "gml",
+          po: "gettext",
+          gni: "gn",
+          ld: "linker-script",
+          "go-mod": "go-module",
+          hbs: "handlebars",
+          mustache: "handlebars",
+          hs: "haskell",
+          idr: "idris",
+          gitignore: "ignore",
+          hgignore: "ignore",
+          npmignore: "ignore",
+          webmanifest: "json",
+          kt: "kotlin",
+          kts: "kotlin",
+          kum: "kumir",
+          tex: "latex",
+          context: "latex",
+          ly: "lilypond",
+          emacs: "lisp",
+          elisp: "lisp",
+          "emacs-lisp": "lisp",
+          md: "markdown",
+          moon: "moonscript",
+          n4jsd: "n4js",
+          nani: "naniscript",
+          objc: "objectivec",
+          qasm: "openqasm",
+          objectpascal: "pascal",
+          px: "pcaxis",
+          pcode: "peoplecode",
+          plantuml: "plant-uml",
+          pq: "powerquery",
+          mscript: "powerquery",
+          pbfasm: "purebasic",
+          purs: "purescript",
+          py: "python",
+          qs: "qsharp",
+          rkt: "racket",
+          razor: "cshtml",
+          rpy: "renpy",
+          res: "rescript",
+          robot: "robotframework",
+          rb: "ruby",
+          "sh-session": "shell-session",
+          shellsession: "shell-session",
+          smlnj: "sml",
+          sol: "solidity",
+          sln: "solution-file",
+          rq: "sparql",
+          sclang: "supercollider",
+          t4: "t4-cs",
+          trickle: "tremor",
+          troy: "tremor",
+          trig: "turtle",
+          ts: "typescript",
+          tsconfig: "typoscript",
+          uscript: "unrealscript",
+          uc: "unrealscript",
+          url: "uri",
+          vb: "visual-basic",
+          vba: "visual-basic",
+          webidl: "web-idl",
+          mathematica: "wolfram",
+          nb: "wolfram",
+          wl: "wolfram",
+          xeoracube: "xeora",
+          yml: "yaml",
+        },
+        n = {},
+        r =
+          (Prism.util.currentScript(),
+          (Prism.plugins.autoloader = {
+            languages_path: "/public/assets/prism/components/",
+            use_minified: !0,
+            loadLanguages: i,
+          }));
+      Prism.hooks.add("complete", function (e) {
+        var t = e.element,
+          n = e.language;
+        if (t && n && "none" !== n) {
+          var r = (function (e) {
+            var t = (e.getAttribute("data-dependencies") || "").trim();
+            if (!t) {
+              var n = e.parentElement;
+              n &&
+                "pre" === n.tagName.toLowerCase() &&
+                (t = (n.getAttribute("data-dependencies") || "").trim());
+            }
+            return t ? t.split(/\s*,\s*/g) : [];
+          })(t);
+          /^diff-./i.test(n)
+            ? (r.push("diff"), r.push(n.substr("diff-".length)))
+            : r.push(n),
+            r.every(a) ||
+              i(r, function () {
+                Prism.highlightElement(t);
+              });
+        }
+      });
+    }
+    function a(e) {
+      if (e.indexOf("!") >= 0) return !1;
+      if ((e = t[e] || e) in Prism.languages) return !0;
+      var r = n[e];
+      return r && !r.error && !1 === r.loading;
+    }
+    function i(l, o, u) {
+      "string" == typeof l && (l = [l]);
+      var c = l.length,
+        p = 0,
+        g = !1;
+      function d() {
+        g || (++p === c && o && o(l));
+      }
+      0 !== c
+        ? l.forEach(function (l) {
+            !(function (l, o, u) {
+              var c = l.indexOf("!") >= 0;
+              function p() {
+                var e = n[l];
+                e || (e = n[l] = { callbacks: [] }),
+                  e.callbacks.push({ success: o, error: u }),
+                  !c && a(l)
+                    ? s(l, "success")
+                    : !c && e.error
+                    ? s(l, "error")
+                    : (!c && e.loading) ||
+                      ((e.loading = !0),
+                      (e.error = !1),
+                      (function (e, t, n) {
+                        var r = document.createElement("script");
+                        (r.src = e),
+                          (r.async = !0),
+                          (r.onload = function () {
+                            document.body.removeChild(r), t && t();
+                          }),
+                          (r.onerror = function () {
+                            document.body.removeChild(r), n && n();
+                          }),
+                          document.body.appendChild(r);
+                      })(
+                        (function (e) {
+                          return (
+                            r.languages_path +
+                            "prism-" +
+                            e +
+                            (r.use_minified ? ".min" : "") +
+                            ".js"
+                          );
+                        })(l),
+                        function () {
+                          (e.loading = !1), s(l, "success");
+                        },
+                        function () {
+                          (e.loading = !1), (e.error = !0), s(l, "error");
+                        }
+                      ));
+              }
+              (l = l.replace("!", "")), (l = t[l] || l);
+              var g = e[l];
+              g && g.length ? i(g, p, u) : p();
+            })(l, d, function () {
+              g || ((g = !0), u && u(l));
+            });
+          })
+        : o && setTimeout(o, 0);
+    }
+    function s(e, t) {
+      if (n[e]) {
+        for (var r = n[e].callbacks, a = 0, i = r.length; a < i; a++) {
+          var s = r[a][t];
+          s && setTimeout(s, 0);
+        }
+        r.length = 0;
+      }
+    }
+  })(),
+  (function () {
+    if (void 0 !== Prism) {
+      var e =
+          Object.assign ||
+          function (e, t) {
+            for (var n in t) t.hasOwnProperty(n) && (e[n] = t[n]);
+            return e;
+          },
+        t = {
+          "remove-trailing": "boolean",
+          "remove-indent": "boolean",
+          "left-trim": "boolean",
+          "right-trim": "boolean",
+          "break-lines": "number",
+          indent: "number",
+          "remove-initial-line-feed": "boolean",
+          "tabs-to-spaces": "number",
+          "spaces-to-tabs": "number",
+        };
+      (n.prototype = {
+        setDefaults: function (t) {
+          this.defaults = e(this.defaults, t);
+        },
+        normalize: function (t, n) {
+          for (var r in (n = e(this.defaults, n))) {
+            var a = r.replace(/-(\w)/g, function (e, t) {
+              return t.toUpperCase();
+            });
+            "normalize" !== r &&
+              "setDefaults" !== a &&
+              n[r] &&
+              this[a] &&
+              (t = this[a].call(this, t, n[r]));
+          }
+          return t;
+        },
+        leftTrim: function (e) {
+          return e.replace(/^\s+/, "");
+        },
+        rightTrim: function (e) {
+          return e.replace(/\s+$/, "");
+        },
+        tabsToSpaces: function (e, t) {
+          return (t = 0 | t || 4), e.replace(/\t/g, new Array(++t).join(" "));
+        },
+        spacesToTabs: function (e, t) {
+          return (t = 0 | t || 4), e.replace(RegExp(" {" + t + "}", "g"), "\t");
+        },
+        removeTrailing: function (e) {
+          return e.replace(/\s*?$/gm, "");
+        },
+        removeInitialLineFeed: function (e) {
+          return e.replace(/^(?:\r?\n|\r)/, "");
+        },
+        removeIndent: function (e) {
+          var t = e.match(/^[^\S\n\r]*(?=\S)/gm);
+          return t && t[0].length
+            ? (t.sort(function (e, t) {
+                return e.length - t.length;
+              }),
+              t[0].length ? e.replace(RegExp("^" + t[0], "gm"), "") : e)
+            : e;
+        },
+        indent: function (e, t) {
+          return e.replace(
+            /^[^\S\n\r]*(?=\S)/gm,
+            new Array(++t).join("\t") + "$&"
+          );
+        },
+        breakLines: function (e, t) {
+          t = !0 === t ? 80 : 0 | t || 80;
+          for (var n = e.split("\n"), a = 0; a < n.length; ++a)
+            if (!(r(n[a]) <= t)) {
+              for (
+                var i = n[a].split(/(\s+)/g), s = 0, l = 0;
+                l < i.length;
+                ++l
+              ) {
+                var o = r(i[l]);
+                (s += o) > t && ((i[l] = "\n" + i[l]), (s = o));
+              }
+              n[a] = i.join("");
+            }
+          return n.join("\n");
+        },
+      }),
+        "undefined" != typeof module && module.exports && (module.exports = n),
+        (Prism.plugins.NormalizeWhitespace = new n({
+          "remove-trailing": !0,
+          "remove-indent": !0,
+          "left-trim": !0,
+          "right-trim": !0,
+        })),
+        Prism.hooks.add("before-sanity-check", function (e) {
+          var n = Prism.plugins.NormalizeWhitespace;
+          if (
+            (!e.settings || !1 !== e.settings["whitespace-normalization"]) &&
+            Prism.util.isActive(e.element, "whitespace-normalization", !0)
+          )
+            if ((e.element && e.element.parentNode) || !e.code) {
+              var r = e.element.parentNode;
+              if (e.code && r && "pre" === r.nodeName.toLowerCase()) {
+                for (var a in (null == e.settings && (e.settings = {}), t))
+                  if (Object.hasOwnProperty.call(t, a)) {
+                    var i = t[a];
+                    if (r.hasAttribute("data-" + a))
+                      try {
+                        var s = JSON.parse(
+                          r.getAttribute("data-" + a) || "true"
+                        );
+                        typeof s === i && (e.settings[a] = s);
+                      } catch (e) {}
+                  }
+                for (
+                  var l = r.childNodes, o = "", u = "", c = !1, p = 0;
+                  p < l.length;
+                  ++p
+                ) {
+                  var g = l[p];
+                  g == e.element
+                    ? (c = !0)
+                    : "#text" === g.nodeName &&
+                      (c ? (u += g.nodeValue) : (o += g.nodeValue),
+                      r.removeChild(g),
+                      --p);
+                }
+                if (e.element.children.length && Prism.plugins.KeepMarkup) {
+                  var d = o + e.element.innerHTML + u;
+                  (e.element.innerHTML = n.normalize(d, e.settings)),
+                    (e.code = e.element.textContent);
+                } else
+                  (e.code = o + e.code + u),
+                    (e.code = n.normalize(e.code, e.settings));
+              }
+            } else e.code = n.normalize(e.code, e.settings);
+        });
+    }
+    function n(t) {
+      this.defaults = e({}, t);
+    }
+    function r(e) {
+      for (var t = 0, n = 0; n < e.length; ++n)
+        e.charCodeAt(n) == "\t".charCodeAt(0) && (t += 3);
+      return e.length + t;
+    }
+  })(),
+  (function () {
+    if (void 0 !== Prism) {
+      var e = /^diff-([\w-]+)/i,
+        t =
+          /<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/g,
+        n = RegExp(
+          /(?:__|[^\r\n<])*(?:\r\n?|\n|(?:__|[^\r\n<])(?![^\r\n]))/.source.replace(
+            /__/g,
+            function () {
+              return t.source;
+            }
+          ),
+          "gi"
+        ),
+        r = !1;
+      Prism.hooks.add("before-sanity-check", function (t) {
+        var n = t.language;
+        e.test(n) &&
+          !t.grammar &&
+          (t.grammar = Prism.languages[n] = Prism.languages.diff);
+      }),
+        Prism.hooks.add("before-tokenize", function (t) {
+          r ||
+            Prism.languages.diff ||
+            Prism.plugins.autoloader ||
+            ((r = !0),
+            console.warn(
+              "Prism's Diff Highlight plugin requires the Diff language definition (prism-diff.js).Make sure the language definition is loaded or use Prism's Autoloader plugin."
+            ));
+          var n = t.language;
+          e.test(n) &&
+            !Prism.languages[n] &&
+            (Prism.languages[n] = Prism.languages.diff);
+        }),
+        Prism.hooks.add("wrap", function (r) {
+          var a, i;
+          if ("diff" !== r.language) {
+            var s = e.exec(r.language);
+            if (!s) return;
+            (a = s[1]), (i = Prism.languages[a]);
+          }
+          var l = Prism.languages.diff && Prism.languages.diff.PREFIXES;
+          if (l && r.type in l) {
+            var o,
+              u = r.content
+                .replace(t, "")
+                .replace(/&lt;/g, "<")
+                .replace(/&amp;/g, "&"),
+              c = u.replace(/(^|[\r\n])./g, "$1");
+            o = i ? Prism.highlight(c, i, a) : Prism.util.encode(c);
+            var p,
+              g = new Prism.Token("prefix", l[r.type], [/\w+/.exec(r.type)[0]]),
+              d = Prism.Token.stringify(g, r.language),
+              m = [];
+            for (n.lastIndex = 0; (p = n.exec(o)); ) m.push(d + p[0]);
+            /(?:^|[\r\n]).$/.test(u) && m.push(d),
+              (r.content = m.join("")),
+              i && r.classes.push("language-" + a);
+          }
+        });
+    }
+  })();


@@ -328,9 +328,28 @@
     terser "^5.14.1"
     transform-modules-eumd "^1.0.0"
 
-"@ethicdevs/react-monolith@^1.7.4":
-  version "1.7.4"
-  resolved "https://registry.yarnpkg.com/@ethicdevs/react-monolith/-/react-monolith-1.7.4.tgz#ae58fb9504be6aa6caef42c1a31a52613040776e"
+"@ethicdevs/fastify-stream-react-views@^1.11.3":
+  version "1.11.3"
+  resolved "https://registry.yarnpkg.com/@ethicdevs/fastify-stream-react-views/-/fastify-stream-react-views-1.11.3.tgz#1c1634c2d1ee19bacd342f3cf0fdb3f979a4392a"
+  integrity sha512-PA1PHHyDN6gZkQSOkyMPGri17aFqEKaz3DEWXZmraTpGp+3zPU6QgECftA8IEqcXFteQxv7IujtBqSBUfVqMwA==
+  dependencies:
+    "@babel/plugin-transform-modules-umd" "^7.18.0"
+    "@babel/plugin-transform-react-display-name" "^7.18.6"
+    babel-plugin-styled-components "^2.0.7"
+    concat-stream "^2.0.0"
+    dree "^3.3.7"
+    esbuild "^0.14.50"
+    esbuild-node-externals "^1.4.1"
+    escape-string-regexp "^4.0.0"
+    fastify-plugin "^3.0.1"
+    react-ssr-prepass "^1.5.0"
+    terser "^5.14.1"
+    transform-modules-eumd "^1.0.0"
+
+"@ethicdevs/react-monolith@^1.9.8":
+  version "1.9.8"
+  resolved "https://registry.yarnpkg.com/@ethicdevs/react-monolith/-/react-monolith-1.9.8.tgz#b34979df052066aef8672b5127ec98777999b2d4"
+  integrity sha512-iwiAz550lyaOB0N1sB4V7WQY69NSWFXDimvQI5Xx4B53EhhbI67TQ2asbDuG6e7+b724a04Njuo9lVLdeCFMvA==
   dependencies:
     deepest-merge "^1.0.0"
     react-ssr-prepass "^1.5.0"

...
@@ -743,19 +762,22 @@
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/@panva/asn1.js/-/asn1.js-1.0.0.tgz#dd55ae7b8129e02049f009408b97c61ccf9032f6"
 
-"@prisma/client@^4.4.0":
-  version "4.4.0"
-  resolved "https://registry.yarnpkg.com/@prisma/client/-/client-4.4.0.tgz#45f59c172dd3621ecc92d7cf9bc765d85e6c7d56"
+"@prisma/client@^4.9.0":
+  version "4.16.2"
+  resolved "https://registry.yarnpkg.com/@prisma/client/-/client-4.16.2.tgz#3bb9ebd49b35c8236b3d468d0215192267016e2b"
+  integrity sha512-qCoEyxv1ZrQ4bKy39GnylE8Zq31IRmm8bNhNbZx7bF2cU5aiCCnSa93J2imF88MBjn7J9eUQneNxUQVJdl/rPQ==
   dependencies:
-    "@prisma/engines-version" "4.4.0-66.f352a33b70356f46311da8b00d83386dd9f145d6"
+    "@prisma/engines-version" "4.16.1-1.4bc8b6e1b66cb932731fb1bdbbc550d1e010de81"
 
-"@prisma/engines-version@4.4.0-66.f352a33b70356f46311da8b00d83386dd9f145d6":
-  version "4.4.0-66.f352a33b70356f46311da8b00d83386dd9f145d6"
-  resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-4.4.0-66.f352a33b70356f46311da8b00d83386dd9f145d6.tgz#00875863bb30b670a586a5b5794a000f7f3ad976"
+"@prisma/engines-version@4.16.1-1.4bc8b6e1b66cb932731fb1bdbbc550d1e010de81":
+  version "4.16.1-1.4bc8b6e1b66cb932731fb1bdbbc550d1e010de81"
+  resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-4.16.1-1.4bc8b6e1b66cb932731fb1bdbbc550d1e010de81.tgz#d3b5dcf95b6d220e258cbf6ae19b06d30a7e9f14"
+  integrity sha512-q617EUWfRIDTriWADZ4YiWRZXCa/WuhNgLTVd+HqWLffjMSPzyM5uOWoauX91wvQClSKZU4pzI4JJLQ9Kl62Qg==
 
-"@prisma/engines@4.4.0":
-  version "4.4.0"
-  resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-4.4.0.tgz#6ca7d3ce8eee08dcfa82311b0a02f5ccaac7dc0c"
+"@prisma/engines@4.16.2":
+  version "4.16.2"
+  resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-4.16.2.tgz#5ec8dd672c2173d597e469194916ad4826ce2e5f"
+  integrity sha512-vx1nxVvN4QeT/cepQce68deh/Turxy5Mr+4L4zClFuK1GlxN3+ivxfuv+ej/gvidWn1cE1uAhW7ALLNlYbRUAw==
 
 "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2":
   version "1.1.2"

...
@@ -1923,6 +1945,13 @@ esbuild-openbsd-64@0.14.51:
   version "0.14.51"
   resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.51.tgz#4adba0b7ea7eb1428bb00d8e94c199a949b130e8"
 
+esbuild-plugin-prismjs@^1.0.8:
+  version "1.0.8"
+  resolved "https://registry.yarnpkg.com/esbuild-plugin-prismjs/-/esbuild-plugin-prismjs-1.0.8.tgz#aeae4f8385dc0a029ce2bb0951c40437e167afde"
+  integrity sha512-gIOl7IgYoFNmBt2e/DPWqSyPYviSFrJpCtNPnIsCvWqwx1kuKxqTzMGCUwntXJV29pwQd2prVVzh6p4Z1Vp4eQ==
+  dependencies:
+    prismjs "^1.29.0"
+
 esbuild-sunos-64@0.14.51:
   version "0.14.51"
   resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.51.tgz#4b8a6d97dfedda30a6e39607393c5c90ebf63891"

...
@@ -4111,11 +4140,12 @@ pretty-format@^28.0.0, pretty-format@^28.1.3:
     ansi-styles "^5.0.0"
     react-is "^18.0.0"
 
-prisma@^4.4.0:
-  version "4.4.0"
-  resolved "https://registry.yarnpkg.com/prisma/-/prisma-4.4.0.tgz#0c53324bf6a29474636b3e1964e0d72e0277bf8f"
+prisma@^4.9.0:
+  version "4.16.2"
+  resolved "https://registry.yarnpkg.com/prisma/-/prisma-4.16.2.tgz#469e0a0991c6ae5bcde289401726bb012253339e"
+  integrity sha512-SYCsBvDf0/7XSJyf2cHTLjLeTLVXYfqp7pG5eEVafFLeT0u/hLFz/9W196nDRGUOo1JfPatAEb+uEnTQImQC1g==
   dependencies:
-    "@prisma/engines" "4.4.0"
+    "@prisma/engines" "4.16.2"
 
 prismjs@^1.29.0:
   version "1.29.0"

yarn.lock
@@ -328,9 +328,28 @@
     terser "^5.14.1"
     transform-modules-eumd "^1.0.0"
 
-"@ethicdevs/react-monolith@^1.7.4":
-  version "1.7.4"
-  resolved "https://registry.yarnpkg.com/@ethicdevs/react-monolith/-/react-monolith-1.7.4.tgz#ae58fb9504be6aa6caef42c1a31a52613040776e"
+"@ethicdevs/fastify-stream-react-views@^1.11.3":
+  version "1.11.3"
+  resolved "https://registry.yarnpkg.com/@ethicdevs/fastify-stream-react-views/-/fastify-stream-react-views-1.11.3.tgz#1c1634c2d1ee19bacd342f3cf0fdb3f979a4392a"
+  integrity sha512-PA1PHHyDN6gZkQSOkyMPGri17aFqEKaz3DEWXZmraTpGp+3zPU6QgECftA8IEqcXFteQxv7IujtBqSBUfVqMwA==
+  dependencies:
+    "@babel/plugin-transform-modules-umd" "^7.18.0"
+    "@babel/plugin-transform-react-display-name" "^7.18.6"
+    babel-plugin-styled-components "^2.0.7"
+    concat-stream "^2.0.0"
+    dree "^3.3.7"
+    esbuild "^0.14.50"
+    esbuild-node-externals "^1.4.1"
+    escape-string-regexp "^4.0.0"
+    fastify-plugin "^3.0.1"
+    react-ssr-prepass "^1.5.0"
+    terser "^5.14.1"
+    transform-modules-eumd "^1.0.0"
+
+"@ethicdevs/react-monolith@^1.9.8":
+  version "1.9.8"
+  resolved "https://registry.yarnpkg.com/@ethicdevs/react-monolith/-/react-monolith-1.9.8.tgz#b34979df052066aef8672b5127ec98777999b2d4"
+  integrity sha512-iwiAz550lyaOB0N1sB4V7WQY69NSWFXDimvQI5Xx4B53EhhbI67TQ2asbDuG6e7+b724a04Njuo9lVLdeCFMvA==
   dependencies:
     deepest-merge "^1.0.0"
     react-ssr-prepass "^1.5.0"

...
@@ -743,19 +762,22 @@
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/@panva/asn1.js/-/asn1.js-1.0.0.tgz#dd55ae7b8129e02049f009408b97c61ccf9032f6"
 
-"@prisma/client@^4.4.0":
-  version "4.4.0"
-  resolved "https://registry.yarnpkg.com/@prisma/client/-/client-4.4.0.tgz#45f59c172dd3621ecc92d7cf9bc765d85e6c7d56"
+"@prisma/client@^4.9.0":
+  version "4.16.2"
+  resolved "https://registry.yarnpkg.com/@prisma/client/-/client-4.16.2.tgz#3bb9ebd49b35c8236b3d468d0215192267016e2b"
+  integrity sha512-qCoEyxv1ZrQ4bKy39GnylE8Zq31IRmm8bNhNbZx7bF2cU5aiCCnSa93J2imF88MBjn7J9eUQneNxUQVJdl/rPQ==
   dependencies:
-    "@prisma/engines-version" "4.4.0-66.f352a33b70356f46311da8b00d83386dd9f145d6"
+    "@prisma/engines-version" "4.16.1-1.4bc8b6e1b66cb932731fb1bdbbc550d1e010de81"
 
-"@prisma/engines-version@4.4.0-66.f352a33b70356f46311da8b00d83386dd9f145d6":
-  version "4.4.0-66.f352a33b70356f46311da8b00d83386dd9f145d6"
-  resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-4.4.0-66.f352a33b70356f46311da8b00d83386dd9f145d6.tgz#00875863bb30b670a586a5b5794a000f7f3ad976"
+"@prisma/engines-version@4.16.1-1.4bc8b6e1b66cb932731fb1bdbbc550d1e010de81":
+  version "4.16.1-1.4bc8b6e1b66cb932731fb1bdbbc550d1e010de81"
+  resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-4.16.1-1.4bc8b6e1b66cb932731fb1bdbbc550d1e010de81.tgz#d3b5dcf95b6d220e258cbf6ae19b06d30a7e9f14"
+  integrity sha512-q617EUWfRIDTriWADZ4YiWRZXCa/WuhNgLTVd+HqWLffjMSPzyM5uOWoauX91wvQClSKZU4pzI4JJLQ9Kl62Qg==
 
-"@prisma/engines@4.4.0":
-  version "4.4.0"
-  resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-4.4.0.tgz#6ca7d3ce8eee08dcfa82311b0a02f5ccaac7dc0c"
+"@prisma/engines@4.16.2":
+  version "4.16.2"
+  resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-4.16.2.tgz#5ec8dd672c2173d597e469194916ad4826ce2e5f"
+  integrity sha512-vx1nxVvN4QeT/cepQce68deh/Turxy5Mr+4L4zClFuK1GlxN3+ivxfuv+ej/gvidWn1cE1uAhW7ALLNlYbRUAw==
 
 "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2":
   version "1.1.2"

...
@@ -1923,6 +1945,13 @@ esbuild-openbsd-64@0.14.51:
   version "0.14.51"
   resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.51.tgz#4adba0b7ea7eb1428bb00d8e94c199a949b130e8"
 
+esbuild-plugin-prismjs@^1.0.8:
+  version "1.0.8"
+  resolved "https://registry.yarnpkg.com/esbuild-plugin-prismjs/-/esbuild-plugin-prismjs-1.0.8.tgz#aeae4f8385dc0a029ce2bb0951c40437e167afde"
+  integrity sha512-gIOl7IgYoFNmBt2e/DPWqSyPYviSFrJpCtNPnIsCvWqwx1kuKxqTzMGCUwntXJV29pwQd2prVVzh6p4Z1Vp4eQ==
+  dependencies:
+    prismjs "^1.29.0"
+
 esbuild-sunos-64@0.14.51:
   version "0.14.51"
   resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.51.tgz#4b8a6d97dfedda30a6e39607393c5c90ebf63891"

...
@@ -4111,11 +4140,12 @@ pretty-format@^28.0.0, pretty-format@^28.1.3:
     ansi-styles "^5.0.0"
     react-is "^18.0.0"
 
-prisma@^4.4.0:
-  version "4.4.0"
-  resolved "https://registry.yarnpkg.com/prisma/-/prisma-4.4.0.tgz#0c53324bf6a29474636b3e1964e0d72e0277bf8f"
+prisma@^4.9.0:
+  version "4.16.2"
+  resolved "https://registry.yarnpkg.com/prisma/-/prisma-4.16.2.tgz#469e0a0991c6ae5bcde289401726bb012253339e"
+  integrity sha512-SYCsBvDf0/7XSJyf2cHTLjLeTLVXYfqp7pG5eEVafFLeT0u/hLFz/9W196nDRGUOo1JfPatAEb+uEnTQImQC1g==
   dependencies:
-    "@prisma/engines" "4.4.0"
+    "@prisma/engines" "4.16.2"
 
 prismjs@^1.29.0:
   version "1.29.0"

GitFOSS • v0.2.0 (#421408f) • MIT License

GitFOSS