From 9f22f4c198b617c0e1a05803e6694e5001eda5b8 Mon Sep 17 00:00:00 2001 From: Neshura Date: Fri, 9 Dec 2022 22:36:42 +0100 Subject: [PATCH 001/250] Updated pages.json references --- pages/games.tsx | 2 +- pages/services.tsx | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pages/games.tsx b/pages/games.tsx index 8193f41..17ce412 100644 --- a/pages/games.tsx +++ b/pages/games.tsx @@ -55,7 +55,7 @@ function Servers(props: LinkList) { } export async function getServerSideProps() { - const filePath = path.join(process.cwd(), '/confs/pages.json') + const filePath = path.join(process.cwd(), '/public/pages.json') const jsonData = await fsPromises.readFile(filePath) const list = JSON.parse(jsonData.toString()) diff --git a/pages/services.tsx b/pages/services.tsx index 2f2d63c..2ce661c 100644 --- a/pages/services.tsx +++ b/pages/services.tsx @@ -40,9 +40,9 @@ function Services(props: LinkList) { ) } -// Gets a List of all services specified in /confs/pages.json +// Gets a List of all services specified in /public/pages.json export async function getServerSideProps() { - const filePath = path.join(process.cwd(), './confs/pages.json') + const filePath = path.join(process.cwd(), '/public/pages.json') // TODO: look into asyncing this API call const jsonData = await fsPromises.readFile(filePath) const list = JSON.parse(jsonData.toString()) -- 2.39.2 From 39afc6cdd6c9ecdaead0d4d5363e595bd095f795 Mon Sep 17 00:00:00 2001 From: Neshura Date: Fri, 9 Dec 2022 23:28:15 +0100 Subject: [PATCH 002/250] removed nextjs user to allow usage of docker.sock --- Dockerfile | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/Dockerfile b/Dockerfile index f12604d..af0ce88 100644 --- a/Dockerfile +++ b/Dockerfile @@ -30,18 +30,13 @@ WORKDIR /usr/src/app ENV NODE_ENV production -RUN addgroup --system --gid 1001 nodejs -RUN adduser --system --uid 1001 nextjs - COPY --from=builder /app/public ./public COPY --from=builder /app/node_modules ./node_modules # Automatically leverage output traces to reduce image size # https://nextjs.org/docs/advanced-features/output-file-tracing -COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ -COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static - -USER nextjs +COPY --from=builder /app/.next/standalone ./ +COPY --from=builder /app/.next/static ./.next/static # expose port 3000 ENV PORT 3000 -- 2.39.2 From 13620efcd5e3654d393988deeec552a27be0a221 Mon Sep 17 00:00:00 2001 From: Neshura Date: Sat, 10 Dec 2022 02:59:33 +0100 Subject: [PATCH 003/250] Changed next dev to port 4040 --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 94bd905..1dd3d52 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "private": true, "scripts": { "dev:debug": "NODE_OPTIONS='--inspect' next dev -p 4040", - "dev": "next dev", + "dev": "next dev -p 4040", "build": "next build", "start": "next start", "lint": "next lint" @@ -17,10 +17,10 @@ "swr": "^1.3.0" }, "devDependencies": { - "eslint": "^8.23.1", - "eslint-config-next": "12.2.0", "@types/dockerode": "^3.3.14", "@types/react": "^18.0.14", + "eslint": "^8.23.1", + "eslint-config-next": "12.2.0", "typescript": "^4.7.4" } } -- 2.39.2 From 39aaea05e54323418e5b97a6101c957044d46ab4 Mon Sep 17 00:00:00 2001 From: Neshura Date: Sat, 10 Dec 2022 03:00:25 +0100 Subject: [PATCH 004/250] Expanded Interfaces Services got expanded, now uses Enums where sensible --- interfaces/LinkTypes.ts | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/interfaces/LinkTypes.ts b/interfaces/LinkTypes.ts index 07932fb..9aabf4a 100644 --- a/interfaces/LinkTypes.ts +++ b/interfaces/LinkTypes.ts @@ -1,15 +1,42 @@ -export interface LinkList { - services: CustomLink[], +export interface EntryList { + services: Service[], games: CustomLink[] } export interface CustomLink { + name: string, + href: string, + desc: string, + ip: string, type: string, + location: string, + status: string, + docker_container_name: string +} + +export interface Service { name: string, href: string, desc: string, warn: string, - ip: string, - location: string, - status: string, - docker_container_name: string + type: ServiceType, + docker_container_name: string, + location: ServiceLocation, + status: ServiceStatus +} + +export enum ServiceStatus { + online = "Online", + offline = "Offline", + loading = "Loading", + error = "ERROR" +} + +export enum ServiceLocation { + brr7_4800u = "brr7-4800u", + other = "" +} + +export enum ServiceType { + docker = "docker", + app = "app" } \ No newline at end of file -- 2.39.2 From 89a8278dbe53d708cc206611e80dcdbc02568821 Mon Sep 17 00:00:00 2001 From: Neshura Date: Sat, 10 Dec 2022 03:00:40 +0100 Subject: [PATCH 005/250] Changed naming from LinkList to EntryList --- pages/games.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pages/games.tsx b/pages/games.tsx index 17ce412..67577c9 100644 --- a/pages/games.tsx +++ b/pages/games.tsx @@ -3,9 +3,9 @@ import Link from 'next/link' import styles from '/styles/Home.module.css' import fsPromises from 'fs/promises' import path from 'path' -import type { CustomLink, LinkList } from '../interfaces/LinkTypes' +import type { CustomLink, EntryList } from '../interfaces/LinkTypes' -function Servers(props: LinkList) { +function Servers(props: EntryList) { const serverList = props.games return ( <> -- 2.39.2 From 6af8cb3e1b98dd1305e79ebf5b8399e748da67c4 Mon Sep 17 00:00:00 2001 From: Neshura Date: Sat, 10 Dec 2022 03:02:03 +0100 Subject: [PATCH 006/250] Large Code Rewrite Added 2 API Endpoints for use with useSWR, removed the service and status fetching from getStaticProps, rewrote status fetching to use async (WIP, needs testing) --- pages/api/containers.tsx | 22 ++++ pages/api/services.tsx | 21 ++++ pages/services.tsx | 213 +++++++++++++++++++++------------------ 3 files changed, 157 insertions(+), 99 deletions(-) create mode 100644 pages/api/containers.tsx create mode 100644 pages/api/services.tsx diff --git a/pages/api/containers.tsx b/pages/api/containers.tsx new file mode 100644 index 0000000..44803a2 --- /dev/null +++ b/pages/api/containers.tsx @@ -0,0 +1,22 @@ +import fsPromises from 'fs/promises' +import path from 'path' +import { Service, ServiceStatus } from '../../interfaces/LinkTypes'; + +export default async function ServicesAPI(req: any, res: any) { + try { + var Docker = require('dockerode'); + + const options = { + socketPath: '/var/run/docker.sock', + path: '/v1.41/containers/json' + }; + var docker = new Docker({ socketPath: options.socketPath }); + const list = await docker.listContainers({ all: true }) + + res.status(200).json(list); + } + catch (error) { + console.log(error); + res.status(500).json({ error: 'Error reading data' }); + } +} \ No newline at end of file diff --git a/pages/api/services.tsx b/pages/api/services.tsx new file mode 100644 index 0000000..a416716 --- /dev/null +++ b/pages/api/services.tsx @@ -0,0 +1,21 @@ +import fsPromises from 'fs/promises' +import path from 'path' +import { Service, ServiceStatus } from '../../interfaces/LinkTypes'; + +export default async function ServicesAPI(req: any, res: any) { + try { + const filePath = path.join(process.cwd(), '/public/pages.json') + const data = await fsPromises.readFile(filePath) + .then((file) => JSON.parse(file.toString())); + data.services.forEach((service: Service) => { + service.status = ServiceStatus.loading; + }); + + res.status(200).json(data.services); + } + catch (error) { + console.log(error); + res.status(500).json({ error: 'Error reading data' }); + } +} + diff --git a/pages/services.tsx b/pages/services.tsx index 2ce661c..251be44 100644 --- a/pages/services.tsx +++ b/pages/services.tsx @@ -1,20 +1,50 @@ import Head from 'next/head' import Link from 'next/link' import styles from '/styles/Home.module.css' -import fsPromises from 'fs/promises' -import path, { resolve } from 'path' -import type { CustomLink, LinkList } from '../interfaces/LinkTypes' +import { Service, CustomLink, EntryList, ServiceStatus, ServiceType, ServiceLocation } from '../interfaces/LinkTypes' import Dockerode from 'dockerode'; +import { ReactElement, useEffect, useState } from 'react' +import useSWR, { KeyedMutator } from 'swr'; +const fetcher = (url: string) => fetch(url).then((res) => res.json()) -function Services(props: LinkList) { - const serviceList = props.services +//function Services(props: EntryList) { +const Services = () => { + const { serviceList, isLoading, isError } = useServices(); + + let content: ReactElement = <>; + + // TODO: look into asyncing this as well + useStatus(serviceList); + + if (isError) { + content =
Error Loading data
+ } + else if (isLoading) { + content =
Loading..
+ } + else if (serviceList) { + content = +
+ {serviceList.map((item: Service) => ( + + +

{item.name}

+
{item.status}
+

{item.desc}

+

{item.warn}

+
+ + ))} +
+ } return ( <> Neshura Servers +

@@ -24,116 +54,101 @@ function Services(props: LinkList) {

Lists all available Services, most likely up-to-date

-
- {serviceList.map((item: CustomLink) => ( - - -

{item.name}

-
{item.status}
-

{item.desc}

-

{item.warn}

-
- - ))} -
+ + {content} ) } -// Gets a List of all services specified in /public/pages.json -export async function getServerSideProps() { - const filePath = path.join(process.cwd(), '/public/pages.json') - // TODO: look into asyncing this API call - const jsonData = await fsPromises.readFile(filePath) - const list = JSON.parse(jsonData.toString()) - for (let index = 0; index < list.services.length; index++) { - // TODO: look into asyncing this as well - await status(list.services[index]); +function useStatus(serviceList: Service[] | undefined) { + const { data, error } = useSWR('/api/containers', fetcher); + + if (data && serviceList) { + serviceList.forEach((service: Service) => { + getStatus(data, service); + }) + } + else if (error) { + console.log(error); } - return { props: list } } -// reversing this to loop over given entries for every found container would probably improve latency -async function status(entry: CustomLink) { +function useServices(): { serviceList: Service[] | undefined, isLoading: boolean, isError: boolean } { + const { data, error } = useSWR('/api/services', fetcher); + + return { + serviceList: data, + isLoading: !error && !data, + isError: error + }; +} + +function getStatus(containers: Dockerode.ContainerInfo[], entry: Service) { // for now only the BRR7-4800U can be used with Docker, needs changing once more Servers are used // TODO: support multiple locations for docker - if (entry.location === "brr7-4800u") { + if (entry.location === ServiceLocation.brr7_4800u) { // app in this context means any non-docker page - if (entry.type === "app") { - - let data = new Response(); - try { - await fetch(entry.href).then((response: Response) => data = response); - } - catch (e) { - console.log(e) - return (entry.status = "Offline"); - } - - if (data.ok) { - if (data.status == 200 || data.status == 301 || data.status == 302) { - return (entry.status = "Online"); - } - else return (entry.status = "Offline"); - } - else return (entry.status = "Offline"); + if (entry.type === ServiceType.app) { + fetch(entry.href) + .then((data: Response) => { + if (data.ok) { + if (data.status == 200 || data.status == 301 || data.status == 302) { + entry.status = ServiceStatus.online; + } + else { + entry.status = ServiceStatus.offline; + } + } + else { + entry.status = ServiceStatus.offline; + } + }) + .catch(error => { + console.log(error); + entry.status = ServiceStatus.error; + }); } else if (entry.type === "docker") { - var Docker = require('dockerode'); - - // TODO: read these paths from some config instead of hardcoding them - const options = { - socketPath: '/var/run/docker.sock', - path: '/v1.41/containers/json' - }; - var docker = new Docker({ socketPath: options.socketPath }); - - // default is set as Offline, prevents uncaught cases without set status - entry.status = "Offline"; - // TODO: async possible? - await docker.listContainers({all: true}).then( - ((containers: Dockerode.ContainerInfo[]) => { - // Loop over every found container and compare to the entry provided - containers.forEach((element: Dockerode.ContainerInfo) => { - element.Names.forEach((containerName: string) => { - if (containerName.startsWith("/")) { - containerName = containerName.substring(1); - } - if (containerName === entry.docker_container_name) { - entry.status = "Online"; - } - }); - if (entry.docker_container_name == null) { - console.log("MISSING DOCKER CONTAINER NAME FOR " + entry.name); - entry.status = "ERROR"; - } - }); - }) - ); + entry.status = ServiceStatus.offline; + // Loop over every found container and compare to the entry provided + containers.forEach((element: Dockerode.ContainerInfo) => { + element.Names.forEach((containerName: string) => { + if (containerName.startsWith("/")) { + containerName = containerName.substring(1); + } + if (containerName === entry.docker_container_name) { + entry.status = ServiceStatus.online; + } + }); + if (entry.docker_container_name == null) { + console.log("MISSING DOCKER CONTAINER NAME FOR " + entry.name); + entry.status = ServiceStatus.error; + } + }); } - else { entry.status = "ERROR" } - return; + else { entry.status = ServiceStatus.error } } // for non-local locations pinging can be used to see if they're up - else if (entry.location != "") { - let data: Response; - try { - data = await fetch(entry.href); - } - catch (e) { - console.log(e) - return (entry.status = "Offline"); - } - - if (data.ok) { - if (data.status == 200 || data.status == 301 || data.status == 302) { - return (entry.status = "Online"); - } - else return (entry.status = "Offline"); - } - else return (entry.status = "Offline"); + else if (entry.location === ServiceLocation.other) { + fetch(entry.href) + .then((data) => { + if (data.ok) { + if (data.status == 200 || data.status == 301 || data.status == 302) { + return (entry.status = ServiceStatus.online); + } + else (entry.status = ServiceStatus.offline); + } + else { + entry.status = ServiceStatus.offline; + } + }) + .catch((error) => { + console.log(error); + entry.status = ServiceStatus.error; + }); } - else { return (entry.status = "ERROR") } + else { entry.status = ServiceStatus.error } + return; } export default Services \ No newline at end of file -- 2.39.2 From 8426640271ed5839d284f1aacf33dc87f0defb67 Mon Sep 17 00:00:00 2001 From: Neshura Date: Sat, 10 Dec 2022 03:12:08 +0100 Subject: [PATCH 007/250] Potentially fixes #1 --- pages/services.tsx | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/pages/services.tsx b/pages/services.tsx index 251be44..b906318 100644 --- a/pages/services.tsx +++ b/pages/services.tsx @@ -111,15 +111,16 @@ function getStatus(containers: Dockerode.ContainerInfo[], entry: Service) { else if (entry.type === "docker") { entry.status = ServiceStatus.offline; // Loop over every found container and compare to the entry provided - containers.forEach((element: Dockerode.ContainerInfo) => { - element.Names.forEach((containerName: string) => { - if (containerName.startsWith("/")) { - containerName = containerName.substring(1); - } - if (containerName === entry.docker_container_name) { + containers.forEach((container: Dockerode.ContainerInfo) => { + console.log(container) + if (container.Names.includes("/" + entry.docker_container_name) || container.Names.includes(entry.docker_container_name)) { + if (container.State === "running") { entry.status = ServiceStatus.online; } - }); + else { + entry.status = ServiceStatus.offline; + } + } if (entry.docker_container_name == null) { console.log("MISSING DOCKER CONTAINER NAME FOR " + entry.name); entry.status = ServiceStatus.error; -- 2.39.2 From fff04d019a40b68e8db4f7e71901b0b42c32cc5b Mon Sep 17 00:00:00 2001 From: Neshura Date: Sat, 10 Dec 2022 21:18:55 +0100 Subject: [PATCH 008/250] Small Syntax changes for containers API --- pages/api/containers.tsx | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/pages/api/containers.tsx b/pages/api/containers.tsx index 44803a2..6f75e6e 100644 --- a/pages/api/containers.tsx +++ b/pages/api/containers.tsx @@ -1,11 +1,7 @@ -import fsPromises from 'fs/promises' -import path from 'path' -import { Service, ServiceStatus } from '../../interfaces/LinkTypes'; +import Docker from 'dockerode' -export default async function ServicesAPI(req: any, res: any) { +export default async function ContainersAPI(req: any, res: any) { try { - var Docker = require('dockerode'); - const options = { socketPath: '/var/run/docker.sock', path: '/v1.41/containers/json' -- 2.39.2 From 3303008ec38449e8f5eed300e619cfdadbf09d95 Mon Sep 17 00:00:00 2001 From: Neshura Date: Sun, 11 Dec 2022 16:30:11 +0100 Subject: [PATCH 009/250] incremental Data Fetching using useSWR not quite like I want but should be good enough --- pages/services.tsx | 214 +++++++++++++++++++++++++++------------------ 1 file changed, 127 insertions(+), 87 deletions(-) diff --git a/pages/services.tsx b/pages/services.tsx index b906318..383272e 100644 --- a/pages/services.tsx +++ b/pages/services.tsx @@ -1,32 +1,28 @@ import Head from 'next/head' import Link from 'next/link' import styles from '/styles/Home.module.css' -import { Service, CustomLink, EntryList, ServiceStatus, ServiceType, ServiceLocation } from '../interfaces/LinkTypes' +import { Service, ServiceStatus, ServiceType, ServiceLocation } from '../interfaces/LinkTypes'; import Dockerode from 'dockerode'; -import { ReactElement, useEffect, useState } from 'react' -import useSWR, { KeyedMutator } from 'swr'; +import { ReactElement } from 'react' +import useSWR from 'swr'; const fetcher = (url: string) => fetch(url).then((res) => res.json()) //function Services(props: EntryList) { -const Services = () => { - const { serviceList, isLoading, isError } = useServices(); +function Services() { + const { initialData, fullData, loadingInitial, loadingFull, error } = useServices(); + let content: ReactElement = <>; - // TODO: look into asyncing this as well - useStatus(serviceList); - - if (isError) { - content =
Error Loading data
+ if (error) { content =
Error loading data
} + else if (loadingInitial) { + content =
Loading
} - else if (isLoading) { - content =
Loading..
- } - else if (serviceList) { + else if (loadingFull) { content =
- {serviceList.map((item: Service) => ( + {initialData?.map((item: Service) => (

{item.name}

@@ -38,6 +34,25 @@ const Services = () => { ))}
} + else if (fullData) { + content = + + } + else { + content =
Error loading data
+ } + return ( <> @@ -60,96 +75,121 @@ const Services = () => { ) } -function useStatus(serviceList: Service[] | undefined) { - const { data, error } = useSWR('/api/containers', fetcher); +async function getStatus(entry: Service, containers: Dockerode.ContainerInfo[]) { + // Currently the only location supporting different fetching depending on type is brr7-4800u + // Others to follow but low prio as this is currently the only location used - if (data && serviceList) { - serviceList.forEach((service: Service) => { - getStatus(data, service); - }) - } - else if (error) { - console.log(error); - } -} - -function useServices(): { serviceList: Service[] | undefined, isLoading: boolean, isError: boolean } { - const { data, error } = useSWR('/api/services', fetcher); - - return { - serviceList: data, - isLoading: !error && !data, - isError: error - }; -} - -function getStatus(containers: Dockerode.ContainerInfo[], entry: Service) { - // for now only the BRR7-4800U can be used with Docker, needs changing once more Servers are used - // TODO: support multiple locations for docker + // Location BRR7-4800U if (entry.location === ServiceLocation.brr7_4800u) { - // app in this context means any non-docker page + // Type APP if (entry.type === ServiceType.app) { - fetch(entry.href) - .then((data: Response) => { - if (data.ok) { - if (data.status == 200 || data.status == 301 || data.status == 302) { - entry.status = ServiceStatus.online; - } - else { - entry.status = ServiceStatus.offline; + await fetch(entry.href) + .then((response) => { + if (response.ok) { + switch(response.status) { + case 200: + case 301: + case 302: + entry.status = ServiceStatus.online; + break; + default: + entry.status = ServiceStatus.offline; } } else { entry.status = ServiceStatus.offline; } }) - .catch(error => { - console.log(error); + .catch((error) => { + console.error("Error pinging Website: ", error); entry.status = ServiceStatus.error; - }); + }) } - else if (entry.type === "docker") { - entry.status = ServiceStatus.offline; - // Loop over every found container and compare to the entry provided - containers.forEach((container: Dockerode.ContainerInfo) => { - console.log(container) - if (container.Names.includes("/" + entry.docker_container_name) || container.Names.includes(entry.docker_container_name)) { - if (container.State === "running") { - entry.status = ServiceStatus.online; + // Type Docker + else if (entry.type === ServiceType.docker) { + containers.forEach((container) => { + // Docker API returns container names with / prepended, not sure whether this always happens so both cases are checked + if (container.Names.includes( entry.docker_container_name || "/" + entry.docker_container_name)) { + // so far only "running" is properly implemented, mroe cases to follow as needed + switch (container.State) { + case "running": + entry.status = ServiceStatus.online; + break; + default: + console.log("Container Status " + container.State + " has no case implemented"); + entry.status = ServiceStatus.offline; + } + } + // If container name is not missing the container is set to offline + else if (entry.docker_container_name !== null) { + console.warn("Container for " + entry.name + " could not be found"); + entry.status = ServiceStatus.offline; + } + else { + console.error("Container Name not specified"); + entry.status = ServiceStatus.error; + } + }) + } + // If no Type matches + else { + console.warn("Service Type for Service " + entry.name + " not specified or invalid"); + entry.status = ServiceStatus.error; + } + } + // Location Other + // TODO: implement docker type for other locations + else if (entry.location === ServiceLocation.other) { + // Currently uses the same handling as app type for the other location + await fetch(entry.href) + .then((response) => { + if (response.ok) { + switch(response.status) { + case 200: + case 301: + case 302: + entry.status = ServiceStatus.online; + break; + default: + entry.status = ServiceStatus.offline; + } } else { entry.status = ServiceStatus.offline; } - } - if (entry.docker_container_name == null) { - console.log("MISSING DOCKER CONTAINER NAME FOR " + entry.name); + }) + .catch((error) => { + console.error("Error pinging Website: ", error); entry.status = ServiceStatus.error; - } - }); - } - else { entry.status = ServiceStatus.error } + }) } - // for non-local locations pinging can be used to see if they're up - else if (entry.location === ServiceLocation.other) { - fetch(entry.href) - .then((data) => { - if (data.ok) { - if (data.status == 200 || data.status == 301 || data.status == 302) { - return (entry.status = ServiceStatus.online); - } - else (entry.status = ServiceStatus.offline); - } - else { - entry.status = ServiceStatus.offline; - } - }) - .catch((error) => { - console.log(error); - entry.status = ServiceStatus.error; - }); + // If no Location matches + else { + console.warn("Service Location for Service " + entry.name + " not specified"); + entry.status = ServiceStatus.error; } - else { entry.status = ServiceStatus.error } - return; + return entry; +} + +const fetchFullDataArray = (containerData: Dockerode.ContainerInfo[], dataSet: Service[]) => { + const fetchStatus = (entry: Service) => getStatus(entry, containerData); + return Promise.all(dataSet.map(fetchStatus)); +} + +function useServices() { + const { data: containerData, error: containerError } = useSWR('/api/containers', fetcher); + const { data: initialData, error: initialError } = useSWR('/api/services', fetcher); + const loadingInitial = !initialData && !initialError + const { data: fullData, error: fullError } = useSWR((initialData && containerData) ? [containerData, initialData] : null, fetchFullDataArray) + const loadingFull = !fullData && !fullError + + return { + initialData, + fullData, + loadingInitial, + loadingFull, + error: initialError || fullError || containerError, + }; } export default Services \ No newline at end of file -- 2.39.2 From c1d6f5d62ee97acb792fa2042a00728d630962d3 Mon Sep 17 00:00:00 2001 From: Neshura Date: Sun, 11 Dec 2022 16:37:59 +0100 Subject: [PATCH 010/250] Fixed docker container name checking --- pages/services.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/services.tsx b/pages/services.tsx index 383272e..60bdb97 100644 --- a/pages/services.tsx +++ b/pages/services.tsx @@ -109,7 +109,7 @@ async function getStatus(entry: Service, containers: Dockerode.ContainerInfo[]) else if (entry.type === ServiceType.docker) { containers.forEach((container) => { // Docker API returns container names with / prepended, not sure whether this always happens so both cases are checked - if (container.Names.includes( entry.docker_container_name || "/" + entry.docker_container_name)) { + if ((container.Names.includes( entry.docker_container_name)) || (container.Names.includes( "/" + entry.docker_container_name))) { // so far only "running" is properly implemented, mroe cases to follow as needed switch (container.State) { case "running": -- 2.39.2 From 3bd10e1f94c9e4d132551e20550b170c7acb8cdb Mon Sep 17 00:00:00 2001 From: Neshura Date: Sun, 11 Dec 2022 16:44:15 +0100 Subject: [PATCH 011/250] Debug Logging added --- pages/services.tsx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pages/services.tsx b/pages/services.tsx index 60bdb97..1bcfe96 100644 --- a/pages/services.tsx +++ b/pages/services.tsx @@ -122,6 +122,10 @@ async function getStatus(entry: Service, containers: Dockerode.ContainerInfo[]) } // If container name is not missing the container is set to offline else if (entry.docker_container_name !== null) { + // DEBUG + console.log(entry.docker_container_name); + console.log(container.Names); + // DEBUG console.warn("Container for " + entry.name + " could not be found"); entry.status = ServiceStatus.offline; } @@ -183,6 +187,8 @@ function useServices() { const { data: fullData, error: fullError } = useSWR((initialData && containerData) ? [containerData, initialData] : null, fetchFullDataArray) const loadingFull = !fullData && !fullError + console.log(fullError) // DEBUG + return { initialData, fullData, -- 2.39.2 From a27f7457aa7d59e4e61bf03661843be62b826a40 Mon Sep 17 00:00:00 2001 From: Neshura Date: Sun, 11 Dec 2022 16:48:09 +0100 Subject: [PATCH 012/250] Fix attempt for Container name checking --- pages/services.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pages/services.tsx b/pages/services.tsx index 1bcfe96..7b62cb1 100644 --- a/pages/services.tsx +++ b/pages/services.tsx @@ -108,8 +108,8 @@ async function getStatus(entry: Service, containers: Dockerode.ContainerInfo[]) // Type Docker else if (entry.type === ServiceType.docker) { containers.forEach((container) => { - // Docker API returns container names with / prepended, not sure whether this always happens so both cases are checked - if ((container.Names.includes( entry.docker_container_name)) || (container.Names.includes( "/" + entry.docker_container_name))) { + // Docker API returns container names with / prepended + if (container.Names.includes( "/" + entry.docker_container_name)) { // so far only "running" is properly implemented, mroe cases to follow as needed switch (container.State) { case "running": -- 2.39.2 From 3a617f929116ff1f16f229c9f3f913237eb7124c Mon Sep 17 00:00:00 2001 From: Neshura Date: Sun, 11 Dec 2022 17:00:34 +0100 Subject: [PATCH 013/250] More logging --- pages/services.tsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pages/services.tsx b/pages/services.tsx index 7b62cb1..3111d67 100644 --- a/pages/services.tsx +++ b/pages/services.tsx @@ -109,7 +109,7 @@ async function getStatus(entry: Service, containers: Dockerode.ContainerInfo[]) else if (entry.type === ServiceType.docker) { containers.forEach((container) => { // Docker API returns container names with / prepended - if (container.Names.includes( "/" + entry.docker_container_name)) { + if (container.Names.includes("/" + entry.docker_container_name)) { // so far only "running" is properly implemented, mroe cases to follow as needed switch (container.State) { case "running": @@ -123,8 +123,9 @@ async function getStatus(entry: Service, containers: Dockerode.ContainerInfo[]) // If container name is not missing the container is set to offline else if (entry.docker_container_name !== null) { // DEBUG - console.log(entry.docker_container_name); - console.log(container.Names); + console.log(container.Names.includes("/" + entry.docker_container_name)) + console.log("/" + entry.docker_container_name); + console.log(container.Names[0]); // DEBUG console.warn("Container for " + entry.name + " could not be found"); entry.status = ServiceStatus.offline; -- 2.39.2 From bff352a395c91f814c63382a46322fa847bd0880 Mon Sep 17 00:00:00 2001 From: Neshura Date: Sun, 11 Dec 2022 17:11:02 +0100 Subject: [PATCH 014/250] Replace foreach with for --- pages/services.tsx | 49 ++++++++++++++++++++++++---------------------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/pages/services.tsx b/pages/services.tsx index 3111d67..bdf57e9 100644 --- a/pages/services.tsx +++ b/pages/services.tsx @@ -86,7 +86,7 @@ async function getStatus(entry: Service, containers: Dockerode.ContainerInfo[]) await fetch(entry.href) .then((response) => { if (response.ok) { - switch(response.status) { + switch (response.status) { case 200: case 301: case 302: @@ -107,9 +107,10 @@ async function getStatus(entry: Service, containers: Dockerode.ContainerInfo[]) } // Type Docker else if (entry.type === ServiceType.docker) { - containers.forEach((container) => { + for (let i = 0; i < containers.length; i++) { + const container = containers[i]; // Docker API returns container names with / prepended - if (container.Names.includes("/" + entry.docker_container_name)) { + if (containers[i].Names.includes("/" + entry.docker_container_name)) { // so far only "running" is properly implemented, mroe cases to follow as needed switch (container.State) { case "running": @@ -119,6 +120,8 @@ async function getStatus(entry: Service, containers: Dockerode.ContainerInfo[]) console.log("Container Status " + container.State + " has no case implemented"); entry.status = ServiceStatus.offline; } + // cancel the for + break; } // If container name is not missing the container is set to offline else if (entry.docker_container_name !== null) { @@ -134,7 +137,7 @@ async function getStatus(entry: Service, containers: Dockerode.ContainerInfo[]) console.error("Container Name not specified"); entry.status = ServiceStatus.error; } - }) + } } // If no Type matches else { @@ -147,26 +150,26 @@ async function getStatus(entry: Service, containers: Dockerode.ContainerInfo[]) else if (entry.location === ServiceLocation.other) { // Currently uses the same handling as app type for the other location await fetch(entry.href) - .then((response) => { - if (response.ok) { - switch(response.status) { - case 200: - case 301: - case 302: - entry.status = ServiceStatus.online; - break; - default: - entry.status = ServiceStatus.offline; - } + .then((response) => { + if (response.ok) { + switch (response.status) { + case 200: + case 301: + case 302: + entry.status = ServiceStatus.online; + break; + default: + entry.status = ServiceStatus.offline; } - else { - entry.status = ServiceStatus.offline; - } - }) - .catch((error) => { - console.error("Error pinging Website: ", error); - entry.status = ServiceStatus.error; - }) + } + else { + entry.status = ServiceStatus.offline; + } + }) + .catch((error) => { + console.error("Error pinging Website: ", error); + entry.status = ServiceStatus.error; + }) } // If no Location matches else { -- 2.39.2 From 7daa8c9295f730f569b2802748a1a055e4bc740b Mon Sep 17 00:00:00 2001 From: Neshura Date: Sun, 11 Dec 2022 17:14:23 +0100 Subject: [PATCH 015/250] Removed Debug logging --- pages/services.tsx | 7 ------- 1 file changed, 7 deletions(-) diff --git a/pages/services.tsx b/pages/services.tsx index bdf57e9..1426db7 100644 --- a/pages/services.tsx +++ b/pages/services.tsx @@ -125,11 +125,6 @@ async function getStatus(entry: Service, containers: Dockerode.ContainerInfo[]) } // If container name is not missing the container is set to offline else if (entry.docker_container_name !== null) { - // DEBUG - console.log(container.Names.includes("/" + entry.docker_container_name)) - console.log("/" + entry.docker_container_name); - console.log(container.Names[0]); - // DEBUG console.warn("Container for " + entry.name + " could not be found"); entry.status = ServiceStatus.offline; } @@ -191,8 +186,6 @@ function useServices() { const { data: fullData, error: fullError } = useSWR((initialData && containerData) ? [containerData, initialData] : null, fetchFullDataArray) const loadingFull = !fullData && !fullError - console.log(fullError) // DEBUG - return { initialData, fullData, -- 2.39.2 From 6014189be3b28deacdd7da1096af63e2c4690146 Mon Sep 17 00:00:00 2001 From: Neshura Date: Sun, 11 Dec 2022 17:24:03 +0100 Subject: [PATCH 016/250] reworked container data fetching Currently it would log "container not found" even if the container was found --- pages/services.tsx | 49 ++++++++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/pages/services.tsx b/pages/services.tsx index 1426db7..4a70d84 100644 --- a/pages/services.tsx +++ b/pages/services.tsx @@ -107,32 +107,39 @@ async function getStatus(entry: Service, containers: Dockerode.ContainerInfo[]) } // Type Docker else if (entry.type === ServiceType.docker) { - for (let i = 0; i < containers.length; i++) { - const container = containers[i]; - // Docker API returns container names with / prepended - if (containers[i].Names.includes("/" + entry.docker_container_name)) { - // so far only "running" is properly implemented, mroe cases to follow as needed - switch (container.State) { - case "running": - entry.status = ServiceStatus.online; - break; - default: - console.log("Container Status " + container.State + " has no case implemented"); - entry.status = ServiceStatus.offline; + if (entry.name !== null) { + let found = false; + for (let i = 0; i < containers.length; i++) { + const container = containers[i]; + // Docker API returns container names with / prepended + if (containers[i].Names.includes("/" + entry.docker_container_name)) { + // so far only "running" is properly implemented, mroe cases to follow as needed + switch (container.State) { + case "running": + entry.status = ServiceStatus.online; + break; + default: + console.log("Container Status " + container.State + " has no case implemented"); + entry.status = ServiceStatus.offline; + } + found = true; + // cancel the for + break; + } + // If container name is not missing the container is set to offline + else { + entry.status = ServiceStatus.offline; } - // cancel the for - break; } - // If container name is not missing the container is set to offline - else if (entry.docker_container_name !== null) { + if (!found) { console.warn("Container for " + entry.name + " could not be found"); - entry.status = ServiceStatus.offline; - } - else { - console.error("Container Name not specified"); - entry.status = ServiceStatus.error; } } + // if name is null do not enter for loop + else { + console.error("Container Name not specified"); + entry.status = ServiceStatus.error; + } } // If no Type matches else { -- 2.39.2 From 450141fde916b8124e6a8f73a361f209b4c6bb85 Mon Sep 17 00:00:00 2001 From: Neshura Date: Sun, 11 Dec 2022 17:32:01 +0100 Subject: [PATCH 017/250] Added lang to next.config --- next.config.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/next.config.js b/next.config.js index 2e4ef34..f804348 100644 --- a/next.config.js +++ b/next.config.js @@ -1,6 +1,10 @@ /** @type {import('next').NextConfig} */ const nextConfig = { + i18n: { + locales: ["en"], + defaultLocale: "en", + }, reactStrictMode: true, output: 'standalone', }; -- 2.39.2 From c81606fa91a3c47ca56fe35ab0b3a0fbe7a31856 Mon Sep 17 00:00:00 2001 From: Neshura Date: Sun, 11 Dec 2022 17:47:19 +0100 Subject: [PATCH 018/250] removed comment, switched to _document.tsx --- next.config.js | 4 ---- pages/_document.tsx | 13 +++++++++++++ pages/services.tsx | 1 - 3 files changed, 13 insertions(+), 5 deletions(-) create mode 100644 pages/_document.tsx diff --git a/next.config.js b/next.config.js index f804348..2e4ef34 100644 --- a/next.config.js +++ b/next.config.js @@ -1,10 +1,6 @@ /** @type {import('next').NextConfig} */ const nextConfig = { - i18n: { - locales: ["en"], - defaultLocale: "en", - }, reactStrictMode: true, output: 'standalone', }; diff --git a/pages/_document.tsx b/pages/_document.tsx new file mode 100644 index 0000000..399ed78 --- /dev/null +++ b/pages/_document.tsx @@ -0,0 +1,13 @@ +import { Html, Head, Main, NextScript } from 'next/document' + +export default function Document() { + return ( + + + +
+ + + + ) +} \ No newline at end of file diff --git a/pages/services.tsx b/pages/services.tsx index 4a70d84..03e3efe 100644 --- a/pages/services.tsx +++ b/pages/services.tsx @@ -8,7 +8,6 @@ import useSWR from 'swr'; const fetcher = (url: string) => fetch(url).then((res) => res.json()) -//function Services(props: EntryList) { function Services() { const { initialData, fullData, loadingInitial, loadingFull, error } = useServices(); -- 2.39.2 From f1d7b359126f25e897935bcca187f2ffe530148c Mon Sep 17 00:00:00 2001 From: Neshura Date: Sun, 11 Dec 2022 18:38:17 +0100 Subject: [PATCH 019/250] Changes to stylesheet added loading state as well as image style --- styles/Home.module.css | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/styles/Home.module.css b/styles/Home.module.css index bd05f45..0c0bcfc 100644 --- a/styles/Home.module.css +++ b/styles/Home.module.css @@ -118,14 +118,18 @@ max-width: 80%; } -.contentoffline { +.statusOffline { color: var(--def-red); } -.contentonline { +.statusOnline { color: var(--def-green); } +.statusLoading { + color: var(--def-orange); +} + .contentcard { margin: 1rem; padding: 1rem; @@ -159,6 +163,19 @@ border-color: var(--def-orange); } +.contentTitle { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; +} + +.contentIcon { + position: relative; + aspect-ratio: 1; + height: 3rem; +} + .card { margin: 1rem; padding: 1.5rem; -- 2.39.2 From dbe55d76f5f3956f29260f4ae6c2e92009e64bd6 Mon Sep 17 00:00:00 2001 From: Neshura Date: Sun, 11 Dec 2022 18:38:43 +0100 Subject: [PATCH 020/250] Extraceted Service types from LinkList.tsx --- interfaces/LinkTypes.ts | 29 ++--------------------------- interfaces/Services.ts | 28 ++++++++++++++++++++++++++++ pages/api/services.tsx | 2 +- 3 files changed, 31 insertions(+), 28 deletions(-) create mode 100644 interfaces/Services.ts diff --git a/interfaces/LinkTypes.ts b/interfaces/LinkTypes.ts index 9aabf4a..be23ed4 100644 --- a/interfaces/LinkTypes.ts +++ b/interfaces/LinkTypes.ts @@ -1,3 +1,5 @@ +import { Service } from "./Services" + export interface EntryList { services: Service[], games: CustomLink[] @@ -13,30 +15,3 @@ export interface CustomLink { docker_container_name: string } -export interface Service { - name: string, - href: string, - desc: string, - warn: string, - type: ServiceType, - docker_container_name: string, - location: ServiceLocation, - status: ServiceStatus -} - -export enum ServiceStatus { - online = "Online", - offline = "Offline", - loading = "Loading", - error = "ERROR" -} - -export enum ServiceLocation { - brr7_4800u = "brr7-4800u", - other = "" -} - -export enum ServiceType { - docker = "docker", - app = "app" -} \ No newline at end of file diff --git a/interfaces/Services.ts b/interfaces/Services.ts new file mode 100644 index 0000000..29178b4 --- /dev/null +++ b/interfaces/Services.ts @@ -0,0 +1,28 @@ +export interface Service { + name: string, + icon: string, + href: string, + desc: string, + warn: string, + type: ServiceType, + docker_container_name: string, + location: ServiceLocation, + status: ServiceStatus +} + +export enum ServiceStatus { + online = "Online", + offline = "Offline", + loading = "Loading", + error = "ERROR" +} + +export enum ServiceLocation { + brr7_4800u = "brr7-4800u", + other = "" +} + +export enum ServiceType { + docker = "docker", + app = "app" +} \ No newline at end of file diff --git a/pages/api/services.tsx b/pages/api/services.tsx index a416716..0adf0a8 100644 --- a/pages/api/services.tsx +++ b/pages/api/services.tsx @@ -1,6 +1,6 @@ import fsPromises from 'fs/promises' import path from 'path' -import { Service, ServiceStatus } from '../../interfaces/LinkTypes'; +import { Service, ServiceStatus } from '../../interfaces/Services'; export default async function ServicesAPI(req: any, res: any) { try { -- 2.39.2 From ff2b6aa2c149c2475305d3ba35ee9929917b2ab6 Mon Sep 17 00:00:00 2001 From: Neshura Date: Sun, 11 Dec 2022 18:39:09 +0100 Subject: [PATCH 021/250] Various changes Added support for images as well as a distinct loading style --- pages/services.tsx | 38 +++++++++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/pages/services.tsx b/pages/services.tsx index 03e3efe..abdeb32 100644 --- a/pages/services.tsx +++ b/pages/services.tsx @@ -1,31 +1,40 @@ import Head from 'next/head' import Link from 'next/link' import styles from '/styles/Home.module.css' -import { Service, ServiceStatus, ServiceType, ServiceLocation } from '../interfaces/LinkTypes'; +import { Service, ServiceStatus, ServiceType, ServiceLocation } from '../interfaces/Services'; import Dockerode from 'dockerode'; import { ReactElement } from 'react' import useSWR from 'swr'; +import Image from 'next/image'; const fetcher = (url: string) => fetch(url).then((res) => res.json()) function Services() { const { initialData, fullData, loadingInitial, loadingFull, error } = useServices(); - let content: ReactElement = <>; if (error) { content =
Error loading data
} - else if (loadingInitial) { - content =
Loading
- } + else if (loadingInitial) { content =
Loading
} else if (loadingFull) { content =
{initialData?.map((item: Service) => ( -

{item.name}

-
{item.status}
+
+ { + item.icon ? ( +
+ icon +
+ ) : (<>) + } +

{item.name}

+
+
+ {item.status} +

{item.desc}

{item.warn}

@@ -39,8 +48,19 @@ function Services() { {fullData.map((item: Service) => ( -

{item.name}

-
{item.status}
+
+ { + item.icon ? ( +
+ icon +
+ ) : (<>) + } +

{item.name}

+
+
+ {item.status} +

{item.desc}

{item.warn}

-- 2.39.2 From 644db383a1764f51440eae1948dd826145018a0e Mon Sep 17 00:00:00 2001 From: Neshura Date: Sun, 11 Dec 2022 19:18:17 +0100 Subject: [PATCH 022/250] Closes #6, #7, #8 --- public/icons/calibre-logo.ico | Bin 0 -> 61662 bytes public/icons/element-logo.svg | 7 ++++ public/icons/gitlab-logo.svg | 58 ++++++++++++++++++++++++++++++++ public/icons/grafana-logo.svg | 57 +++++++++++++++++++++++++++++++ public/icons/jellyfin-logo.svg | 24 +++++++++++++ public/icons/komga-logo.png | Bin 0 -> 24193 bytes public/icons/mastodon-logo.svg | 4 +++ public/icons/navidrome-logo.png | Bin 0 -> 13071 bytes public/icons/nextcloud-logo.svg | 1 + public/icons/npm-logo.png | Bin 0 -> 31064 bytes public/icons/peertube-logo.svg | 2 ++ public/icons/portainer-logo.png | Bin 0 -> 4253 bytes public/pages.json | 15 +++++++++ styles/Home.module.css | 7 +++- 14 files changed, 174 insertions(+), 1 deletion(-) create mode 100644 public/icons/calibre-logo.ico create mode 100644 public/icons/element-logo.svg create mode 100644 public/icons/gitlab-logo.svg create mode 100644 public/icons/grafana-logo.svg create mode 100644 public/icons/jellyfin-logo.svg create mode 100644 public/icons/komga-logo.png create mode 100644 public/icons/mastodon-logo.svg create mode 100644 public/icons/navidrome-logo.png create mode 100644 public/icons/nextcloud-logo.svg create mode 100644 public/icons/npm-logo.png create mode 100644 public/icons/peertube-logo.svg create mode 100644 public/icons/portainer-logo.png diff --git a/public/icons/calibre-logo.ico b/public/icons/calibre-logo.ico new file mode 100644 index 0000000000000000000000000000000000000000..0774d0f94d01704f2df3ad0218ff178601d7c9d9 GIT binary patch literal 61662 zcmeHPy^_;N5Z2ZOgk)D_oAMTp_FZ^{i*6kf@CxKa1iS!>s7okv5?lnNxQHBVt*%Es z8jr@3{LM(ylBM>+p46V7p6~1ay5)6I6nFIByLScsd{z8+EQ-I2qIgYz$yB_$V>?~e zuYc&L`KvEQKoL*`6ahs*5l{pa0YyL&Py`f#+eF~w_n+@SJq-N$@%7<0Pj09|h z27hoDl|G-Qxe5?M*6;6cd{?)5y<~!z#Etjo3zWFdV-^WYqc0?~Zu%~)#8I!`v5po$bOSUAGp&UAsmdjJc$&v|5_(en3 z?l(54R?ksFMG(Lw%B$6DU97wa5acumNvIr>>l|3ZMO3)bvq@Ho>jdPg4$HgL>1RG; zR1(eA}hxB8D+7RxXG=&C|D7m0W=QlXoRBd{20M>iKi_%9>0 z7|q2I-Z1E+>s%b+4TBb=xi|tFhK+o%JQoYY`y$^Epbu2FVHk!n>$_l6rwv0^76ul_ zn>u}Z9e^?GTR2DB)MX`NU~# z>cf#FDZyUKQ2@vSZ`wwH30hMVLp{Y+I7?XUY2rVgP(ZLcVr_cOd+)J?Qtr zK)%5Cn@}BwG?pO$ALSTc89c~}hvC=`%M@7Gd}@MgZA<#XY?9UvCpzHe@>V}%?_>&0 zfdTZuqISthpJiaL&Lgbe2qHYtHVpT2eMDTftNOXv8{al$;)qBb2n^@{7B28=(ihnI zIO1IE+jk4>xHEz!sqaY^RLiU4HZVXF3Iw?iC|oTESU}zy?*CoLt?~i~xf7*Mwd9fb z$_Pg^X0y77KPB~b#axp5-gSZ9$tK8-8`dYeZkM%QfOWr5?qXpXnP1za2?woH?qWIO z@nh0zs%S~`e3n@_Tvr7x)_;6!CwF|YL7Ko0JQFftZyC_EHPOT6E>m-bw=OK%z|MiBCO0Or zG-Xv_8SuefaGep5mspwvTmoUtIt=d|GBx4B>0)Who!xTK(jOpWV9i?~zg$XQ4+i4q^ ztSH4JnzGhw&>5Nf=m+!c*Py}>LG&jpK49CB)rZ;X=yV`f@$x~W9CZ@JMo?rpmGWhi zax}mZy#>~5M-yF4UYo#B*;>!w6BkvOn5=0ZCqW0c%n|VgK1KT3G}Y4zUKXd?(T~p? zy2gR>X_};qz{OVJX?o$5rO`x`jR|kC66Fxsh11dJ9@t;`spPH`f;@_#NpiOD;J0NT zLlg0ZmvyjDa4|3@TW^a3#M_ZHIaE7)zhp)2Tn#zSTE`?K=?I$kLWQm`(h?f-X{m9m zB^0~9L#@vqTQwZ26JBT%U5%@#?rTD7+)`SJu5!c!=F&ZF=RksZn0!LvoqW_mRzFy* zLTMQq8B4jPPcvvFL2i1coYGF)Aw1Q^gmp^OXDU+q))_;V_HTWt=CgyJCQbfp_k1VP zl@$R+KoL*`6ahs*5l{ryfj||$jztlgs`+ij%f>0^%b_TC*63`+$&0}DWOxc}G~P{a z=9b20cWG>UWBZFIH#TD`?pn5bi=ud}jdt9r9%ntYHu|4=@g~-Gs7==Ewv9KowvyJT zHF;xe+Z*3#zQ1q1JT2O`-B%S&_H57f`RS);qhpx6z*g^A`r}UQ#i4Dhy*>K=9r;uz z{~Sj?{S&jq=diYCAD2UMUwg(scwDz_cQLMXabe!#xus=?2lw0d9pm?7lGLtR&h!*wzF;&n=68XL28+*30 z$-2gNUoZVgJ2ZP7jlPiJ?TpF#T-)d<_br<_|GuT!r~0l8YzC79E1q5NslGc}r`Z>_ zodTOV){{k$$8n&NGoCNcJfdZ@YHekU=XTn7M9BxX=Ynj($%Xa9n z(IWIR!x~KM2*0qIja#v1X6(tv$>n^ZgEi7|w$bVM80S4mRISUN&3J9r^?WhjSTQ-T M$76zV&X{4`|4w_(IsgCw literal 0 HcmV?d00001 diff --git a/public/icons/element-logo.svg b/public/icons/element-logo.svg new file mode 100644 index 0000000..54a91b7 --- /dev/null +++ b/public/icons/element-logo.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/public/icons/gitlab-logo.svg b/public/icons/gitlab-logo.svg new file mode 100644 index 0000000..5fabd74 --- /dev/null +++ b/public/icons/gitlab-logo.svg @@ -0,0 +1,58 @@ + + + + + + + + diff --git a/public/icons/grafana-logo.svg b/public/icons/grafana-logo.svg new file mode 100644 index 0000000..e91f3ab --- /dev/null +++ b/public/icons/grafana-logo.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + diff --git a/public/icons/jellyfin-logo.svg b/public/icons/jellyfin-logo.svg new file mode 100644 index 0000000..d4d7f01 --- /dev/null +++ b/public/icons/jellyfin-logo.svg @@ -0,0 +1,24 @@ + + + + + + + + + + icon-transparent + + + + + diff --git a/public/icons/komga-logo.png b/public/icons/komga-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..68183eb7d62c4bd47ef53fa9265af89af918e4a5 GIT binary patch literal 24193 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

2JkloM5h#5N4o-19+pK@aeA`i8P0m9#Hd1Y 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 W=e6reNI%g40000 + + + \ No newline at end of file diff --git a/public/icons/navidrome-logo.png b/public/icons/navidrome-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1fa2234e186b06aa955db4e764f57051cd73d43d GIT binary patch literal 13071 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 X|L \ No newline at end of file diff --git a/public/icons/npm-logo.png b/public/icons/npm-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2bfb661dc875a8a6ec14f8e157ba568f2bdb4763 GIT binary patch literal 31064 zcmV)@K!LxBP)5f$7Kkq^ZM z*%T23bXbL97?^#!dwQE*YOl&YBjVokJ@>}Vs;oV;GP9QMdY>n|tFkg9Zrq4-?m6e4 z^BzKn`1n2Fi=Am7w+!VFX$E(Cz!e}!Al5N1R>q-N+231%CIT^V^~?x@I0S_3;V3&m zilHxfh);Q-R4-=|Ai~vNmOgmj$HEgA?u}oZ8K8PE&lhV(#*?^iC<{ph#VuZ+&p=T? zpYs9pw08W&t_&f|s1|QRt#~bjS8n}#QH0{5!>A7LgbaH+mGf}xzrUiR@3$sF+qjgF z2Jj~UjsbWSYkocfGXP$-eU~pkY%74v3$Fw)3E-z^uR2*#Qvm)Hz;OUiz1%11a>BL( zxIFMQ04D(a8Gy_RS9}$K{|4|W0EaL4NxK}dtpF}<90c$m0R9WWm2F(eOA|(D{{X;Q0MF{+3SSLi8o*Cn?h|^cVp{=RdU!d2DF8p;r7Oz;_$wDQ zeDdW!xtAKY6~Lu~Cjxi~z`FtDdvH}(1Ngkz`311=a-HN$4ciJ}>tio~e+BSG0N1R; z)qD?t^8nrkV3Q_PY@=0dD}b#FbMJl^zy$!$*?_Bft&0!**rhU|mm{_nz}Cb|ouB`U z8$5dBYWxj=`vE+Dt4`+SjBN$5weVN~_W=060Qxu4$gc;mvF0PX;A(e&5Qp9U>v|3dN9I|yWNAg19;e_3O~;&nr>mhxhnTK*JT@<5Zel1Gr^Pq zdweq(cLDfE06V%oIwS1g?sg4EjFE1Na$RBWN1XrOZH03a0e8gA9}2bJ)#YPvqeE;f zfX#q_fea7usC=Iqm3NcJw|03{A%NSQx&H+t@#H6k!Addebq!OVPl?z5+fMQPbEhXI zr(7zrf=Bec{khbrB>FAgDi^>udX8-cuu(8FAQ{LqP@`W^$Nh=u{@_QrC;;F7HFmE~ zrNyN24q6TXPVPA68LWZuZo;8l8v73iRtcDw3*AjR7vwPj?q2JOYf2+jTJOoG;z#Yw z>jU`|H1q2@i4XknCb$ciJ+>9VdV}54n6+~KEPdKL6WtrURb7yhd`_5v*nYxu_eZ%` zyZ9df*8%t`09Er{%CcSg)j5IM9TL@t2>G1E%{OIn!*y9?vl7*cLL76$8u+>)4ROJ| znO4qkzGj%ADzW1Jz*9F2=lHszoJ>n8s6!9lG(-vVOs&LH!^H!u8!&v z`Pt~+)PKaM{6o-*aL(Gya}Z7CxN(b$V9f0pJi*omn8OADv#4ToUGEnt^hx;0sb$4`kJi!+9D``LY@- zs%yQ}zThnYzUH<#cW$vec}ZYf0jvkuaoeRi;A!zk@dLrb@iG7DTqRIeCnCPGp)cL5 z;Tq^=KKB~{b_4iu;$k>+zYatXNYuY3p~nd#XDp4mFBzA-Qc2&$kU`$@Rtd zWcLzI2(7tarh*jW_uDPaXaIw`FA zPuY3Le6?f$xz?=oCLma@XruzdwO3_u%Z)h<4R}@wMA58UUd=lH6DjPwNwV+ojGUz^!LzXo6ez)RNkK3&GxRsg-gd_VsQ`i%ELcyI7-by4QX zV^F4}xL(68Fsh{p;OPLKYgbSgk0bRYX`G*{cz6f4?Jo7d=mrc zAPvyO2i_0hUI5?P%iFY#Z3WO92&({g>rwgP=-%K<@hR^*VoFwJ(S^AF9PV@+ezVqw zG3}$%0^!#sxab7mpFL-v6RvLQZ~Au zmI8`1zb{ z`E`H$+n@c3l3-tSf)L&cO~(7M0H!x>*B5jj+X|q&_+ht){wu5~gon6IKYz_2 zlhiW_#3uxVQ8;sf#b*OJ*D�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 + \ No newline at end of file diff --git a/public/icons/portainer-logo.png b/public/icons/portainer-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b4bfd2924fd4ebd5f2834a4fdcf2d6719b15f0d0 GIT binary patch literal 4253 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 Date: Mon, 12 Dec 2022 17:26:50 +0100 Subject: [PATCH 023/250] Updated href's for domain change Closes #14, #11 --- components/layout.tsx | 4 +-- components/navbar.tsx | 4 +-- public/pages.json | 58 ++++++++++++++++++------------------------- 3 files changed, 28 insertions(+), 38 deletions(-) diff --git a/components/layout.tsx b/components/layout.tsx index 67a1dbe..b41b42d 100644 --- a/components/layout.tsx +++ b/components/layout.tsx @@ -11,12 +11,12 @@ const Layout = ({ children }: { children: React.ReactNode }) => { var _paq = window._paq = window._paq || []; /* tracker methods like "setCustomDimension" should be called before "trackPageView" */ _paq.push(["setDocumentTitle", document.domain + "/" + document.title]); - _paq.push(["setCookieDomain", "www.neshura-server.net"]); + _paq.push(["setCookieDomain", "www.neshweb.net"]); _paq.push(["disableCookies"]); _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); (function() { - var u="//tracking.neshura-server.net/"; + var u="//tracking.neshweb.net/"; _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '2']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; diff --git a/components/navbar.tsx b/components/navbar.tsx index e3011ef..8cc425d 100644 --- a/components/navbar.tsx +++ b/components/navbar.tsx @@ -19,8 +19,8 @@ const Navbar = () => { {item.name} ))} - - Mastodon + + Mastodon diff --git a/public/pages.json b/public/pages.json index e2e8d59..b97f0da 100644 --- a/public/pages.json +++ b/public/pages.json @@ -3,7 +3,7 @@ { "name": "Nextcloud", "icon": "/icons/nextcloud-logo.svg", - "href": "https://nextcloud.neshura-server.net", + "href": "https://nextcloud.neshweb.net", "desc": "Self-hosted Cloud Storage Service", "warn": "Note: Registration requires approval", "type": "docker", @@ -13,7 +13,7 @@ { "name": "Komga", "icon": "/icons/komga-logo.png", - "href": "https://komga.neshura-server.net", + "href": "https://komga.neshweb.net", "desc": "Self-hosted Comic Library", "warn": "Note: Registration only via Admin", "type": "docker", @@ -23,7 +23,7 @@ { "name": "Calibre Web", "icon": "/icons/calibre-logo.ico", - "href": "https://calibre.neshura-server.net/", + "href": "https://calibre.neshweb.net/", "desc": "Self-hosted Ebook Library Service", "warn": "Note: Registration only via Admin", "type": "app", @@ -32,7 +32,7 @@ { "name": "PeerTube", "icon": "/icons/peertube-logo.svg", - "href": "https://tube.neshura-server.net", + "href": "https://tube.neshweb.net", "desc": "Self-hosted PeerTube Instance", "warn": "Note: Registration only via Admin", "type": "docker", @@ -42,7 +42,7 @@ { "name": "Mastodon", "icon": "/icons/mastodon-logo.svg", - "href": "https://mastodon.neshura-server.net", + "href": "https://mastodon.neshweb.net", "desc": "Self-hosted Mastodon Instance", "warn": "Note: Registration requires approval", "type": "docker", @@ -51,36 +51,17 @@ }, { "name": "File Browser", - "href": "https://files.neshura-server.net/", + "href": "https://files.neshweb.net/", "desc": "Server File Browser", "warn": "Note: Registration only via Admin", "type": "docker", "docker_container_name": "filebrowser", "location": "brr7-4800u" }, - { - "name": "Matrix", - "href": "https://matrix.neshura-server.net/", - "desc": "Open-Source, Decentralized Chat Protocol", - "warn": "Note: Registration only via Admin", - "type": "docker", - "docker_container_name": "synapse", - "location": "brr7-4800u" - }, - { - "name": "Element", - "icon": "/icons/element-logo.svg", - "href": "https://element.neshura-server.net/", - "desc": "Matrix Chat Client", - "warn": "Note: Registration requires token", - "type": "docker", - "docker_container_name": "element", - "location": "brr7-4800u" - }, { "name": "Jellyfin", "icon": "/icons/jellyfin-logo.svg", - "href": "https://jellyfin.neshura-server.net/", + "href": "https://jellyfin.neshweb.net/", "desc": "Open-Source, Self-Hosted Media Platform", "warn": "Note: Registration only via Admin", "type": "docker", @@ -90,7 +71,7 @@ { "name": "Navidrome", "icon": "/icons/navidrome-logo.png", - "href": "https://navidrome.neshura-server.net/", + "href": "https://navidrome.neshweb.net/", "desc": "Open-Source, Self-Hosted Music Streaming Platform", "warn": "Note: Registration only via Admin", "type": "docker", @@ -99,7 +80,7 @@ }, { "name": "Picard", - "href": "https://picard.neshura-server.net/", + "href": "https://picard.neshweb.net/", "desc": "MP3 Tagger", "warn": "Note: Access only via Admin", "type": "docker", @@ -109,7 +90,7 @@ { "name": "Gitlab", "icon": "/icons/gitlab-logo.svg", - "href": "https://gitlab.neshura-server.net/", + "href": "https://gitlab.neshweb.net/", "desc": "Self-hosted Git Service", "warn": "Note: Registration only via Admin", "type": "docker", @@ -119,7 +100,7 @@ { "name": "Portainer", "icon": "/icons/portainer-logo.png", - "href": "https://portainer.neshura-server.net/", + "href": "https://portainer.neshweb.net/", "desc": "Docker Container Manager", "warn": "Note: Admin Only", "type": "docker", @@ -129,7 +110,7 @@ { "name": "Nginx Proxy Manager", "icon": "/icons/npm-logo.png", - "href": "https://nginx.neshura-server.net/", + "href": "https://nginx.neshweb.net/", "desc": "Web-based Nginx Proxy Manager", "warn": "Note: Admin Only", "type": "docker", @@ -139,25 +120,34 @@ { "name": "Grafana", "icon": "/icons/grafana-logo.svg", - "href": "https://monitoring.neshura-server.net/", + "href": "https://monitoring.neshweb.net/", "desc": "Server Monitoring Utility", "warn": "Note: Admin Only", "type": "docker", "docker_container_name": "grafana", "location": "brr7-4800u" + }, + { + "name": "Matomo", + "href": "https://tracking.neshweb.net/", + "desc": "Traffic Tracking Utility", + "warn": "Note: Admin Only", + "type": "docker", + "docker_container_name": "matomo-web", + "location": "brr7-4800u" } ], "games": { "minecraft": { "name": "Minecraft", "icon": "/icons/minecraft-logo.png", - "href": "https://minecraft.neshura-server.net/", + "href": "https://minecraft.neshweb.net/", "desc": "View all currently available Minecraft Servers and their mods" }, "ready_or_not": { "name": "Ready or Not", "icon": "/icons/ron-logo.png", - "href": "https://readyornot.neshura-server.net/", + "href": "https://readyornot.neshweb.net/", "desc": "Collection of Floor Plans for the Game 'Ready or Not'" }, "zomboid": { -- 2.39.2 From 8a763ee72eb2aeb8ec09f913651856c554143138 Mon Sep 17 00:00:00 2001 From: Neshura Date: Wed, 14 Dec 2022 19:34:39 +0100 Subject: [PATCH 024/250] Update NextJS to 13, node to 18 --- Dockerfile | 6 +- next.config.js | 3 + package.json | 13 +- tsconfig.json | 10 +- yarn.lock | 1590 ++++++++++++++++++++++++++++++++++++++++++++---- 5 files changed, 1499 insertions(+), 123 deletions(-) diff --git a/Dockerfile b/Dockerfile index af0ce88..a90b352 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ ## INIT STEP # Install dependencies only when needed -FROM node:16-alpine AS deps +FROM node:18-alpine AS deps RUN apk add --no-cache libc6-compat WORKDIR /app @@ -11,7 +11,7 @@ RUN yarn install --frozen-lockfile ## BUILD STEP # Rebuild the source code only when needed -FROM node:16-alpine AS builder +FROM node:18-alpine AS builder WORKDIR /app @@ -23,7 +23,7 @@ COPY . . RUN yarn build ## RUN STEP -FROM node:16-alpine AS runner +FROM node:18-alpine AS runner LABEL author="neshura@proton.me" WORKDIR /usr/src/app diff --git a/next.config.js b/next.config.js index 2e4ef34..91f05f8 100644 --- a/next.config.js +++ b/next.config.js @@ -3,6 +3,9 @@ const nextConfig = { reactStrictMode: true, output: 'standalone', + compiler: { + styledComponents: true, + } }; module.exports = nextConfig \ No newline at end of file diff --git a/package.json b/package.json index 1dd3d52..a68b5a3 100644 --- a/package.json +++ b/package.json @@ -10,15 +10,22 @@ "lint": "next lint" }, "dependencies": { + "cookie": "^0.5.0", + "cookies-next": "^2.1.1", "dockerode": "^3.3.4", - "next": "^12.3.0", - "react": "18.2.0", - "react-dom": "18.2.0", + "eslint-config": "^0.3.0", + "next": "^13.0.6", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-is": "^18.2.0", + "styled-components": "^5.3.6", "swr": "^1.3.0" }, "devDependencies": { + "@types/cookie": "^0.5.1", "@types/dockerode": "^3.3.14", "@types/react": "^18.0.14", + "@types/styled-components": "^5.1.26", "eslint": "^8.23.1", "eslint-config-next": "12.2.0", "typescript": "^4.7.4" diff --git a/tsconfig.json b/tsconfig.json index 58beed5..c9118e1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -17,12 +17,18 @@ "moduleResolution": "nodenext", "resolveJsonModule": true, "isolatedModules": true, - "jsx": "preserve" + "jsx": "preserve", + "plugins": [ + { + "name": "next" + } + ] }, "include": [ "next-env.d.ts", "**/*.ts", - "**/*.tsx" + "**/*.tsx", + ".next/types/**/*.ts" ], "exclude": [ "node_modules" diff --git a/yarn.lock b/yarn.lock index dfe70a7..fbe5e31 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,87 @@ # yarn lockfile v1 +"@babel/code-frame@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/generator@^7.20.5": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.5.tgz#cb25abee3178adf58d6814b68517c62bdbfdda95" + integrity sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA== + dependencies: + "@babel/types" "^7.20.5" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" + +"@babel/helper-annotate-as-pure@^7.16.0": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" + integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-environment-visitor@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== + +"@babel/helper-function-name@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" + integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== + dependencies: + "@babel/template" "^7.18.10" + "@babel/types" "^7.19.0" + +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.16.0": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-string-parser@^7.19.4": + version "7.19.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" + integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== + +"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.18.10", "@babel/parser@^7.20.5": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.5.tgz#7f3c7335fe417665d929f34ae5dceae4c04015e8" + integrity sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA== + "@babel/runtime-corejs3@^7.10.2": version "7.19.0" resolved "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.19.0.tgz" @@ -17,11 +98,67 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/template@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" + integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.18.10" + "@babel/types" "^7.18.10" + +"@babel/traverse@^7.4.5": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.5.tgz#78eb244bea8270fdda1ef9af22a5d5e5b7e57133" + integrity sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.20.5" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.20.5" + "@babel/types" "^7.20.5" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.20.5": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.5.tgz#e206ae370b5393d94dfd1d04cd687cace53efa84" + integrity sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg== + dependencies: + "@babel/helper-string-parser" "^7.19.4" + "@babel/helper-validator-identifier" "^7.19.1" + to-fast-properties "^2.0.0" + "@balena/dockerignore@^1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== +"@emotion/is-prop-valid@^1.1.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz#7f2d35c97891669f7e276eb71c83376a5dc44c83" + integrity sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg== + dependencies: + "@emotion/memoize" "^0.8.0" + +"@emotion/memoize@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.0.tgz#f580f9beb67176fa57aae70b08ed510e1b18980f" + integrity sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA== + +"@emotion/stylis@^0.8.4": + version "0.8.5" + resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04" + integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ== + +"@emotion/unitless@^0.7.4": + version "0.7.5" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" + integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== + "@eslint/eslintrc@^1.3.2": version "1.3.2" resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz" @@ -61,10 +198,42 @@ resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== -"@next/env@12.3.0": - version "12.3.0" - resolved "https://registry.npmjs.org/@next/env/-/env-12.3.0.tgz" - integrity sha512-PTJpjAFVbzBQ9xXpzMTroShvD5YDIIy46jQ7d4LrWpY+/5a8H90Tm8hE3Hvkc5RBRspVo7kvEOnqQms0A+2Q6w== +"@jridgewell/gen-mapping@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@^0.3.9": + version "0.3.17" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" + integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + +"@next/env@13.0.6": + version "13.0.6" + resolved "https://registry.yarnpkg.com/@next/env/-/env-13.0.6.tgz#3fcab11ffbe95bff127827d9f7f3139bc5e6adff" + integrity sha512-yceT6DCHKqPRS1cAm8DHvDvK74DLIkDQdm5iV+GnIts8h0QbdHvkUIkdOvQoOODgpr6018skbmSQp12z5OWIQQ== "@next/eslint-plugin-next@12.2.0": version "12.2.0" @@ -73,70 +242,70 @@ dependencies: glob "7.1.7" -"@next/swc-android-arm-eabi@12.3.0": - version "12.3.0" - resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.3.0.tgz#9a934904643591cb6f66eb09803a92d2b10ada13" - integrity sha512-/PuirPnAKsYBw93w/7Q9hqy+KGOU9mjYprZ/faxMUJh/dc6v3rYLxkZKNG9nFPIW4QKNTCnhP40xF9hLnxO+xg== +"@next/swc-android-arm-eabi@13.0.6": + version "13.0.6" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.0.6.tgz#c971e5a3f8aae875ac1d9fdb159b7e126d8d98d5" + integrity sha512-FGFSj3v2Bluw8fD/X+1eXIEB0PhoJE0zfutsAauRhmNpjjZshLDgoXMWm1jTRL/04K/o9gwwO2+A8+sPVCH1uw== -"@next/swc-android-arm64@12.3.0": - version "12.3.0" - resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-12.3.0.tgz#c1e3e24d0625efe88f45a2135c8f5c4dff594749" - integrity sha512-OaI+FhAM6P9B6Ybwbn0Zl8YwWido0lLwhDBi9WiYCh4RQmIXAyVIoIJPHo4fP05+mXaJ/k1trvDvuURvHOq2qw== +"@next/swc-android-arm64@13.0.6": + version "13.0.6" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.0.6.tgz#ecacae60f1410136cc31f9e1e09e78e624ca2d68" + integrity sha512-7MgbtU7kimxuovVsd7jSJWMkIHBDBUsNLmmlkrBRHTvgzx5nDBXogP0hzZm7EImdOPwVMPpUHRQMBP9mbsiJYQ== -"@next/swc-darwin-arm64@12.3.0": - version "12.3.0" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.3.0.tgz#37a9f971b9ad620184af69f38243a36757126fb9" - integrity sha512-9s4d3Mhii+WFce8o8Jok7WC3Bawkr9wEUU++SJRptjU1L5tsfYJMrSYCACHLhZujziNDLyExe4Hwwsccps1sfg== +"@next/swc-darwin-arm64@13.0.6": + version "13.0.6" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.0.6.tgz#266e9e0908024760eba0dfce17edc90ffcba5fdc" + integrity sha512-AUVEpVTxbP/fxdFsjVI9d5a0CFn6NVV7A/RXOb0Y+pXKIIZ1V5rFjPwpYfIfyOo2lrqgehMNQcyMRoTrhq04xg== -"@next/swc-darwin-x64@12.3.0": - version "12.3.0" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-12.3.0.tgz#fb017f1066c8cf2b8da49ef3588c8731d8bf1bf3" - integrity sha512-2scC4MqUTwGwok+wpVxP+zWp7WcCAVOtutki2E1n99rBOTnUOX6qXkgxSy083yBN6GqwuC/dzHeN7hIKjavfRA== +"@next/swc-darwin-x64@13.0.6": + version "13.0.6" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.0.6.tgz#4be4ca7bc37f9c93d2e38be5ff313873ad758c09" + integrity sha512-SasCDJlshglsPnbzhWaIF6VEGkQy2NECcAOxPwaPr0cwbbt4aUlZ7QmskNzgolr5eAjFS/xTr7CEeKJtZpAAtQ== -"@next/swc-freebsd-x64@12.3.0": - version "12.3.0" - resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.3.0.tgz#e7955b016f41e0f95088e3459ff4197027871fbf" - integrity sha512-xAlruUREij/bFa+qsE1tmsP28t7vz02N4ZDHt2lh3uJUniE0Ne9idyIDLc1Ed0IF2RjfgOp4ZVunuS3OM0sngw== +"@next/swc-freebsd-x64@13.0.6": + version "13.0.6" + resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.0.6.tgz#42eb9043ee65ea5927ba550f4b59827d7064c47b" + integrity sha512-6Lbxd9gAdXneTkwHyYW/qtX1Tdw7ND9UbiGsGz/SP43ZInNWnW6q0au4hEVPZ9bOWWRKzcVoeTBdoMpQk9Hx9w== -"@next/swc-linux-arm-gnueabihf@12.3.0": - version "12.3.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.3.0.tgz#d2233267bffaa24378245b328f2f8a01a37eab29" - integrity sha512-jin2S4VT/cugc2dSZEUIabhYDJNgrUh7fufbdsaAezgcQzqfdfJqfxl4E9GuafzB4cbRPTaqA0V5uqbp0IyGkQ== +"@next/swc-linux-arm-gnueabihf@13.0.6": + version "13.0.6" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.0.6.tgz#aab663282b5f15d12bf9de1120175f438a44c924" + integrity sha512-wNdi5A519e1P+ozEuYOhWPzzE6m1y7mkO6NFwn6watUwO0X9nZs7fT9THmnekvmFQpaZ6U+xf2MQ9poQoCh6jQ== -"@next/swc-linux-arm64-gnu@12.3.0": - version "12.3.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.3.0.tgz#149a0cb877352ab63e81cf1dd53b37f382929d2a" - integrity sha512-RqJHDKe0WImeUrdR0kayTkRWgp4vD/MS7g0r6Xuf8+ellOFH7JAAJffDW3ayuVZeMYOa7RvgNFcOoWnrTUl9Nw== +"@next/swc-linux-arm64-gnu@13.0.6": + version "13.0.6" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.0.6.tgz#5e2b6df4636576a00befb7bd414820a12161a9af" + integrity sha512-e8KTRnleQY1KLk5PwGV5hrmvKksCc74QRpHl5ffWnEEAtL2FE0ave5aIkXqErsPdXkiKuA/owp3LjQrP+/AH7Q== -"@next/swc-linux-arm64-musl@12.3.0": - version "12.3.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.3.0.tgz#73ec7f121f56fd7cf99cf2b00cf41f62c4560e90" - integrity sha512-nvNWoUieMjvDjpYJ/4SQe9lQs2xMj6ZRs8N+bmTrVu9leY2Fg3WD6W9p/1uU9hGO8u+OdF13wc4iRShu/WYIHg== +"@next/swc-linux-arm64-musl@13.0.6": + version "13.0.6" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.0.6.tgz#4a5e91a36cf140cad974df602d647e64b1b9473f" + integrity sha512-/7RF03C3mhjYpHN+pqOolgME3guiHU5T3TsejuyteqyEyzdEyLHod+jcYH6ft7UZ71a6TdOewvmbLOtzHW2O8A== -"@next/swc-linux-x64-gnu@12.3.0": - version "12.3.0" - resolved "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.3.0.tgz" - integrity sha512-4ajhIuVU9PeQCMMhdDgZTLrHmjbOUFuIyg6J19hZqwEwDTSqQyrSLkbJs2Nd7IRiM6Ul/XyrtEFCpk4k+xD2+w== +"@next/swc-linux-x64-gnu@13.0.6": + version "13.0.6" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.0.6.tgz#accb8a721a99e704565b936f16e96fa0c67e8db1" + integrity sha512-kxyEXnYHpOEkFnmrlwB1QlzJtjC6sAJytKcceIyFUHbCaD3W/Qb5tnclcnHKTaFccizZRePXvV25Ok/eUSpKTw== -"@next/swc-linux-x64-musl@12.3.0": - version "12.3.0" - resolved "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.3.0.tgz" - integrity sha512-U092RBYbaGxoMAwpauePJEu2PuZSEoUCGJBvsptQr2/2XIMwAJDYM4c/M5NfYEsBr+yjvsYNsOpYfeQ88D82Yg== +"@next/swc-linux-x64-musl@13.0.6": + version "13.0.6" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.0.6.tgz#2affaa2f4f01bc190a539d895118a6ad1a477645" + integrity sha512-N0c6gubS3WW1oYYgo02xzZnNatfVQP/CiJq2ax+DJ55ePV62IACbRCU99TZNXXg+Kos6vNW4k+/qgvkvpGDeyA== -"@next/swc-win32-arm64-msvc@12.3.0": - version "12.3.0" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.3.0.tgz#e0d9d26297f52b0d3b3c2f5138ddcce30601bc98" - integrity sha512-pzSzaxjDEJe67bUok9Nxf9rykbJfHXW0owICFsPBsqHyc+cr8vpF7g9e2APTCddtVhvjkga9ILoZJ9NxWS7Yiw== +"@next/swc-win32-arm64-msvc@13.0.6": + version "13.0.6" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.0.6.tgz#28e5c042772865efd05197a8d1db5920156997fc" + integrity sha512-QjeMB2EBqBFPb/ac0CYr7GytbhUkrG4EwFWbcE0vsRp4H8grt25kYpFQckL4Jak3SUrp7vKfDwZ/SwO7QdO8vw== -"@next/swc-win32-ia32-msvc@12.3.0": - version "12.3.0" - resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.3.0.tgz#37daeac1acc68537b8e76cd81fde96dce11f78b4" - integrity sha512-MQGUpMbYhQmTZ06a9e0hPQJnxFMwETo2WtyAotY3GEzbNCQVbCGhsvqEKcl+ZEHgShlHXUWvSffq1ZscY6gK7A== +"@next/swc-win32-ia32-msvc@13.0.6": + version "13.0.6" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.0.6.tgz#30d91a6d847fa8bce9f8a0f9d2b469d574270be5" + integrity sha512-EQzXtdqRTcmhT/tCq81rIwE36Y3fNHPInaCuJzM/kftdXfa0F+64y7FAoMO13npX8EG1+SamXgp/emSusKrCXg== -"@next/swc-win32-x64-msvc@12.3.0": - version "12.3.0" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.3.0.tgz#c1b983316307f8f55fee491942b5d244bd2036e2" - integrity sha512-C/nw6OgQpEULWqs+wgMHXGvlJLguPRFFGqR2TAqWBerQ8J+Sg3z1ZTqwelkSi4FoqStGuZ2UdFHIDN1ySmR1xA== +"@next/swc-win32-x64-msvc@13.0.6": + version "13.0.6" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.0.6.tgz#dfa28ddb335c16233d22cf39ec8cdf723e6587a1" + integrity sha512-pSkqZ//UP/f2sS9T7IvHLfEWDPTX0vRyXJnAUNisKvO3eF3e1xdhDX7dix/X3Z3lnN4UjSwOzclAI87JFbOwmQ== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -164,13 +333,23 @@ resolved "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.4.tgz" integrity sha512-LwzQKA4vzIct1zNZzBmRKI9QuNpLgTQMEjsQLf3BXuGYb3QPTP4Yjf6mkdX+X1mYttZ808QpOwAzZjv28kq7DA== -"@swc/helpers@0.4.11": - version "0.4.11" - resolved "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.11.tgz" - integrity sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw== +"@swc/helpers@0.4.14": + version "0.4.14" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.14.tgz#1352ac6d95e3617ccb7c1498ff019654f1e12a74" + integrity sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw== dependencies: tslib "^2.4.0" +"@types/cookie@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d" + integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== + +"@types/cookie@^0.5.1": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.5.1.tgz#b29aa1f91a59f35e29ff8f7cb24faf1a3a750554" + integrity sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g== + "@types/docker-modem@*": version "3.0.2" resolved "https://registry.yarnpkg.com/@types/docker-modem/-/docker-modem-3.0.2.tgz#c49c902e17364fc724e050db5c1d2b298c6379d4" @@ -187,6 +366,14 @@ "@types/docker-modem" "*" "@types/node" "*" +"@types/hoist-non-react-statics@*": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" + integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== + dependencies: + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + "@types/json5@^0.0.29": version "0.0.29" resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" @@ -197,12 +384,17 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.12.tgz#89e7f8aa8c88abf432f9bd594888144d7dba10aa" integrity sha512-FgD3NtTAKvyMmD44T07zz2fEf+OKwutgBCEVM8GcvMGVGaDktiLNTDvPwC/LUe3PinMW+X6CuLOF2Ui1mAlSXg== +"@types/node@^16.10.2": + version "16.18.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.9.tgz#47c491cfbc10460571d766c16526748fa9ad96a1" + integrity sha512-nhrqXYxiQ+5B/tPorWum37VgAiefi/wmfJ1QZKGKKecC8/3HqcTTJD0O+VABSPwtseMMF7NCPVT9uGgwn0YqsQ== + "@types/prop-types@*": version "15.7.5" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== -"@types/react@^18.0.14": +"@types/react@*", "@types/react@^18.0.14": version "18.0.26" resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.26.tgz#8ad59fc01fef8eaf5c74f4ea392621749f0b7917" integrity sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug== @@ -223,6 +415,15 @@ dependencies: "@types/node" "*" +"@types/styled-components@^5.1.26": + version "5.1.26" + resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-5.1.26.tgz#5627e6812ee96d755028a98dae61d28e57c233af" + integrity sha512-KuKJ9Z6xb93uJiIyxo/+ksS7yLjS1KzG6iv5i78dhVg/X3u5t1H7juRWqVmodIdz6wGVaIApo1u01kmFRdJHVw== + dependencies: + "@types/hoist-non-react-statics" "*" + "@types/react" "*" + csstype "^3.0.2" + "@typescript-eslint/parser@^5.21.0": version "5.36.2" resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.36.2.tgz" @@ -267,16 +468,46 @@ "@typescript-eslint/types" "5.36.2" eslint-visitor-keys "^3.3.0" +acorn-jsx@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" + integrity sha512-AU7pnZkguthwBjKgCg6998ByQNIMjbuDQZ8bb78QAFZwPfmKia8AIzgY/gWgqCjnht8JLdXmB4YxA0KaV60ncQ== + dependencies: + acorn "^3.0.4" + acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== +acorn@^3.0.4: + version "3.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + integrity sha512-OLUyIIZ7mF5oaAUT1w0TFqQS81q3saT46x8t7ukpPjMNk+nbs4ZHhs7ToV8EWnLYLepjETXd4XaCE4uxkMeqUw== + +acorn@^5.5.0: + version "5.7.4" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" + integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== + acorn@^8.8.0: version "8.8.0" resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz" integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== +ajv-keywords@^1.0.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" + integrity sha512-vuBv+fm2s6cqUyey2A7qYcvsik+GMDJsw8BARP2sDE76cqmaZVarsvHf7Vx6VJ0Xk8gLl+u3MoAPf6gKzJefeA== + +ajv@^4.7.0: + version "4.11.8" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" + integrity sha512-I/bSHSNEcFFqXLf91nchoNB9D1Kie3QKcWdchYUaoIg1+1bdWDkdfdlvdIOJbi9U8xR0y+MWc5D+won9v95WlQ== + dependencies: + co "^4.6.0" + json-stable-stringify "^1.0.1" + ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" @@ -287,11 +518,45 @@ ajv@^6.10.0, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ansi-escapes@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" + integrity sha512-wiXutNjDUlNEDWHcYH3jtZUhd3c4/VojassD8zHdHCY13xbZy2XbW+NKQwA0tWGBVzDA9qEzYwfoSsWmviidhw== + +ansi-gray@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" + integrity sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw== + dependencies: + ansi-wrap "0.1.0" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== + +ansi-regex@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" + integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== + ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" @@ -299,6 +564,23 @@ ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +ansi-wrap@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" + integrity sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw== + +app-root-path@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-1.4.0.tgz#6335d865c9640d0fad99004e5a79232238e92dfa" + integrity sha512-rHo0+00Cq451AYsCP1jaDGlrI7FD6nhFs3CC9Tf6SFKiHud3Y3rj6dI/kXJfft8J6kVgWvJLmqQd5ta2+U8O4Q== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + argparse@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" @@ -312,6 +594,11 @@ aria-query@^4.2.2: "@babel/runtime" "^7.10.2" "@babel/runtime-corejs3" "^7.10.2" +array-differ@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" + integrity sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ== + array-includes@^3.1.4, array-includes@^3.1.5: version "3.1.5" resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz" @@ -328,6 +615,11 @@ array-union@^2.1.0: resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +array-uniq@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== + array.prototype.flat@^1.2.5: version "1.3.0" resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz" @@ -370,6 +662,22 @@ axobject-query@^2.2.0: resolved "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz" integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== +"babel-plugin-styled-components@>= 1.12.0": + version "2.0.7" + resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.7.tgz#c81ef34b713f9da2b7d3f5550df0d1e19e798086" + integrity sha512-i7YhvPgVqRKfoQ66toiZ06jPNA3p6ierpfUuEWxNF+fV27Uv5gxBkf8KZLHUCc1nFA9j6+80pYoIpqCeyW3/bA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.0" + "@babel/helper-module-imports" "^7.16.0" + babel-plugin-syntax-jsx "^6.18.0" + lodash "^4.17.11" + picomatch "^2.3.0" + +babel-plugin-syntax-jsx@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" + integrity sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw== + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" @@ -387,6 +695,11 @@ bcrypt-pbkdf@^1.0.2: dependencies: tweetnacl "^0.14.3" +beeper@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" + integrity sha512-3vqtKL1N45I5dV0RdssXZG7X6pCqQrWPNOlBPZPrd+QkE2HEhR57Z04m0KtpbsZH73j+a3F8UD1TQnn+ExTvIA== + bl@^4.0.3: version "4.1.0" resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" @@ -411,6 +724,11 @@ braces@^3.0.2: dependencies: fill-range "^7.0.1" +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + buffer@^5.5.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" @@ -432,15 +750,52 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" +caller-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" + integrity sha512-UJiE1otjXPF5/x+T3zTnSFiTOEmJoGTD9HmBoxnCUwho61a2eSNn/VwtwuIBDAo2SEOv1AJ7ARI5gCmohFLu/g== + dependencies: + callsites "^0.2.0" + +callsites@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" + integrity sha512-Zv4Dns9IbXXmPkgRRUjAaJQgfN4xX5p6+RQFhWUqscdvvK2xK/ZL8b3IXIJsj+4sD+f24NwnWy2BY8AJ82JB0A== + callsites@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -caniuse-lite@^1.0.30001332: - version "1.0.30001393" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001393.tgz" - integrity sha512-N/od11RX+Gsk+1qY/jbPa0R6zJupEa0lxeBG598EbrtblxVCTJsQwbRBm6+V+rxpc5lHKdsXb9RY83cZIPLseA== +camelize@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.1.tgz#89b7e16884056331a35d6b5ad064332c91daa6c3" + integrity sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ== + +caniuse-lite@^1.0.30001406: + version "1.0.30001439" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001439.tgz#ab7371faeb4adff4b74dad1718a6fd122e45d9cb" + integrity sha512-1MgUzEkoMO6gKfXflStpYgZDlFM7M/ck/bgfVCACO5vnAf0fXoNVHdWtqGU+MYca+4bL9Z5bpOVmR33cWW9G2A== + +chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" chalk@^4.0.0: version "4.1.2" @@ -455,6 +810,55 @@ chownr@^1.1.1: resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== +circular-json@^0.3.1: + version "0.3.3" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" + integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A== + +cli-cursor@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" + integrity sha512-25tABq090YNKkF6JH7lcwO0zFJTRke4Jcq9iX2nr/Sz0Cjjv4gckmwlW6Ty/aoyFd6z3ysR2hMGC2GFugmBo6A== + dependencies: + restore-cursor "^1.0.1" + +cli-width@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" + integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== + +client-only@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" + integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== + +clone-stats@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" + integrity sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA== + +clone@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + color-convert@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" @@ -462,21 +866,65 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + color-name@~1.1.4: version "1.1.4" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + concat-map@0.0.1: version "0.0.1" resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== +concat-stream@^1.4.6: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +cookie@^0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + +cookie@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +cookies-next@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/cookies-next/-/cookies-next-2.1.1.tgz#8d82f1b78fccfb19d9d7c26766fa5707a3ec4695" + integrity sha512-AZGZPdL1hU3jCjN2UMJTGhLOYzNUN9Gm+v8BdptYIHUdwz397Et1p+sZRfvAl8pKnnmMdX2Pk9xDRKCGBum6GA== + dependencies: + "@types/cookie" "^0.4.1" + "@types/node" "^16.10.2" + cookie "^0.4.0" + core-js-pure@^3.20.2: version "3.25.1" resolved "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.25.1.tgz" integrity sha512-7Fr74bliUDdeJCBMxkkIuQ4xfxn/SwrVg+HkJUAoNEXVqYLv55l6Af0dJ5Lq2YBUW9yKqSkLXaS5SYPK6MGa/A== +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + cpu-features@~0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/cpu-features/-/cpu-features-0.0.4.tgz#0023475bb4f4c525869c162e4108099e35bf19d8" @@ -494,17 +942,44 @@ cross-spawn@^7.0.2: shebang-command "^2.0.0" which "^2.0.1" +css-color-keywords@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" + integrity sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg== + +css-to-react-native@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-3.0.0.tgz#62dbe678072a824a689bcfee011fc96e02a7d756" + integrity sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ== + dependencies: + camelize "^1.0.0" + css-color-keywords "^1.0.0" + postcss-value-parser "^4.0.2" + csstype@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + damerau-levenshtein@^1.0.8: version "1.0.8" resolved "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz" integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== -debug@^2.6.9: +dateformat@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062" + integrity sha512-GODcnWq3YGoTnygPfi02ygEiRxqUxpJwuRHjdhJYuxpcZmDq4rjBiXYmbCCzStxo176ixfLT6i4NPwQooRySnw== + +debug@^2.1.1, debug@^2.6.9: version "2.6.9" resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -518,14 +993,14 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: +debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" -deep-is@^0.1.3: +deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.4" resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== @@ -564,6 +1039,14 @@ dockerode@^3.3.4: docker-modem "^3.0.0" tar-fs "~2.0.1" +doctrine@^1.2.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha512-lsGyRuYr4/PIB0txi+Fy2xOMI2dGaTguCaotzFGkVZuKR5usKfcRWIFKNM3QNrU7hh/+w2bwTW+ZeXPK5l8uVg== + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + doctrine@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" @@ -578,6 +1061,13 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +duplexer2@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" + integrity sha512-+AWBwjGadtksxjOQSFDhPNQbed7icNXApT4+2BNpsXzcCBiInq2H9XW0O8sfHFaPmnQRs7cg/P0fAr2IWQSW0g== + dependencies: + readable-stream "~1.1.9" + emoji-regex@^9.2.2: version "9.2.2" resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" @@ -635,11 +1125,86 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" +es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@^0.10.62, es5-ext@~0.10.14: + version "0.10.62" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" + integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== + dependencies: + es6-iterator "^2.0.3" + es6-symbol "^3.1.3" + next-tick "^1.1.0" + +es6-iterator@^2.0.3, es6-iterator@~2.0.1, es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-map@^0.1.3: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" + integrity sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A== + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-set "~0.1.5" + es6-symbol "~3.1.1" + event-emitter "~0.3.5" + +es6-set@~0.1.5: + version "0.1.6" + resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.6.tgz#5669e3b2aa01d61a50ba79964f733673574983b8" + integrity sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw== + dependencies: + d "^1.0.1" + es5-ext "^0.10.62" + es6-iterator "~2.0.3" + es6-symbol "^3.1.3" + event-emitter "^0.3.5" + type "^2.7.2" + +es6-symbol@^3.1.1, es6-symbol@^3.1.3, es6-symbol@~3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +es6-weak-map@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" + integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== + dependencies: + d "1" + es5-ext "^0.10.46" + es6-iterator "^2.0.3" + es6-symbol "^3.1.1" + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== +escope@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" + integrity sha512-75IUQsusDdalQEW/G/2esa87J7raqdJF+Ca0/Xm5C3Q58Nr4yVYjZGp/P1+2xiEVgXRrA39dpRb8LcshajbqDQ== + dependencies: + es6-map "^0.1.3" + es6-weak-map "^2.0.1" + esrecurse "^4.1.0" + estraverse "^4.1.1" + eslint-config-next@12.2.0: version "12.2.0" resolved "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-12.2.0.tgz" @@ -655,6 +1220,16 @@ eslint-config-next@12.2.0: eslint-plugin-react "^7.29.4" eslint-plugin-react-hooks "^4.5.0" +eslint-config@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/eslint-config/-/eslint-config-0.3.0.tgz#d1cb5f1abb37eef302f5b613ebab3b1cf509bce1" + integrity sha512-lw/UhmFbaec30wmmUTgLA1aW3y960cTv5oh6T9n2x2M2Ri0mr4mPn2DwpS3unua7uKQJWEGPNKUmdJPzLb4G3g== + dependencies: + app-root-path "^1.0.0" + eslint "^2.1.0" + gulp-util "^3.0.7" + object-assign "^4.0.1" + eslint-import-resolver-node@^0.3.6: version "0.3.6" resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz" @@ -769,6 +1344,45 @@ eslint-visitor-keys@^3.3.0: resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== +eslint@^2.1.0: + version "2.13.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-2.13.1.tgz#e4cc8fa0f009fb829aaae23855a29360be1f6c11" + integrity sha512-29PFGeV6lLQrPaPHeCkjfgLRQPFflDiicoNZOw+c/JkaQ0Am55yUICdYZbmCiM+DSef+q7oCercimHvjNI0GAw== + dependencies: + chalk "^1.1.3" + concat-stream "^1.4.6" + debug "^2.1.1" + doctrine "^1.2.2" + es6-map "^0.1.3" + escope "^3.6.0" + espree "^3.1.6" + estraverse "^4.2.0" + esutils "^2.0.2" + file-entry-cache "^1.1.1" + glob "^7.0.3" + globals "^9.2.0" + ignore "^3.1.2" + imurmurhash "^0.1.4" + inquirer "^0.12.0" + is-my-json-valid "^2.10.0" + is-resolvable "^1.0.0" + js-yaml "^3.5.1" + json-stable-stringify "^1.0.0" + levn "^0.3.0" + lodash "^4.0.0" + mkdirp "^0.5.0" + optionator "^0.8.1" + path-is-absolute "^1.0.0" + path-is-inside "^1.0.1" + pluralize "^1.2.1" + progress "^1.1.8" + require-uncached "^1.0.2" + shelljs "^0.6.0" + strip-json-comments "~1.0.1" + table "^3.7.8" + text-table "~0.2.0" + user-home "^2.0.0" + eslint@^8.23.1: version "8.23.1" resolved "https://registry.npmjs.org/eslint/-/eslint-8.23.1.tgz" @@ -814,6 +1428,14 @@ eslint@^8.23.1: strip-json-comments "^3.1.0" text-table "^0.2.0" +espree@^3.1.6: + version "3.5.4" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" + integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A== + dependencies: + acorn "^5.5.0" + acorn-jsx "^3.0.0" + espree@^9.4.0: version "9.4.0" resolved "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz" @@ -823,6 +1445,11 @@ espree@^9.4.0: acorn-jsx "^5.3.2" eslint-visitor-keys "^3.3.0" +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + esquery@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" @@ -830,13 +1457,18 @@ esquery@^1.4.0: dependencies: estraverse "^5.1.0" -esrecurse@^4.3.0: +esrecurse@^4.1.0, esrecurse@^4.3.0: version "4.3.0" resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" +estraverse@^4.1.1, estraverse@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: version "5.3.0" resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" @@ -847,6 +1479,36 @@ esutils@^2.0.2: resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +event-emitter@^0.3.5, event-emitter@~0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + integrity sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA== + dependencies: + d "1" + es5-ext "~0.10.14" + +exit-hook@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" + integrity sha512-MsG3prOVw1WtLXAZbM3KiYtooKR1LvxHh3VHsVtIy0uiUu8usxgB/94DP2HxtD/661lLdB6yzQ09lGJSQr6nkg== + +ext@^1.1.2: + version "1.7.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" + integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== + dependencies: + type "^2.7.2" + +fancy-log@^1.1.0: + version "1.3.3" + resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7" + integrity sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw== + dependencies: + ansi-gray "^0.1.1" + color-support "^1.1.3" + parse-node-version "^1.0.0" + time-stamp "^1.0.0" + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" @@ -868,7 +1530,7 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@^2.0.6: +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== @@ -880,6 +1542,22 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +figures@^1.3.5: + version "1.7.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + integrity sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ== + dependencies: + escape-string-regexp "^1.0.5" + object-assign "^4.1.0" + +file-entry-cache@^1.1.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-1.3.1.tgz#44c61ea607ae4be9c1402f41f44270cbfe334ff8" + integrity sha512-JyVk7P0Hvw6uEAwH4Y0j+rZMvaMWvLBYRmRGAF2S6jKTycf0mMDcC7d21Y2KyrKJk3XI8YghSsk5KmRdbvg0VQ== + dependencies: + flat-cache "^1.2.1" + object-assign "^4.0.1" + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" @@ -902,6 +1580,16 @@ find-up@^5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" +flat-cache@^1.2.1: + version "1.3.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f" + integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg== + dependencies: + circular-json "^0.3.1" + graceful-fs "^4.1.2" + rimraf "~2.6.2" + write "^0.2.1" + flat-cache@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" @@ -945,6 +1633,20 @@ functions-have-names@^1.2.2: resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== +generate-function@^2.0.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f" + integrity sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ== + dependencies: + is-property "^1.0.2" + +generate-object-property@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" + integrity sha512-TuOwZWgJ2VAMEGJvAyPWvpqxSANF0LDpmyHauMjFYzaACvn+QTT/AZomvPCzVBV7yDN3OmwHQ5OvHaeLKre3JQ== + dependencies: + is-property "^1.0.0" + get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz" @@ -988,7 +1690,7 @@ glob@7.1.7, glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.2.0: +glob@^7.0.3, glob@^7.2.0: version "7.2.3" resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -1000,6 +1702,11 @@ glob@^7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + globals@^13.15.0: version "13.17.0" resolved "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz" @@ -1007,6 +1714,11 @@ globals@^13.15.0: dependencies: type-fest "^0.20.2" +globals@^9.2.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== + globby@^11.1.0: version "11.1.0" resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" @@ -1019,21 +1731,83 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" +glogg@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.2.tgz#2d7dd702beda22eb3bffadf880696da6d846313f" + integrity sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA== + dependencies: + sparkles "^1.0.0" + +graceful-fs@^4.1.2: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + grapheme-splitter@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== +gulp-util@^3.0.7: + version "3.0.8" + resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f" + integrity sha512-q5oWPc12lwSFS9h/4VIjG+1NuNDlJ48ywV2JKItY4Ycc/n1fXJeYPVQsfu5ZrhQi7FGSDBalwUCLar/GyHXKGw== + dependencies: + array-differ "^1.0.0" + array-uniq "^1.0.2" + beeper "^1.0.0" + chalk "^1.0.0" + dateformat "^2.0.0" + fancy-log "^1.1.0" + gulplog "^1.0.0" + has-gulplog "^0.1.0" + lodash._reescape "^3.0.0" + lodash._reevaluate "^3.0.0" + lodash._reinterpolate "^3.0.0" + lodash.template "^3.0.0" + minimist "^1.1.0" + multipipe "^0.1.2" + object-assign "^3.0.0" + replace-ext "0.0.1" + through2 "^2.0.0" + vinyl "^0.5.0" + +gulplog@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5" + integrity sha512-hm6N8nrm3Y08jXie48jsC55eCZz9mnb4OirAStEk2deqeyhXU3C1otDVh+ccttMuc1sBi6RX6ZJ720hs9RCvgw== + dependencies: + glogg "^1.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== + dependencies: + ansi-regex "^2.0.0" + has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + has-flag@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== +has-gulplog@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce" + integrity sha512-+F4GzLjwHNNDEAJW2DC1xXfEoPkRDmUdJ7CBYw4MpqtDwOnqdImJl7GWlpqx+Wko6//J8uKTnIe4wZSv7yCqmw== + dependencies: + sparkles "^1.0.0" + has-property-descriptors@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" @@ -1060,11 +1834,23 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" +hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.3.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + ieee754@^1.1.13: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== +ignore@^3.1.2: + version "3.3.10" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" + integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== + ignore@^5.2.0: version "5.2.0" resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" @@ -1091,11 +1877,30 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.3, inherits@^2.0.4: +inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +inquirer@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e" + integrity sha512-bOetEz5+/WpgaW4D1NYOk1aD+JCqRjqu/FwRFgnIfiP7FC/zinsrfyO1vlS3nyH/R7S0IH3BIHBu4DBIDSqiGQ== + dependencies: + ansi-escapes "^1.1.0" + ansi-regex "^2.0.0" + chalk "^1.0.0" + cli-cursor "^1.0.1" + cli-width "^2.0.0" + figures "^1.3.5" + lodash "^4.3.0" + readline2 "^1.0.1" + run-async "^0.1.0" + rx-lite "^3.1.2" + string-width "^1.0.1" + strip-ansi "^3.0.0" + through "^2.3.6" + internal-slot@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz" @@ -1144,6 +1949,18 @@ is-extglob@^2.1.1: resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== + is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: version "4.0.3" resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" @@ -1151,6 +1968,22 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: dependencies: is-extglob "^2.1.1" +is-my-ip-valid@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.1.tgz#f7220d1146257c98672e6fba097a9f3f2d348442" + integrity sha512-jxc8cBcOWbNK2i2aTkCZP6i7wkHF1bqKFrwEHuN5Jtg5BSaZHUZQ/JTOJwoV41YvHnOaRyWWh72T/KvfNz9DJg== + +is-my-json-valid@^2.10.0: + version "2.20.6" + resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.20.6.tgz#a9d89e56a36493c77bda1440d69ae0dc46a08387" + integrity sha512-1JQwulVNjx8UqkPE/bqDaxtH4PXCe/2VRh/y3p99heOV87HG4Id5/VfDswd+YiAfHcRTfDlWgISycnHuhZq1aw== + dependencies: + generate-function "^2.0.0" + generate-object-property "^1.1.0" + is-my-ip-valid "^1.0.0" + jsonpointer "^5.0.0" + xtend "^4.0.0" + is-negative-zero@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" @@ -1168,6 +2001,11 @@ is-number@^7.0.0: resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-property@^1.0.0, is-property@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + integrity sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g== + is-regex@^1.1.4: version "1.1.4" resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" @@ -1176,6 +2014,11 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-resolvable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== + is-shared-array-buffer@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" @@ -1204,6 +2047,16 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + +isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + isexe@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" @@ -1214,11 +2067,19 @@ js-sdsl@^4.1.4: resolved "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.4.tgz" integrity sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw== -"js-tokens@^3.0.0 || ^4.0.0": +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== +js-yaml@^3.5.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" @@ -1226,6 +2087,11 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" @@ -1236,6 +2102,13 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== +json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.2.tgz#e06f23128e0bbe342dc996ed5a19e28b57b580e0" + integrity sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g== + dependencies: + jsonify "^0.0.1" + json5@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz" @@ -1243,6 +2116,16 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" +jsonify@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.1.tgz#2aa3111dae3d34a0f151c63f3a45d995d9420978" + integrity sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg== + +jsonpointer@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" + integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== + "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.2: version "3.3.3" resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz" @@ -1263,6 +2146,14 @@ language-tags@^1.0.5: dependencies: language-subtag-registry "~0.3.2" +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + levn@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" @@ -1278,11 +2169,115 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +lodash._basecopy@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + integrity sha512-rFR6Vpm4HeCK1WPGvjZSJ+7yik8d8PVUdCJx5rT2pogG4Ve/2ZS7kfmO5l5T2o5V2mqlNIfSF5MZlr1+xOoYQQ== + +lodash._basetostring@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" + integrity sha512-mTzAr1aNAv/i7W43vOR/uD/aJ4ngbtsRaCubp2BfZhlGU/eORUjg/7F6X0orNMdv33JOrdgGybtvMN/po3EWrA== + +lodash._basevalues@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" + integrity sha512-H94wl5P13uEqlCg7OcNNhMQ8KvWSIyqXzOPusRgHC9DK3o54P6P3xtbXlVbRABG4q5gSmp7EDdJ0MSuW9HX6Mg== + +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + integrity sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA== + +lodash._isiterateecall@^3.0.0: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + integrity sha512-De+ZbrMu6eThFti/CSzhRvTKMgQToLxbij58LMfM8JnYDNSOjkjTCIaa8ixglOeGh2nyPlakbt5bJWJ7gvpYlQ== + +lodash._reescape@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a" + integrity sha512-Sjlavm5y+FUVIF3vF3B75GyXrzsfYV8Dlv3L4mEpuB9leg8N6yf/7rU06iLPx9fY0Mv3khVp9p7Dx0mGV6V5OQ== + +lodash._reevaluate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed" + integrity sha512-OrPwdDc65iJiBeUe5n/LIjd7Viy99bKwDdk7Z5ljfZg0uFRFlfQaCy9tZ4YMAag9WAZmlVpe1iZrkIMMSMHD3w== + +lodash._reinterpolate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + integrity sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA== + +lodash._root@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" + integrity sha512-O0pWuFSK6x4EXhM1dhZ8gchNtG7JMqBtrHdoUFUWXD7dJnNSUze1GuyQr5sOs0aCvgGeI3o/OJW8f4ca7FDxmQ== + +lodash.escape@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" + integrity sha512-n1PZMXgaaDWZDSvuNZ/8XOcYO2hOKDqZel5adtR30VKQAtoWs/5AOeFA0vPV8moiPzlqe7F4cP2tzpFewQyelQ== + dependencies: + lodash._root "^3.0.0" + +lodash.isarguments@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== + +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + integrity sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ== + +lodash.keys@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + integrity sha512-CuBsapFjcubOGMn3VD+24HOAPxM79tH+V6ivJL3CHYjtrawauDJHUk//Yew9Hvc6e9rbCrURGk8z6PC+8WJBfQ== + dependencies: + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== +lodash.restparam@^3.0.0: + version "3.6.1" + resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" + integrity sha512-L4/arjjuq4noiUJpt3yS6KIKDtJwNe2fIYgMqyYYKoeIfV1iEqvPwhCx23o+R9dzouGihDAPN1dTIRWa7zk8tw== + +lodash.template@^3.0.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f" + integrity sha512-0B4Y53I0OgHUJkt+7RmlDFWKjVAI/YUpWNiL9GQz5ORDr4ttgfQGo+phBWKFLJbBdtOwgMuUkdOHOnPg45jKmQ== + dependencies: + lodash._basecopy "^3.0.0" + lodash._basetostring "^3.0.0" + lodash._basevalues "^3.0.0" + lodash._isiterateecall "^3.0.0" + lodash._reinterpolate "^3.0.0" + lodash.escape "^3.0.0" + lodash.keys "^3.0.0" + lodash.restparam "^3.0.0" + lodash.templatesettings "^3.0.0" + +lodash.templatesettings@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5" + integrity sha512-TcrlEr31tDYnWkHFWDCV3dHYroKEXpJZ2YJYvJdhN+y4AkWMDZ5I4I8XDtUKqSAyG81N7w+I1mFEJtcED+tGqQ== + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.escape "^3.0.0" + +lodash@^4.0.0, lodash@^4.17.11, lodash@^4.3.0: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" @@ -1317,6 +2312,11 @@ minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" +minimist@^1.1.0: + version "1.2.7" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" + integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== + minimist@^1.2.0, minimist@^1.2.6: version "1.2.6" resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" @@ -1327,6 +2327,13 @@ mkdirp-classic@^0.5.2: resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== +mkdirp@^0.5.0, mkdirp@^0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + ms@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" @@ -1337,6 +2344,18 @@ ms@2.1.2, ms@^2.1.1: resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +multipipe@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b" + integrity sha512-7ZxrUybYv9NonoXgwoOqtStIu18D1c3eFZj27hqgf5kBrBF8Q+tE8V0MW8dKM5QLkQPh1JhhbKgHLY9kifov4Q== + dependencies: + duplexer2 "0.0.2" + +mute-stream@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" + integrity sha512-EbrziT4s8cWPmzr47eYVW3wimS4HsvlnV5ri1xw1aR6JQo/OrJX5rkl32K/QQHdxeabJETtfeaROGhd8W7uBgg== + nan@^2.15.0, nan@^2.16.0: version "2.16.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.16.0.tgz#664f43e45460fb98faf00edca0bb0d7b8dce7916" @@ -1352,33 +2371,47 @@ natural-compare@^1.4.0: resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -next@^12.3.0: - version "12.3.0" - resolved "https://registry.npmjs.org/next/-/next-12.3.0.tgz" - integrity sha512-GpzI6me9V1+XYtfK0Ae9WD0mKqHyzQlGq1xH1rzNIYMASo4Tkl4rTe9jSqtBpXFhOS33KohXs9ZY38Akkhdciw== - dependencies: - "@next/env" "12.3.0" - "@swc/helpers" "0.4.11" - caniuse-lite "^1.0.30001332" - postcss "8.4.14" - styled-jsx "5.0.6" - use-sync-external-store "1.2.0" - optionalDependencies: - "@next/swc-android-arm-eabi" "12.3.0" - "@next/swc-android-arm64" "12.3.0" - "@next/swc-darwin-arm64" "12.3.0" - "@next/swc-darwin-x64" "12.3.0" - "@next/swc-freebsd-x64" "12.3.0" - "@next/swc-linux-arm-gnueabihf" "12.3.0" - "@next/swc-linux-arm64-gnu" "12.3.0" - "@next/swc-linux-arm64-musl" "12.3.0" - "@next/swc-linux-x64-gnu" "12.3.0" - "@next/swc-linux-x64-musl" "12.3.0" - "@next/swc-win32-arm64-msvc" "12.3.0" - "@next/swc-win32-ia32-msvc" "12.3.0" - "@next/swc-win32-x64-msvc" "12.3.0" +next-tick@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" + integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== -object-assign@^4.1.1: +next@^13.0.6: + version "13.0.6" + resolved "https://registry.yarnpkg.com/next/-/next-13.0.6.tgz#f9a2e9e2df9ad60e1b6b716488c9ad501a383621" + integrity sha512-COvigvms2LRt1rrzfBQcMQ2GZd86Mvk1z+LOLY5pniFtL4VrTmhZ9salrbKfSiXbhsD01TrDdD68ec3ABDyscA== + dependencies: + "@next/env" "13.0.6" + "@swc/helpers" "0.4.14" + caniuse-lite "^1.0.30001406" + postcss "8.4.14" + styled-jsx "5.1.0" + optionalDependencies: + "@next/swc-android-arm-eabi" "13.0.6" + "@next/swc-android-arm64" "13.0.6" + "@next/swc-darwin-arm64" "13.0.6" + "@next/swc-darwin-x64" "13.0.6" + "@next/swc-freebsd-x64" "13.0.6" + "@next/swc-linux-arm-gnueabihf" "13.0.6" + "@next/swc-linux-arm64-gnu" "13.0.6" + "@next/swc-linux-arm64-musl" "13.0.6" + "@next/swc-linux-x64-gnu" "13.0.6" + "@next/swc-linux-x64-musl" "13.0.6" + "@next/swc-win32-arm64-msvc" "13.0.6" + "@next/swc-win32-ia32-msvc" "13.0.6" + "@next/swc-win32-x64-msvc" "13.0.6" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== + +object-assign@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" + integrity sha512-jHP15vXVGeVh1HuaA2wY6lxk+whK/x4KBG88VXeRma7CCun7iGD5qPc4eYykQ9sdQvg8jkwFKsSxHln2ybW3xQ== + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== @@ -1445,6 +2478,23 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" +onetime@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" + integrity sha512-GZ+g4jayMqzCRMgB2sol7GiCLjKfS1PINkjmx8spcKce1LiVqcbQreXwqs2YAFXC6R03VIG28ZS31t8M866v6A== + +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + optionator@^0.9.1: version "0.9.1" resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" @@ -1457,6 +2507,11 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ== + p-limit@^3.0.2: version "3.1.0" resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" @@ -1478,6 +2533,11 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parse-node-version@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" + integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== + path-exists@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" @@ -1488,6 +2548,11 @@ path-is-absolute@^1.0.0: resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== +path-is-inside@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== + path-key@^3.1.0: version "3.1.1" resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" @@ -1508,11 +2573,21 @@ picocolors@^1.0.0: resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.3.1: +picomatch@^2.3.0, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +pluralize@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" + integrity sha512-TH+BeeL6Ct98C7as35JbZLf8lgsRzlNJb5gklRIGHKaPkGl1esOKBc5ALUMd+q08Sr6tiEKM+Icbsxg5vuhMKQ== + +postcss-value-parser@^4.0.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + postcss@8.4.14: version "8.4.14" resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz" @@ -1527,6 +2602,21 @@ prelude-ls@^1.2.1: resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +progress@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" + integrity sha512-UdA8mJ4weIkUBO224tIarHzuHs4HuYiJvsuGT7j/SPQiUJVjYvNDBIPa0hAorduOfjGohB/qHWRa/lrrWX/mXw== + prop-types@^15.8.1: version "15.8.1" resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" @@ -1554,7 +2644,7 @@ queue-microtask@^1.2.2: resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -react-dom@18.2.0: +react-dom@^18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== @@ -1562,18 +2652,36 @@ react-dom@18.2.0: loose-envify "^1.1.0" scheduler "^0.23.0" -react-is@^16.13.1: +react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react@18.2.0: +react-is@^18.2.0: version "18.2.0" - resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + +react@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== dependencies: loose-envify "^1.1.0" +readable-stream@^2.2.2, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" @@ -1583,6 +2691,25 @@ readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readable-stream@~1.1.9: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + integrity sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readline2@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" + integrity sha512-8/td4MmwUB6PkZUbV25uKz7dfrmjYWxsW8DVfibWdlHRk/l/DfHKn4pU+dfcoGLFgWOdyGCzINRQD7jn+Bv+/g== + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + mute-stream "0.0.5" + regenerator-runtime@^0.13.4: version "0.13.9" resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz" @@ -1602,6 +2729,24 @@ regexpp@^3.2.0: resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== +replace-ext@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" + integrity sha512-AFBWBy9EVRTa/LhEcG8QDP3FvpwZqmvN2QFDuJswFeaVhWnZMp8q3E6Zd90SR04PlIwfGdyVjNyLPyen/ek5CQ== + +require-uncached@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" + integrity sha512-Xct+41K3twrbBHdxAgMoOS+cNcoqIjfM2/VxBF4LL2hVph7YsF8VSKyQ3BDFZwEVbok9yeDl2le/qo0S77WG2w== + dependencies: + caller-path "^0.1.0" + resolve-from "^1.0.0" + +resolve-from@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" + integrity sha512-kT10v4dhrlLNcnO084hEjvXCI1wUG9qZLoz2RogxqDQQYy7IxjI/iMUkOtQTNEh6rzHxvdQWHsJyel1pKOVCxg== + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" @@ -1625,6 +2770,14 @@ resolve@^2.0.0-next.3: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +restore-cursor@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" + integrity sha512-reSjH4HuiFlxlaBaFCiS6O76ZGG2ygKoSlCsipKdaZuKSPx/+bt9mULkn4l0asVzbEfQQmXRg6Wp6gv6m0wElw== + dependencies: + exit-hook "^1.0.0" + onetime "^1.0.0" + reusify@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" @@ -1637,6 +2790,20 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" +rimraf@~2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +run-async@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" + integrity sha512-qOX+w+IxFgpUpJfkv2oGN0+ExPs68F4sZHfaRRx4dDexAQkG83atugKVEylyT5ARees3HBbfmuvnjbrd8j9Wjw== + dependencies: + once "^1.3.0" + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" @@ -1644,6 +2811,16 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +rx-lite@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" + integrity sha512-1I1+G2gteLB8Tkt8YI1sJvSIfa0lWuRtC8GjvtyPBcLSF5jBCCJJqKrpER5JU5r6Bhe+i9/pK3VMuUcXu0kdwQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" @@ -1673,6 +2850,11 @@ semver@^7.3.7: dependencies: lru-cache "^6.0.0" +shallowequal@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" @@ -1685,6 +2867,11 @@ shebang-regex@^3.0.0: resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +shelljs@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.6.1.tgz#ec6211bed1920442088fe0f70b2837232ed2c8a8" + integrity sha512-B1vvzXQlJ77SURr3SIUQ/afh+LwecDKAVKE1wqkBlr2PCHoZDaF6MFD+YX1u9ddQjR4z2CKx1tdqvS2Xfs5h1A== + side-channel@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" @@ -1699,16 +2886,31 @@ slash@^3.0.0: resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +slice-ansi@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" + integrity sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw== + source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== +sparkles@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.1.tgz#008db65edce6c50eec0c5e228e1945061dd0437c" + integrity sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw== + split-ca@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/split-ca/-/split-ca-1.0.1.tgz#6c83aff3692fa61256e0cd197e05e9de157691a6" integrity sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ== +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + ssh2@^1.11.0: version "1.11.0" resolved "https://registry.yarnpkg.com/ssh2/-/ssh2-1.11.0.tgz#ce60186216971e12f6deb553dcf82322498fe2e4" @@ -1720,6 +2922,23 @@ ssh2@^1.11.0: cpu-features "~0.0.4" nan "^2.16.0" +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string-width@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + string.prototype.matchall@^4.0.7: version "4.0.7" resolved "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz" @@ -1759,6 +2978,32 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== + dependencies: + ansi-regex "^3.0.0" + strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" @@ -1776,10 +3021,45 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -styled-jsx@5.0.6: - version "5.0.6" - resolved "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.6.tgz" - integrity sha512-xOeROtkK5MGMDimBQ3J6iPId8q0t/BDoG5XN6oKkZClVz9ISF/hihN8OCn2LggMU6N32aXnrXBdn3auSqNS9fA== +strip-json-comments@~1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" + integrity sha512-AOPG8EBc5wAikaG1/7uFCNFJwnKOuQwFTpYBdTW6OvWHeZBQBrAA/amefHGrEiOnCPcLFZK6FUPtWVKpQVIRgg== + +styled-components@^5.3.6: + version "5.3.6" + resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.3.6.tgz#27753c8c27c650bee9358e343fc927966bfd00d1" + integrity sha512-hGTZquGAaTqhGWldX7hhfzjnIYBZ0IXQXkCYdvF1Sq3DsUaLx6+NTHC5Jj1ooM2F68sBiVz3lvhfwQs/S3l6qg== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/traverse" "^7.4.5" + "@emotion/is-prop-valid" "^1.1.0" + "@emotion/stylis" "^0.8.4" + "@emotion/unitless" "^0.7.4" + babel-plugin-styled-components ">= 1.12.0" + css-to-react-native "^3.0.0" + hoist-non-react-statics "^3.0.0" + shallowequal "^1.1.0" + supports-color "^5.5.0" + +styled-jsx@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.0.tgz#4a5622ab9714bd3fcfaeec292aa555871f057563" + integrity sha512-/iHaRJt9U7T+5tp6TRelLnqBqiaIT0HsO0+vgyj8hK2KUk7aejFqRrumqPUlAqDwAj8IbS/1hk3IhBAAK/FCUQ== + dependencies: + client-only "0.0.1" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== + +supports-color@^5.3.0, supports-color@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" supports-color@^7.1.0: version "7.2.0" @@ -1798,6 +3078,18 @@ swr@^1.3.0: resolved "https://registry.npmjs.org/swr/-/swr-1.3.0.tgz" integrity sha512-dkghQrOl2ORX9HYrMDtPa7LTVHJjCTeZoB1dqTbnnEDlSvN8JEKpYIYurDfvbQFUUS8Cg8PceFVZNkW0KNNYPw== +table@^3.7.8: + version "3.8.3" + resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f" + integrity sha512-RZuzIOtzFbprLCE0AXhkI0Xi42ZJLZhCC+qkwuMLf/Vjz3maWpA8gz1qMdbmNoI9cOROT2Am/DxeRyXenrL11g== + dependencies: + ajv "^4.7.0" + ajv-keywords "^1.0.0" + chalk "^1.1.1" + lodash "^4.0.0" + slice-ansi "0.0.4" + string-width "^2.0.0" + tar-fs@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.0.1.tgz#e44086c1c60d31a4f0cf893b1c4e155dabfae9e2" @@ -1819,11 +3111,34 @@ tar-stream@^2.0.0: inherits "^2.0.3" readable-stream "^3.1.1" -text-table@^0.2.0: +text-table@^0.2.0, text-table@~0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +time-stamp@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" + integrity sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" @@ -1870,11 +3185,33 @@ type-check@^0.4.0, type-check@~0.4.0: dependencies: prelude-ls "^1.2.1" +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== + dependencies: + prelude-ls "~1.1.2" + type-fest@^0.20.2: version "0.20.2" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== +type@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.7.2: + version "2.7.2" + resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" + integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== + typescript@^4.7.4: version "4.8.3" resolved "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz" @@ -1897,16 +3234,27 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -use-sync-external-store@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz" - integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== +user-home@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" + integrity sha512-KMWqdlOcjCYdtIJpicDSFBQ8nFwS2i9sslAd6f4+CBGcU4gist2REnr2fxj2YocvJFxSF3ZOHLYLVZnUxv4BZQ== + dependencies: + os-homedir "^1.0.0" -util-deprecate@^1.0.1: +util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== +vinyl@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde" + integrity sha512-P5zdf3WB9uzr7IFoVQ2wZTmUwHL8cMZWJGzLBNCHNZ3NB6HTMsYABtt7z8tAGIINLXyAob9B9a1yzVGMFOYKEA== + dependencies: + clone "^1.0.0" + clone-stats "^0.0.1" + replace-ext "0.0.1" + which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" @@ -1925,7 +3273,7 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -word-wrap@^1.2.3: +word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== @@ -1935,6 +3283,18 @@ wrappy@1: resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== +write@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + integrity sha512-CJ17OoULEKXpA5pef3qLj5AxTJ6mSt7g84he2WIskKwqFO4T97d5V7Tadl0DYDk7qyUOQD5WlUlOMChaYrhxeA== + dependencies: + mkdirp "^0.5.1" + +xtend@^4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + yallist@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" -- 2.39.2 From 21e613891eb4fcf165422cd3af9267d480d6dd82 Mon Sep 17 00:00:00 2001 From: Neshura Date: Wed, 14 Dec 2022 19:35:27 +0100 Subject: [PATCH 025/250] Added styled-components + various Includes changes due to NextJS version bump and attempts at storing theme via cookie --- app/layout.tsx | 76 +++++++++++++++++++++++++++++++++++ components/layout.tsx | 44 +++++++++++--------- components/navbar.tsx | 13 +++--- components/styles/generic.tsx | 8 ++++ components/themes.tsx | 51 +++++++++++++++++++++++ components/themeselector.tsx | 52 ++++++++++++++++++++++++ pages/_app.tsx | 38 +++++++++++++++++- pages/_document.tsx | 10 ++++- pages/games.tsx | 20 +++++---- pages/index.tsx | 29 +++++-------- pages/services.tsx | 68 +++++++++++++++---------------- styled.d.ts | 12 ++++++ styles/Home.module.css | 6 +-- 13 files changed, 325 insertions(+), 102 deletions(-) create mode 100644 app/layout.tsx create mode 100644 components/styles/generic.tsx create mode 100644 components/themes.tsx create mode 100644 components/themeselector.tsx create mode 100644 styled.d.ts diff --git a/app/layout.tsx b/app/layout.tsx new file mode 100644 index 0000000..c59c454 --- /dev/null +++ b/app/layout.tsx @@ -0,0 +1,76 @@ +'use client' +import Script from "next/script" +import Footer from "../components/footer" +import Navbar from "../components/navbar" +import StyleSelector from "../components/themeselector" +import styles from "../styles/Home.module.css" +import { Page } from '../components/styles/generic' +import { DefaultTheme, ThemeProvider } from 'styled-components'; +import { createContext, useContext, useEffect, useState } from "react" +import { setCookie } from "cookies-next" +import { darkTheme } from "../components/themes" + +const ThemeUpdateContext = createContext( + (theme: DefaultTheme) => console.error("attempted to set theme outside of a ThemeUpdateContext.Provider") +) + +// eslint-disable-next-line react-hooks/rules-of-hooks +export const useUpdateTheme = () => useContext(ThemeUpdateContext); + +export default function Layout({ children, }: { children: React.ReactNode }) { + const [selectedTheme, setselectedTheme] = useState(darkTheme); + console.log("Selected Theme: ", selectedTheme); // DEBUG + + + return ( + + + + + + + + + {children} + + + + + + + + ) +} + +{/* + + + + {children} + +

-

{service.desc}

+

{service.desc}

{service.warn}

@@ -162,7 +162,7 @@ {#if service.extLink} (hover.ext = true)} on:mouseleave={() => (hover.ext = false)} @@ -174,7 +174,7 @@ class="grid items-center pl-1 pr-0" > diff --git a/src/routes/Header.svelte b/src/routes/Header.svelte index eef3aa8..28c4887 100644 --- a/src/routes/Header.svelte +++ b/src/routes/Header.svelte @@ -2,7 +2,7 @@ import { page } from '$app/stores'; import { Button } from '$lib/components/ui/button'; - const button = 'border-t-2 bg-black/55 hover:bg-black/70 hover:border-primary w-28'; + const button = 'border-t-2 bg-black/55 hover:bg-black/70 hover:border-secondary w-28';