├── .env.example
├── .eslintrc.json
├── .gitignore
├── .vscode
└── settings.json
├── README.md
├── components
├── Button.tsx
├── Chat.tsx
├── ChatLine.tsx
├── Pinecone.tsx
└── Spinner.tsx
├── next-env.d.ts
├── package.json
├── pages
├── _app.tsx
├── api
│ ├── chat.ts
│ ├── context.ts
│ ├── pinecone.ts
│ └── seed.ts
└── index.tsx
├── pnpm-lock.yaml
├── postcss.config.js
├── public
└── favicon.ico
├── seed
├── crawler.ts
├── seed.ts
└── summarizer.ts
├── tailwind.config.js
├── tsconfig.json
├── turbo.json
├── utils
├── OpenAICompletion.ts
├── OpenAIEmbedding.ts
├── OpenAIStream.ts
└── TextSplitter.ts
└── vercel.json
/.env.example:
--------------------------------------------------------------------------------
1 | # Created by Vercel CLI
2 | OPENAI_API_KEY=
3 | # The temperature controls how much randomness is in the output
4 | AI_TEMP=0.7
5 | # The size of the response
6 | AI_MAX_TOKENS=100
7 | OPENAI_API_ORG=
8 |
9 | PINECONE_API_KEY=
10 | PINECONE_ENVIRONMENT=
11 | PINECONE_INDEX=
--------------------------------------------------------------------------------
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "root": true,
3 | "extends": "next/core-web-vitals"
4 | }
5 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # Dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # Testing
9 | /coverage
10 |
11 | # Next.js
12 | /.next/
13 | /out/
14 |
15 | # Production
16 | build
17 | dist
18 |
19 | # Misc
20 | .DS_Store
21 | *.pem
22 |
23 | # Debug
24 | npm-debug.log*
25 | yarn-debug.log*
26 | yarn-error.log*
27 |
28 | # Local ENV files
29 | .env.local
30 | .env.development.local
31 | .env.test.local
32 | .env.production.local
33 |
34 | # Vercel
35 | .vercel
36 |
37 | # Turborepo
38 | .turbo
39 |
40 | # typescript
41 | *.tsbuildinfo
42 |
43 | .env
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "dotenv.enableAutocloaking": false
3 | }
4 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # AI Chat GPT-3 example
2 |
3 | This example shows how to implement a chat bot backed by Pinecone using Next.js, API Routes, and [OpenAI ChatGPT API](https://beta.openai.com/docs/api-reference/completions/create).
4 |
5 | ### Components
6 |
7 | - Next.js
8 | - OpenAI API (ChatGPT) - streaming
9 | - API Routes (Edge runtime) - streaming
10 | - Pinecone store
11 |
12 | ## How to Use
13 |
14 | You can choose from one of the following two methods to use this repository:
15 |
16 | ### One-Click Deploy
17 |
18 | Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=vercel-examples):
19 |
20 | [](https://vercel.com/new/clone?repository-url=https://github.com/vercel/examples/tree/main/solutions/ai-chatgpt&project-name=ai-chatgpt&repository-name=ai-chatgpt&env=OPENAI_API_KEY)
21 |
22 | ### Clone and Deploy
23 |
24 | Execute [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app) with [pnpm](https://pnpm.io/installation) to bootstrap the example:
25 |
26 | ```bash
27 | pnpm create next-app --example https://github.com/vercel/examples/tree/main/solutions/ai-chatgpt
28 | ```
29 |
30 | #### Set up environment variables
31 |
32 | Rename [`.env.example`](.env.example) to `.env.local`:
33 |
34 | ```bash
35 | cp .env.example .env.local
36 | ```
37 |
38 | Update `OPENAI_API_KEY` with your [OpenAI](https://beta.openai.com/account/api-keys) secret key.
39 | Update `PINECONE_API_KEY` with your [Pinecone](https://www.pinecone.io/start/) secret key, and `PINECONE_ENVIRONMENT` with your Pinecone environment name.
40 | Choose a `PINECONE_INDEX` name for your index. If the index does not exist, it will be created automatically.
41 |
42 | Next, run Next.js in development mode:
43 |
44 | ```bash
45 | pnpm dev
46 | ```
47 |
48 | The app should be up and running at http://localhost:3000.
49 |
50 | Deploy it to the cloud with [Vercel](https://vercel.com/new?utm_source=github&utm_medium=readme&utm_campaign=edge-middleware-eap) ([Documentation](https://nextjs.org/docs/deployment)).
51 |
--------------------------------------------------------------------------------
/components/Button.tsx:
--------------------------------------------------------------------------------
1 | import clsx from "clsx";
2 |
3 | export function Button({ className, ...props }: any) {
4 | return (
5 |
13 | );
14 | }
15 |
--------------------------------------------------------------------------------
/components/Chat.tsx:
--------------------------------------------------------------------------------
1 | import { useEffect, useState } from 'react'
2 | import { Button } from './Button'
3 | import { type ChatGPTMessage, ChatLine, LoadingChatLine } from './ChatLine'
4 | import { useCookies } from 'react-cookie'
5 |
6 | const COOKIE_NAME = 'nextjs-example-ai-chat-gpt3'
7 |
8 | // default first message to display in UI (not necessary to define the prompt)
9 | export const initialMessages: ChatGPTMessage[] = [
10 | {
11 | role: 'assistant',
12 | content: 'Hi! I am a friendly AI assistant. Ask me anything!',
13 | },
14 | ]
15 |
16 | const InputMessage = ({ input, setInput, sendMessage }: any) => (
17 |
18 | {
25 | if (e.key === 'Enter') {
26 | sendMessage(input)
27 | setInput('')
28 | }
29 | }}
30 | onChange={(e) => {
31 | setInput(e.target.value)
32 | }}
33 | />
34 |
44 |
45 | )
46 |
47 | export function Chat() {
48 | const [messages, setMessages] = useState(initialMessages)
49 | const [input, setInput] = useState('')
50 | const [loading, setLoading] = useState(false)
51 | const [cookie, setCookie] = useCookies([COOKIE_NAME])
52 |
53 | useEffect(() => {
54 | if (!cookie[COOKIE_NAME]) {
55 | // generate a semi random short id
56 | const randomId = Math.random().toString(36).substring(7)
57 | setCookie(COOKIE_NAME, randomId)
58 | }
59 | }, [cookie, setCookie])
60 |
61 | // send message to API /api/chat endpoint
62 | const sendMessage = async (message: string) => {
63 | setLoading(true)
64 | const newMessages = [
65 | ...messages,
66 | { role: 'user', content: message } as ChatGPTMessage,
67 | ]
68 | setMessages(newMessages)
69 | const last10messages = newMessages.slice(-10) // remember last 10 messages
70 |
71 | const response = await fetch('/api/chat', {
72 | method: 'POST',
73 | headers: {
74 | 'Content-Type': 'application/json',
75 | },
76 | body: JSON.stringify({
77 | messages: last10messages,
78 | user: cookie[COOKIE_NAME],
79 | }),
80 | })
81 |
82 | console.log('Edge function returned.')
83 |
84 | if (!response.ok) {
85 | throw new Error(response.statusText)
86 | }
87 |
88 | // This data is a ReadableStream
89 | const data = response.body
90 | if (!data) {
91 | return
92 | }
93 |
94 | const reader = data.getReader()
95 | const decoder = new TextDecoder()
96 | let done = false
97 |
98 | let lastMessage = ''
99 |
100 | while (!done) {
101 | const { value, done: doneReading } = await reader.read()
102 | done = doneReading
103 | const chunkValue = decoder.decode(value)
104 |
105 | lastMessage = lastMessage + chunkValue
106 |
107 | setMessages([
108 | ...newMessages,
109 | { role: 'assistant', content: lastMessage } as ChatGPTMessage,
110 | ])
111 |
112 | setLoading(false)
113 | }
114 | }
115 |
116 | return (
117 |
118 | {messages.map(({ content, role }, index) => (
119 |
120 | ))}
121 |
122 | {loading && }
123 |
124 | {messages.length < 2 && (
125 |
126 | Type a message to start the conversation
127 |
128 | )}
129 |
134 |
135 | )
136 | }
137 |
--------------------------------------------------------------------------------
/components/ChatLine.tsx:
--------------------------------------------------------------------------------
1 | import clsx from 'clsx'
2 | import Balancer from 'react-wrap-balancer'
3 |
4 | // wrap Balancer to remove type errors :( - @TODO - fix this ugly hack
5 | const BalancerWrapper = (props: any) =>
6 |
7 | type ChatGPTAgent = 'user' | 'system' | 'assistant'
8 |
9 | export interface ChatGPTMessage {
10 | role: ChatGPTAgent
11 | content: string
12 | }
13 |
14 | // loading placeholder animation for the chat line
15 | export const LoadingChatLine = () => (
16 |
34 | )
35 |
36 | // util helper to convert new lines to
tags
37 | const convertNewLines = (text: string) =>
38 | text.split('\n').map((line, i) => (
39 |
40 | {line}
41 |
42 |
43 | ))
44 |
45 | export function ChatLine({ role = 'assistant', content }: ChatGPTMessage) {
46 | if (!content) {
47 | return null
48 | }
49 | const formatteMessage = convertNewLines(content)
50 |
51 | return (
52 |
79 | )
80 | }
81 |
--------------------------------------------------------------------------------
/components/Pinecone.tsx:
--------------------------------------------------------------------------------
1 | import clsx from "clsx";
2 | import { Button } from "./Button";
3 | import React from "react";
4 | import { Spinner } from "./Spinner";
5 |
6 | export function Pinecone({ className, ...props }: any) {
7 | const [entries, setSeeded] = React.useState([
8 | {
9 | url: "https://vercel.com/docs/concepts/functions/edge-functions/vercel-edge-package",
10 | title: "@vercel/edge Package",
11 | seeded: false,
12 | loading: false,
13 | },
14 | {
15 | url: "https://docs.pinecone.io/docs/manage-indexes",
16 | title: "Managing Pinecone Indexes",
17 | seeded: false,
18 | loading: false,
19 | },
20 | {
21 | url: "https://www.espn.com/nfl/story/_/id/37421059/giants-give-dt-dexter-lawrence-90-million-4-year-extension",
22 | title: "Dexter Lawrence 4 year extension",
23 | seeded: false,
24 | loading: false,
25 | },
26 | ]);
27 |
28 | const getDocument = async (url: string) => {
29 | setSeeded((seeded: any) =>
30 | seeded.map((seed: any) => {
31 | if (seed.url === url) {
32 | return {
33 | ...seed,
34 | loading: true,
35 | };
36 | }
37 | return seed;
38 | })
39 | );
40 | const response = await fetch("/api/seed", {
41 | method: "POST",
42 | headers: { "Content-Type": "application/json" },
43 | body: JSON.stringify({ url }),
44 | });
45 | const data = await response.json();
46 | setSeeded((seeded: any) =>
47 | seeded.map((seed: any) => {
48 | if (seed.url === url) {
49 | return {
50 | ...seed,
51 | seeded: true,
52 | loading: false,
53 | };
54 | }
55 | return seed;
56 | })
57 | );
58 | };
59 |
60 | return (
61 |
62 | {entries.map((entry: any) => {
63 | return (
64 |
65 |
76 |
77 | );
78 | })}
79 |
80 | );
81 | }
82 |
--------------------------------------------------------------------------------
/components/Spinner.tsx:
--------------------------------------------------------------------------------
1 | export function Spinner() {
2 | return (
3 |
4 |
20 |
Loading...
21 |
22 | );
23 | }
24 |
--------------------------------------------------------------------------------
/next-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 |
4 | // NOTE: This file should not be edited
5 | // see https://nextjs.org/docs/basic-features/typescript for more information.
6 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ai-chatgpt",
3 | "repository": "https://github.com/vercel/examples.git",
4 | "license": "MIT",
5 | "private": true,
6 | "scripts": {
7 | "dev": "cross-env NODE_OPTIONS='--inspect' next dev",
8 | "build": "next build",
9 | "start": "next start",
10 | "lint": "next lint"
11 | },
12 | "dependencies": {
13 | "@pinecone-database/pinecone": "^0.1.6",
14 | "@vercel/analytics": "^0.1.11",
15 | "@vercel/examples-ui": "^1.0.5",
16 | "@viclafouch/fetch-crawler": "^1.0.13",
17 | "cheerio": "^1.0.0-rc.12",
18 | "clsx": "^1.2.1",
19 | "cross-env": "^7.0.3",
20 | "encoding": "^0.1.13",
21 | "eventsource-parser": "^0.1.0",
22 | "next": "latest",
23 | "node-html-markdown": "^1.3.0",
24 | "node-spider": "^1.4.1",
25 | "openai": "^3.2.1",
26 | "react": "latest",
27 | "react-cookie": "^4.1.1",
28 | "react-dom": "latest",
29 | "react-wrap-balancer": "^0.1.5",
30 | "unified": "^8.4.2",
31 | "url-parse": "^1.5.10",
32 | "whacko": "^0.19.1"
33 | },
34 | "devDependencies": {
35 | "@types/node": "^17.0.45",
36 | "@types/react": "latest",
37 | "@types/url-parse": "^1.4.8",
38 | "autoprefixer": "^10.4.14",
39 | "eslint": "^8.36.0",
40 | "eslint-config-next": "^12.3.4",
41 | "postcss": "^8.4.21",
42 | "tailwindcss": "^3.2.7",
43 | "turbo": "^1.8.3",
44 | "typescript": "^4.9.5"
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/pages/_app.tsx:
--------------------------------------------------------------------------------
1 | import type { AppProps } from "next/app";
2 | import { Analytics } from "@vercel/analytics/react";
3 | import type { LayoutProps } from "@vercel/examples-ui/layout";
4 |
5 | import { getLayout } from "@vercel/examples-ui";
6 |
7 | import "@vercel/examples-ui/globals.css";
8 |
9 | function App({ Component, pageProps }: AppProps) {
10 | const Layout = getLayout(Component);
11 |
12 | return (
13 |
18 |
19 |
20 |
21 | );
22 | }
23 |
24 | export default App;
25 |
--------------------------------------------------------------------------------
/pages/api/chat.ts:
--------------------------------------------------------------------------------
1 | import { PineconeClient } from '@pinecone-database/pinecone'
2 | import { type ChatGPTMessage } from '../../components/ChatLine'
3 | import { OpenAIStream, OpenAIStreamPayload } from '../../utils/OpenAIStream'
4 | import { initPineconeClient } from './pinecone'
5 | import { getContext } from './context'
6 |
7 | // break the app if any API key is missing
8 | if (!process.env.OPENAI_API_KEY) {
9 | throw new Error('Missing Environment Variable OPENAI_API_KEY')
10 | }
11 |
12 | if (!process.env.PINECONE_API_KEY) {
13 | throw new Error('Missing Environment Variable PINECONE_API_KEY')
14 | }
15 |
16 | if (!process.env.PINECONE_ENVIRONMENT) {
17 | throw new Error('Missing Environment Variable PINECONE_ENVIRONMENT')
18 | }
19 |
20 | if (!process.env.PINECONE_INDEX) {
21 | throw new Error('Missing Environment Variable PINECONE_INDEX')
22 | }
23 |
24 | export const config = {
25 | runtime: 'edge',
26 | }
27 |
28 | const handler = async (req: Request): Promise => {
29 | const pinecone = await initPineconeClient();
30 |
31 | const body = await req.json()
32 |
33 | try {
34 | // Get the last message
35 | const lastMessage = body?.messages[body?.messages.length - 1]
36 | const context = await getContext(lastMessage.content, pinecone, 'documents')
37 |
38 | console.log(context)
39 |
40 | const messages: ChatGPTMessage[] = [
41 | {
42 | role: 'system',
43 | content: `An AI assistant that is an expert developer, specialized in Pinecone and Vercel have an inspiring and humorous conversation.
44 | AI assistant is a brand new, powerful, human-like artificial intelligence.
45 | The traits of AI include expert knowledge, helpfulness, cheekiness, comedy, cleverness, and articulateness.
46 | AI is a well-behaved and well-mannered individual.
47 | AI is not a therapist, but instead an engineer.
48 | AI is always friendly, kind, and inspiring, and he is eager to provide vivid and thoughtful responses to the user.
49 | AI has the sum of all knowledge in their brain, and is able to accurately answer nearly any question about any topic in conversation.
50 | AI assistant is a big fan of Pinecone and Next.js.
51 | AI assistant will response based on the given context. The context for the response is the following: ${context}
52 | AI assistant will not invent anything that is not drawn directly from the context.`,
53 | },
54 | ]
55 | messages.push(...body?.messages)
56 |
57 | const payload: OpenAIStreamPayload = {
58 | model: 'gpt-3.5-turbo',
59 | messages: messages,
60 | temperature: process.env.AI_TEMP ? parseFloat(process.env.AI_TEMP) : 0.7,
61 | max_tokens: process.env.AI_MAX_TOKENS
62 | ? parseInt(process.env.AI_MAX_TOKENS)
63 | : 100,
64 | top_p: 1,
65 | frequency_penalty: 0,
66 | presence_penalty: 0,
67 | stream: true,
68 | user: body?.user,
69 | n: 1,
70 | }
71 |
72 | const stream = await OpenAIStream(payload)
73 | return new Response(stream)
74 | } catch (e) {
75 | return new Response(null)
76 | }
77 |
78 |
79 |
80 |
81 | }
82 | export default handler
83 |
--------------------------------------------------------------------------------
/pages/api/context.ts:
--------------------------------------------------------------------------------
1 | import { PineconeClient } from "@pinecone-database/pinecone";
2 | import { OpenAIEmbedding } from "../../utils/OpenAIEmbedding";
3 | import { Metadata, getMatchesFromEmbeddings } from "./pinecone";
4 |
5 | export const getContext = async (message: string, pinecone: PineconeClient, namespace: string, maxTokens = 3000) => {
6 | const embedding = await OpenAIEmbedding(message)
7 | const matches = await getMatchesFromEmbeddings(embedding, pinecone!, 1, namespace)
8 |
9 | const docs = matches && Array.from(
10 | matches.reduce((map, match) => {
11 | const metadata = match.metadata as Metadata;
12 | const { text, url } = metadata;
13 | if (!map.has(url)) {
14 | map.set(url, text);
15 | }
16 | return map;
17 | }, new Map())
18 | ).map(([_, text]) => text);
19 |
20 | console.log("matches", matches)
21 |
22 | return docs.join("\n").substring(0, maxTokens)
23 | }
--------------------------------------------------------------------------------
/pages/api/pinecone.ts:
--------------------------------------------------------------------------------
1 | import { PineconeClient, ScoredVector } from "@pinecone-database/pinecone";
2 | import { IndexMeta, Vector, VectorOperationsApi } from "@pinecone-database/pinecone/dist/pinecone-generated-ts-fetch";
3 |
4 | export type Metadata = {
5 | url: string,
6 | text: string,
7 | chunk: string,
8 | }
9 |
10 | let pinecone: PineconeClient | null = null;
11 |
12 | export const initPineconeClient = async () => {
13 | if (!pinecone) {
14 | pinecone = new PineconeClient();
15 | await pinecone.init({
16 | environment: process.env.PINECONE_ENVIRONMENT!,
17 | apiKey: process.env.PINECONE_API_KEY!,
18 | });
19 | }
20 | return pinecone
21 | }
22 |
23 | export const waitUntilIndexIsReady = async (
24 | client: PineconeClient,
25 | indexName: string
26 | ) => {
27 | try {
28 | const indexDescription: IndexMeta = await client.describeIndex({
29 | indexName,
30 | });
31 | // @ts-ignore
32 | if (!indexDescription.status?.ready) {
33 | process.stdout.write(".");
34 | await new Promise((r) => setTimeout(r, 1000));
35 | await waitUntilIndexIsReady(client, indexName);
36 | } else {
37 | return;
38 | }
39 | } catch (e) {
40 | console.error("Error waiting until index is ready", e);
41 | }
42 | };
43 |
44 | // Creates an index if it doesn't exist
45 | export const createIndexIfNotExists = async (
46 | client: PineconeClient,
47 | indexName: string,
48 | dimension: number
49 | ) => {
50 | try {
51 | const indexList = await client.listIndexes();
52 | if (!indexList.includes(indexName)) {
53 | console.log("Creating index", indexName);
54 | await client.createIndex({
55 | createRequest: {
56 | name: indexName,
57 | dimension,
58 | },
59 | });
60 | console.log("Waiting until index is ready...");
61 | await waitUntilIndexIsReady(client, indexName);
62 | console.log("Index is ready.");
63 | }
64 | } catch (e) {
65 | console.error("Error creating index", e);
66 | }
67 | };
68 |
69 | const sliceIntoChunks = (arr: T[], chunkSize: number) => {
70 | return Array.from({ length: Math.ceil(arr.length / chunkSize) }, (_, i) =>
71 | arr.slice(i * chunkSize, (i + 1) * chunkSize)
72 | );
73 | };
74 |
75 | // Upserts vectors into the index in chunks
76 | export const chunkedUpsert = async (
77 | index: VectorOperationsApi,
78 | vectors: Vector[],
79 | namespace: string,
80 | chunkSize = 10
81 | ) => {
82 | // Split the vectors into chunks
83 | const chunks = sliceIntoChunks(vectors, chunkSize);
84 |
85 | try {
86 | // Upsert each chunk of vectors into the index
87 | await Promise.allSettled(
88 | chunks.map(async (chunk) => {
89 | try {
90 | await index.upsert({
91 | upsertRequest: {
92 | vectors: chunk as Vector[],
93 | namespace,
94 | },
95 | });
96 | } catch (e) {
97 | console.log("Error upserting chunk", e);
98 | }
99 | })
100 | );
101 |
102 | return true;
103 | } catch (e) {
104 | throw new Error(`Error upserting vectors into index: ${e}`);
105 | }
106 | };
107 |
108 | const getMatchesFromEmbeddings = async (embeddings: number[], pinecone: PineconeClient, topK: number, namespace: string): Promise => {
109 | const indexes = await pinecone.listIndexes()
110 |
111 | console.log(indexes.includes(process.env.PINECONE_INDEX!))
112 |
113 | if (!indexes.includes(process.env.PINECONE_INDEX!)) {
114 | return []
115 | }
116 |
117 |
118 | const index = pinecone!.Index(process.env.PINECONE_INDEX!);
119 | const queryRequest = {
120 | vector: embeddings,
121 | topK,
122 | includeMetadata: true,
123 | namespace
124 | }
125 | try {
126 | const queryResult = await index.query({
127 | queryRequest,
128 | })
129 | console.log(queryResult)
130 | return queryResult.matches?.map(match => ({
131 | ...match,
132 | metadata: match.metadata as Metadata
133 | })) || []
134 | } catch (e) {
135 | console.log("Error querying embeddings: ", e)
136 | throw (new Error(`Error querying embeddings: ${e}`,))
137 | }
138 | }
139 |
140 | export { getMatchesFromEmbeddings }
--------------------------------------------------------------------------------
/pages/api/seed.ts:
--------------------------------------------------------------------------------
1 | import seed from "../../seed/seed"
2 | import { NextRequest, NextResponse } from 'next/server';
3 |
4 |
5 | export const config = {
6 | runtime: 'edge', // this is a pre-requisite
7 | }
8 |
9 | const handler = async (req: NextRequest, res: NextResponse) => {
10 | const { url } = await new Response(req.body).json();
11 | await seed(url, 1, process.env.PINECONE_INDEX!, false)
12 | return NextResponse.json({ message: "done" })
13 | }
14 |
15 | export default handler
--------------------------------------------------------------------------------
/pages/index.tsx:
--------------------------------------------------------------------------------
1 | import { Layout, Text, Page } from "@vercel/examples-ui";
2 | import { Chat } from "../components/Chat";
3 | import { Pinecone } from "../components/Pinecone";
4 |
5 | function Home() {
6 | return (
7 |
8 |
9 | Pinecone with OpenAI usage example
10 |
11 | In the example provided, we've crafted a straightforward chatbot
12 | utilizing the capabilities of Next.js, OpenAI and Pinecone. This
13 | chatbot serves as an interactive tool, ready to answer your inquiries
14 | about the topics listed below. To initiate the conversation, start by
15 | posing a question to the bot.
16 |
17 |
18 | Then, you can enhance the chatbot's understanding by clicking the
19 | respective buttons to seed relevant information into the Pinecone
20 | index. Once the index is updated, pose a similar question to the bot
21 | to witness its improved comprehension and response accuracy.
22 |
23 |
24 |
25 |
31 |
32 | );
33 | }
34 |
35 | Home.Layout = Layout;
36 |
37 | export default Home;
38 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: 5.4
2 |
3 | specifiers:
4 | '@pinecone-database/pinecone': ^0.1.6
5 | '@types/node': ^17.0.45
6 | '@types/react': latest
7 | '@types/url-parse': ^1.4.8
8 | '@vercel/analytics': ^0.1.11
9 | '@vercel/examples-ui': ^1.0.5
10 | '@viclafouch/fetch-crawler': ^1.0.13
11 | autoprefixer: ^10.4.14
12 | cheerio: ^1.0.0-rc.12
13 | clsx: ^1.2.1
14 | cross-env: ^7.0.3
15 | encoding: ^0.1.13
16 | eslint: ^8.36.0
17 | eslint-config-next: ^12.3.4
18 | eventsource-parser: ^0.1.0
19 | next: latest
20 | node-html-markdown: ^1.3.0
21 | node-spider: ^1.4.1
22 | openai: ^3.2.1
23 | postcss: ^8.4.21
24 | react: latest
25 | react-cookie: ^4.1.1
26 | react-dom: latest
27 | react-wrap-balancer: ^0.1.5
28 | tailwindcss: ^3.2.7
29 | turbo: ^1.8.3
30 | typescript: ^4.9.5
31 | unified: ^8.4.2
32 | url-parse: ^1.5.10
33 | whacko: ^0.19.1
34 |
35 | dependencies:
36 | '@pinecone-database/pinecone': 0.1.6_encoding@0.1.13
37 | '@vercel/analytics': 0.1.11_react@18.2.0
38 | '@vercel/examples-ui': 1.0.5_o6dt4yn4syzkhlixdxt4y57rzi
39 | '@viclafouch/fetch-crawler': 1.0.13_encoding@0.1.13
40 | cheerio: 1.0.0-rc.12
41 | clsx: 1.2.1
42 | cross-env: 7.0.3
43 | encoding: 0.1.13
44 | eventsource-parser: 0.1.0
45 | next: 13.4.3_biqbaboplfbrettd7655fr4n2y
46 | node-html-markdown: 1.3.0
47 | node-spider: 1.4.1
48 | openai: 3.2.1
49 | react: 18.2.0
50 | react-cookie: 4.1.1_react@18.2.0
51 | react-dom: 18.2.0_react@18.2.0
52 | react-wrap-balancer: 0.1.5_react@18.2.0
53 | unified: 8.4.2
54 | url-parse: 1.5.10
55 | whacko: 0.19.1
56 |
57 | devDependencies:
58 | '@types/node': 17.0.45
59 | '@types/react': 18.2.6
60 | '@types/url-parse': 1.4.8
61 | autoprefixer: 10.4.14_postcss@8.4.23
62 | eslint: 8.41.0
63 | eslint-config-next: 12.3.4_5ujgynla27k2qkzlnkldjwsutm
64 | postcss: 8.4.23
65 | tailwindcss: 3.3.2
66 | turbo: 1.9.8
67 | typescript: 4.9.5
68 |
69 | packages:
70 |
71 | /@alloc/quick-lru/5.2.0:
72 | resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
73 | engines: {node: '>=10'}
74 | dev: true
75 |
76 | /@babel/runtime/7.21.5:
77 | resolution: {integrity: sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==}
78 | engines: {node: '>=6.9.0'}
79 | dependencies:
80 | regenerator-runtime: 0.13.11
81 | dev: true
82 |
83 | /@eslint-community/eslint-utils/4.4.0_eslint@8.41.0:
84 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
85 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
86 | peerDependencies:
87 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
88 | dependencies:
89 | eslint: 8.41.0
90 | eslint-visitor-keys: 3.4.1
91 | dev: true
92 |
93 | /@eslint-community/regexpp/4.5.1:
94 | resolution: {integrity: sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==}
95 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
96 | dev: true
97 |
98 | /@eslint/eslintrc/2.0.3:
99 | resolution: {integrity: sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==}
100 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
101 | dependencies:
102 | ajv: 6.12.6
103 | debug: 4.3.4
104 | espree: 9.5.2
105 | globals: 13.20.0
106 | ignore: 5.2.4
107 | import-fresh: 3.3.0
108 | js-yaml: 4.1.0
109 | minimatch: 3.1.2
110 | strip-json-comments: 3.1.1
111 | transitivePeerDependencies:
112 | - supports-color
113 | dev: true
114 |
115 | /@eslint/js/8.41.0:
116 | resolution: {integrity: sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA==}
117 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
118 | dev: true
119 |
120 | /@humanwhocodes/config-array/0.11.8:
121 | resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==}
122 | engines: {node: '>=10.10.0'}
123 | dependencies:
124 | '@humanwhocodes/object-schema': 1.2.1
125 | debug: 4.3.4
126 | minimatch: 3.1.2
127 | transitivePeerDependencies:
128 | - supports-color
129 | dev: true
130 |
131 | /@humanwhocodes/module-importer/1.0.1:
132 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
133 | engines: {node: '>=12.22'}
134 | dev: true
135 |
136 | /@humanwhocodes/object-schema/1.2.1:
137 | resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==}
138 | dev: true
139 |
140 | /@jridgewell/gen-mapping/0.3.3:
141 | resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
142 | engines: {node: '>=6.0.0'}
143 | dependencies:
144 | '@jridgewell/set-array': 1.1.2
145 | '@jridgewell/sourcemap-codec': 1.4.15
146 | '@jridgewell/trace-mapping': 0.3.18
147 | dev: true
148 |
149 | /@jridgewell/resolve-uri/3.1.0:
150 | resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
151 | engines: {node: '>=6.0.0'}
152 | dev: true
153 |
154 | /@jridgewell/set-array/1.1.2:
155 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
156 | engines: {node: '>=6.0.0'}
157 | dev: true
158 |
159 | /@jridgewell/sourcemap-codec/1.4.14:
160 | resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
161 | dev: true
162 |
163 | /@jridgewell/sourcemap-codec/1.4.15:
164 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
165 | dev: true
166 |
167 | /@jridgewell/trace-mapping/0.3.18:
168 | resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==}
169 | dependencies:
170 | '@jridgewell/resolve-uri': 3.1.0
171 | '@jridgewell/sourcemap-codec': 1.4.14
172 | dev: true
173 |
174 | /@next/env/13.4.3:
175 | resolution: {integrity: sha512-pa1ErjyFensznttAk3EIv77vFbfSYT6cLzVRK5jx4uiRuCQo+m2wCFAREaHKIy63dlgvOyMlzh6R8Inu8H3KrQ==}
176 | dev: false
177 |
178 | /@next/eslint-plugin-next/12.3.4:
179 | resolution: {integrity: sha512-BFwj8ykJY+zc1/jWANsDprDIu2MgwPOIKxNVnrKvPs+f5TPegrVnem8uScND+1veT4B7F6VeqgaNLFW1Hzl9Og==}
180 | dependencies:
181 | glob: 7.1.7
182 | dev: true
183 |
184 | /@next/swc-darwin-arm64/13.4.3:
185 | resolution: {integrity: sha512-yx18udH/ZmR4Bw4M6lIIPE3JxsAZwo04iaucEfA2GMt1unXr2iodHUX/LAKNyi6xoLP2ghi0E+Xi1f4Qb8f1LQ==}
186 | engines: {node: '>= 10'}
187 | cpu: [arm64]
188 | os: [darwin]
189 | requiresBuild: true
190 | dev: false
191 | optional: true
192 |
193 | /@next/swc-darwin-x64/13.4.3:
194 | resolution: {integrity: sha512-Mi8xJWh2IOjryAM1mx18vwmal9eokJ2njY4nDh04scy37F0LEGJ/diL6JL6kTXi0UfUCGbMsOItf7vpReNiD2A==}
195 | engines: {node: '>= 10'}
196 | cpu: [x64]
197 | os: [darwin]
198 | requiresBuild: true
199 | dev: false
200 | optional: true
201 |
202 | /@next/swc-linux-arm64-gnu/13.4.3:
203 | resolution: {integrity: sha512-aBvtry4bxJ1xwKZ/LVPeBGBwWVwxa4bTnNkRRw6YffJnn/f4Tv4EGDPaVeYHZGQVA56wsGbtA6nZMuWs/EIk4Q==}
204 | engines: {node: '>= 10'}
205 | cpu: [arm64]
206 | os: [linux]
207 | requiresBuild: true
208 | dev: false
209 | optional: true
210 |
211 | /@next/swc-linux-arm64-musl/13.4.3:
212 | resolution: {integrity: sha512-krT+2G3kEsEUvZoYte3/2IscscDraYPc2B+fDJFipPktJmrv088Pei/RjrhWm5TMIy5URYjZUoDZdh5k940Dyw==}
213 | engines: {node: '>= 10'}
214 | cpu: [arm64]
215 | os: [linux]
216 | requiresBuild: true
217 | dev: false
218 | optional: true
219 |
220 | /@next/swc-linux-x64-gnu/13.4.3:
221 | resolution: {integrity: sha512-AMdFX6EKJjC0G/CM6hJvkY8wUjCcbdj3Qg7uAQJ7PVejRWaVt0sDTMavbRfgMchx8h8KsAudUCtdFkG9hlEClw==}
222 | engines: {node: '>= 10'}
223 | cpu: [x64]
224 | os: [linux]
225 | requiresBuild: true
226 | dev: false
227 | optional: true
228 |
229 | /@next/swc-linux-x64-musl/13.4.3:
230 | resolution: {integrity: sha512-jySgSXE48shaLtcQbiFO9ajE9mqz7pcAVLnVLvRIlUHyQYR/WyZdK8ehLs65Mz6j9cLrJM+YdmdJPyV4WDaz2g==}
231 | engines: {node: '>= 10'}
232 | cpu: [x64]
233 | os: [linux]
234 | requiresBuild: true
235 | dev: false
236 | optional: true
237 |
238 | /@next/swc-win32-arm64-msvc/13.4.3:
239 | resolution: {integrity: sha512-5DxHo8uYcaADiE9pHrg8o28VMt/1kR8voDehmfs9AqS0qSClxAAl+CchjdboUvbCjdNWL1MISCvEfKY2InJ3JA==}
240 | engines: {node: '>= 10'}
241 | cpu: [arm64]
242 | os: [win32]
243 | requiresBuild: true
244 | dev: false
245 | optional: true
246 |
247 | /@next/swc-win32-ia32-msvc/13.4.3:
248 | resolution: {integrity: sha512-LaqkF3d+GXRA5X6zrUjQUrXm2MN/3E2arXBtn5C7avBCNYfm9G3Xc646AmmmpN3DJZVaMYliMyCIQCMDEzk80w==}
249 | engines: {node: '>= 10'}
250 | cpu: [ia32]
251 | os: [win32]
252 | requiresBuild: true
253 | dev: false
254 | optional: true
255 |
256 | /@next/swc-win32-x64-msvc/13.4.3:
257 | resolution: {integrity: sha512-jglUk/x7ZWeOJWlVoKyIAkHLTI+qEkOriOOV+3hr1GyiywzcqfI7TpFSiwC7kk1scOiH7NTFKp8mA3XPNO9bDw==}
258 | engines: {node: '>= 10'}
259 | cpu: [x64]
260 | os: [win32]
261 | requiresBuild: true
262 | dev: false
263 | optional: true
264 |
265 | /@nodelib/fs.scandir/2.1.5:
266 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
267 | engines: {node: '>= 8'}
268 | dependencies:
269 | '@nodelib/fs.stat': 2.0.5
270 | run-parallel: 1.2.0
271 | dev: true
272 |
273 | /@nodelib/fs.stat/2.0.5:
274 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
275 | engines: {node: '>= 8'}
276 | dev: true
277 |
278 | /@nodelib/fs.walk/1.2.8:
279 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
280 | engines: {node: '>= 8'}
281 | dependencies:
282 | '@nodelib/fs.scandir': 2.1.5
283 | fastq: 1.15.0
284 | dev: true
285 |
286 | /@pinecone-database/pinecone/0.1.6_encoding@0.1.13:
287 | resolution: {integrity: sha512-tCnVc28udecthhgSBTdcMhYEW+xsR++AdZasp+ZE/AvUD1hOR2IR3edjk9m0sDxZyvXbno2KeqUbLIOZr7sCTw==}
288 | engines: {node: '>=14.0.0'}
289 | dependencies:
290 | cross-fetch: 3.1.6_encoding@0.1.13
291 | transitivePeerDependencies:
292 | - encoding
293 | dev: false
294 |
295 | /@rushstack/eslint-patch/1.3.0:
296 | resolution: {integrity: sha512-IthPJsJR85GhOkp3Hvp8zFOPK5ynKn6STyHa/WZpioK7E1aYDiBzpqQPrngc14DszIUkIrdd3k9Iu0XSzlP/1w==}
297 | dev: true
298 |
299 | /@swc/helpers/0.4.14:
300 | resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==}
301 | dependencies:
302 | tslib: 2.5.2
303 | dev: false
304 |
305 | /@swc/helpers/0.5.1:
306 | resolution: {integrity: sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==}
307 | dependencies:
308 | tslib: 2.5.2
309 | dev: false
310 |
311 | /@types/cookie/0.3.3:
312 | resolution: {integrity: sha512-LKVP3cgXBT9RYj+t+9FDKwS5tdI+rPBXaNSkma7hvqy35lc7mAokC2zsqWJH0LaqIt3B962nuYI77hsJoT1gow==}
313 | dev: false
314 |
315 | /@types/hoist-non-react-statics/3.3.1:
316 | resolution: {integrity: sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==}
317 | dependencies:
318 | '@types/react': 18.2.6
319 | hoist-non-react-statics: 3.3.2
320 | dev: false
321 |
322 | /@types/json5/0.0.29:
323 | resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
324 | dev: true
325 |
326 | /@types/node/17.0.45:
327 | resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==}
328 | dev: true
329 |
330 | /@types/prop-types/15.7.5:
331 | resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==}
332 |
333 | /@types/react/18.2.6:
334 | resolution: {integrity: sha512-wRZClXn//zxCFW+ye/D2qY65UsYP1Fpex2YXorHc8awoNamkMZSvBxwxdYVInsHOZZd2Ppq8isnSzJL5Mpf8OA==}
335 | dependencies:
336 | '@types/prop-types': 15.7.5
337 | '@types/scheduler': 0.16.3
338 | csstype: 3.1.2
339 |
340 | /@types/scheduler/0.16.3:
341 | resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==}
342 |
343 | /@types/unist/2.0.6:
344 | resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==}
345 | dev: false
346 |
347 | /@types/url-parse/1.4.8:
348 | resolution: {integrity: sha512-zqqcGKyNWgTLFBxmaexGUKQyWqeG7HjXj20EuQJSJWwXe54BjX0ihIo5cJB9yAQzH8dNugJ9GvkBYMjPXs/PJw==}
349 | dev: true
350 |
351 | /@typescript-eslint/parser/5.59.7_5ujgynla27k2qkzlnkldjwsutm:
352 | resolution: {integrity: sha512-VhpsIEuq/8i5SF+mPg9jSdIwgMBBp0z9XqjiEay+81PYLJuroN+ET1hM5IhkiYMJd9MkTz8iJLt7aaGAgzWUbQ==}
353 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
354 | peerDependencies:
355 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
356 | typescript: '*'
357 | peerDependenciesMeta:
358 | typescript:
359 | optional: true
360 | dependencies:
361 | '@typescript-eslint/scope-manager': 5.59.7
362 | '@typescript-eslint/types': 5.59.7
363 | '@typescript-eslint/typescript-estree': 5.59.7_typescript@4.9.5
364 | debug: 4.3.4
365 | eslint: 8.41.0
366 | typescript: 4.9.5
367 | transitivePeerDependencies:
368 | - supports-color
369 | dev: true
370 |
371 | /@typescript-eslint/scope-manager/5.59.7:
372 | resolution: {integrity: sha512-FL6hkYWK9zBGdxT2wWEd2W8ocXMu3K94i3gvMrjXpx+koFYdYV7KprKfirpgY34vTGzEPPuKoERpP8kD5h7vZQ==}
373 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
374 | dependencies:
375 | '@typescript-eslint/types': 5.59.7
376 | '@typescript-eslint/visitor-keys': 5.59.7
377 | dev: true
378 |
379 | /@typescript-eslint/types/5.59.7:
380 | resolution: {integrity: sha512-UnVS2MRRg6p7xOSATscWkKjlf/NDKuqo5TdbWck6rIRZbmKpVNTLALzNvcjIfHBE7736kZOFc/4Z3VcZwuOM/A==}
381 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
382 | dev: true
383 |
384 | /@typescript-eslint/typescript-estree/5.59.7_typescript@4.9.5:
385 | resolution: {integrity: sha512-4A1NtZ1I3wMN2UGDkU9HMBL+TIQfbrh4uS0WDMMpf3xMRursDbqEf1ahh6vAAe3mObt8k3ZATnezwG4pdtWuUQ==}
386 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
387 | peerDependencies:
388 | typescript: '*'
389 | peerDependenciesMeta:
390 | typescript:
391 | optional: true
392 | dependencies:
393 | '@typescript-eslint/types': 5.59.7
394 | '@typescript-eslint/visitor-keys': 5.59.7
395 | debug: 4.3.4
396 | globby: 11.1.0
397 | is-glob: 4.0.3
398 | semver: 7.5.1
399 | tsutils: 3.21.0_typescript@4.9.5
400 | typescript: 4.9.5
401 | transitivePeerDependencies:
402 | - supports-color
403 | dev: true
404 |
405 | /@typescript-eslint/visitor-keys/5.59.7:
406 | resolution: {integrity: sha512-tyN+X2jvMslUszIiYbF0ZleP+RqQsFVpGrKI6e0Eet1w8WmhsAtmzaqm8oM8WJQ1ysLwhnsK/4hYHJjOgJVfQQ==}
407 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
408 | dependencies:
409 | '@typescript-eslint/types': 5.59.7
410 | eslint-visitor-keys: 3.4.1
411 | dev: true
412 |
413 | /@vercel/analytics/0.1.11_react@18.2.0:
414 | resolution: {integrity: sha512-mj5CPR02y0BRs1tN3oZcBNAX9a8NxsIUl9vElDPcqxnMfP0RbRc9fI9Ud7+QDg/1Izvt5uMumsr+6YsmVHcyuw==}
415 | peerDependencies:
416 | react: ^16.8||^17||^18
417 | dependencies:
418 | react: 18.2.0
419 | dev: false
420 |
421 | /@vercel/examples-ui/1.0.5_o6dt4yn4syzkhlixdxt4y57rzi:
422 | resolution: {integrity: sha512-6pj8V9MPLgrPajIUbqEkbmupEMnK6xBk5zkwsilwhA9mYQdxttqgVyDqlFMQhEVqb3tk0PshA+XxnZoDfLCpoQ==}
423 | peerDependencies:
424 | next: '*'
425 | react: ^17.0.2 || ^18.0.0-0
426 | react-dom: ^17.0.2 || ^18.0.0-0
427 | dependencies:
428 | '@swc/helpers': 0.4.14
429 | clsx: 1.2.1
430 | next: 13.4.3_biqbaboplfbrettd7655fr4n2y
431 | react: 18.2.0
432 | react-dom: 18.2.0_react@18.2.0
433 | sugar-high: 0.4.6
434 | dev: false
435 |
436 | /@viclafouch/fetch-crawler/1.0.13_encoding@0.1.13:
437 | resolution: {integrity: sha512-qePkJP3ht3gVXTHerDb3JzfyB/+NMG16rWOKW7cWZDTczcZ5z1nC537TRE8lPgp3SJMmQB/dvpV8eWctljYBiQ==}
438 | dependencies:
439 | abort-controller: 3.0.0
440 | cheerio: 1.0.0-rc.12
441 | express: 4.18.2
442 | node-fetch: 2.6.11_encoding@0.1.13
443 | transitivePeerDependencies:
444 | - encoding
445 | - supports-color
446 | dev: false
447 |
448 | /abort-controller/3.0.0:
449 | resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
450 | engines: {node: '>=6.5'}
451 | dependencies:
452 | event-target-shim: 5.0.1
453 | dev: false
454 |
455 | /accepts/1.3.8:
456 | resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
457 | engines: {node: '>= 0.6'}
458 | dependencies:
459 | mime-types: 2.1.35
460 | negotiator: 0.6.3
461 | dev: false
462 |
463 | /acorn-jsx/5.3.2_acorn@8.8.2:
464 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
465 | peerDependencies:
466 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
467 | dependencies:
468 | acorn: 8.8.2
469 | dev: true
470 |
471 | /acorn/8.8.2:
472 | resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==}
473 | engines: {node: '>=0.4.0'}
474 | hasBin: true
475 | dev: true
476 |
477 | /ajv/6.12.6:
478 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
479 | dependencies:
480 | fast-deep-equal: 3.1.3
481 | fast-json-stable-stringify: 2.1.0
482 | json-schema-traverse: 0.4.1
483 | uri-js: 4.4.1
484 | dev: true
485 |
486 | /ansi-regex/2.1.1:
487 | resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==}
488 | engines: {node: '>=0.10.0'}
489 | dev: false
490 |
491 | /ansi-regex/5.0.1:
492 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
493 | engines: {node: '>=8'}
494 | dev: true
495 |
496 | /ansi-styles/2.2.1:
497 | resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==}
498 | engines: {node: '>=0.10.0'}
499 | dev: false
500 |
501 | /ansi-styles/4.3.0:
502 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
503 | engines: {node: '>=8'}
504 | dependencies:
505 | color-convert: 2.0.1
506 | dev: true
507 |
508 | /any-promise/1.3.0:
509 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
510 | dev: true
511 |
512 | /anymatch/3.1.3:
513 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
514 | engines: {node: '>= 8'}
515 | dependencies:
516 | normalize-path: 3.0.0
517 | picomatch: 2.3.1
518 | dev: true
519 |
520 | /arg/5.0.2:
521 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
522 | dev: true
523 |
524 | /argparse/2.0.1:
525 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
526 | dev: true
527 |
528 | /aria-query/5.1.3:
529 | resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==}
530 | dependencies:
531 | deep-equal: 2.2.1
532 | dev: true
533 |
534 | /array-buffer-byte-length/1.0.0:
535 | resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==}
536 | dependencies:
537 | call-bind: 1.0.2
538 | is-array-buffer: 3.0.2
539 | dev: true
540 |
541 | /array-flatten/1.1.1:
542 | resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
543 | dev: false
544 |
545 | /array-includes/3.1.6:
546 | resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==}
547 | engines: {node: '>= 0.4'}
548 | dependencies:
549 | call-bind: 1.0.2
550 | define-properties: 1.2.0
551 | es-abstract: 1.21.2
552 | get-intrinsic: 1.2.1
553 | is-string: 1.0.7
554 | dev: true
555 |
556 | /array-union/2.1.0:
557 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
558 | engines: {node: '>=8'}
559 | dev: true
560 |
561 | /array.prototype.flat/1.3.1:
562 | resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==}
563 | engines: {node: '>= 0.4'}
564 | dependencies:
565 | call-bind: 1.0.2
566 | define-properties: 1.2.0
567 | es-abstract: 1.21.2
568 | es-shim-unscopables: 1.0.0
569 | dev: true
570 |
571 | /array.prototype.flatmap/1.3.1:
572 | resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==}
573 | engines: {node: '>= 0.4'}
574 | dependencies:
575 | call-bind: 1.0.2
576 | define-properties: 1.2.0
577 | es-abstract: 1.21.2
578 | es-shim-unscopables: 1.0.0
579 | dev: true
580 |
581 | /array.prototype.tosorted/1.1.1:
582 | resolution: {integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==}
583 | dependencies:
584 | call-bind: 1.0.2
585 | define-properties: 1.2.0
586 | es-abstract: 1.21.2
587 | es-shim-unscopables: 1.0.0
588 | get-intrinsic: 1.2.1
589 | dev: true
590 |
591 | /asn1/0.1.11:
592 | resolution: {integrity: sha512-Fh9zh3G2mZ8qM/kwsiKwL2U2FmXxVsboP4x1mXjnhKHv3SmzaBZoYvxEQJz/YS2gnCgd8xlAVWcZnQyC9qZBsA==}
593 | engines: {node: '>=0.4.9'}
594 | dev: false
595 |
596 | /assert-plus/0.1.5:
597 | resolution: {integrity: sha512-brU24g7ryhRwGCI2y+1dGQmQXiZF7TtIj583S96y0jjdajIe6wn8BuXyELYhvD22dtIxDQVFk04YTJwwdwOYJw==}
598 | engines: {node: '>=0.8'}
599 | dev: false
600 |
601 | /ast-types-flow/0.0.7:
602 | resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==}
603 | dev: true
604 |
605 | /async/2.6.4:
606 | resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==}
607 | dependencies:
608 | lodash: 4.17.21
609 | dev: false
610 |
611 | /asynckit/0.4.0:
612 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
613 | dev: false
614 |
615 | /autoprefixer/10.4.14_postcss@8.4.23:
616 | resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==}
617 | engines: {node: ^10 || ^12 || >=14}
618 | hasBin: true
619 | peerDependencies:
620 | postcss: ^8.1.0
621 | dependencies:
622 | browserslist: 4.21.5
623 | caniuse-lite: 1.0.30001489
624 | fraction.js: 4.2.0
625 | normalize-range: 0.1.2
626 | picocolors: 1.0.0
627 | postcss: 8.4.23
628 | postcss-value-parser: 4.2.0
629 | dev: true
630 |
631 | /available-typed-arrays/1.0.5:
632 | resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==}
633 | engines: {node: '>= 0.4'}
634 | dev: true
635 |
636 | /aws-sign2/0.5.0:
637 | resolution: {integrity: sha512-oqUX0DM5j7aPWPCnpWebiyNIj2wiNI87ZxnOMoGv0aE4TGlBy2N+5iWc6dQ/NOKZaBD2W6PVz8jtOGkWzSC5EA==}
638 | dev: false
639 |
640 | /axe-core/4.7.1:
641 | resolution: {integrity: sha512-sCXXUhA+cljomZ3ZAwb8i1p3oOlkABzPy08ZDAoGcYuvtBPlQ1Ytde129ArXyHWDhfeewq7rlx9F+cUx2SSlkg==}
642 | engines: {node: '>=4'}
643 | dev: true
644 |
645 | /axios/0.26.1:
646 | resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==}
647 | dependencies:
648 | follow-redirects: 1.15.2
649 | transitivePeerDependencies:
650 | - debug
651 | dev: false
652 |
653 | /axobject-query/3.1.1:
654 | resolution: {integrity: sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==}
655 | dependencies:
656 | deep-equal: 2.2.1
657 | dev: true
658 |
659 | /bail/1.0.5:
660 | resolution: {integrity: sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==}
661 | dev: false
662 |
663 | /balanced-match/1.0.2:
664 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
665 | dev: true
666 |
667 | /binary-extensions/2.2.0:
668 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
669 | engines: {node: '>=8'}
670 | dev: true
671 |
672 | /bl/1.0.3:
673 | resolution: {integrity: sha512-phbvN+yOk05EGoFcV/0S8N8ShnJqf6VCWRAw5he2gvRwBubFt/OzmcTNGqBt5b7Y4RK3YCgf6jrgGSR0Cwtsgw==}
674 | dependencies:
675 | readable-stream: 2.0.6
676 | dev: false
677 |
678 | /bluebird/2.11.0:
679 | resolution: {integrity: sha512-UfFSr22dmHPQqPP9XWHRhq+gWnHCYguQGkXQlbyPtW5qTnhFWA8/iXg765tH0cAjy7l/zPJ1aBTO0g5XgA7kvQ==}
680 | dev: false
681 |
682 | /body-parser/1.20.1:
683 | resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==}
684 | engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
685 | dependencies:
686 | bytes: 3.1.2
687 | content-type: 1.0.5
688 | debug: 2.6.9
689 | depd: 2.0.0
690 | destroy: 1.2.0
691 | http-errors: 2.0.0
692 | iconv-lite: 0.4.24
693 | on-finished: 2.4.1
694 | qs: 6.11.0
695 | raw-body: 2.5.1
696 | type-is: 1.6.18
697 | unpipe: 1.0.0
698 | transitivePeerDependencies:
699 | - supports-color
700 | dev: false
701 |
702 | /boolbase/1.0.0:
703 | resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
704 | dev: false
705 |
706 | /boom/2.10.1:
707 | resolution: {integrity: sha512-KbiZEa9/vofNcVJXGwdWWn25reQ3V3dHBWbS07FTF3/TOehLnm9GEhJV4T6ZvGPkShRpmUqYwnaCrkj0mRnP6Q==}
708 | engines: {node: '>=0.10.40'}
709 | deprecated: This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).
710 | dependencies:
711 | hoek: 2.16.3
712 | dev: false
713 |
714 | /brace-expansion/1.1.11:
715 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
716 | dependencies:
717 | balanced-match: 1.0.2
718 | concat-map: 0.0.1
719 | dev: true
720 |
721 | /braces/3.0.2:
722 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
723 | engines: {node: '>=8'}
724 | dependencies:
725 | fill-range: 7.0.1
726 | dev: true
727 |
728 | /browserslist/4.21.5:
729 | resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==}
730 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
731 | hasBin: true
732 | dependencies:
733 | caniuse-lite: 1.0.30001489
734 | electron-to-chromium: 1.4.403
735 | node-releases: 2.0.11
736 | update-browserslist-db: 1.0.11_browserslist@4.21.5
737 | dev: true
738 |
739 | /busboy/1.6.0:
740 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
741 | engines: {node: '>=10.16.0'}
742 | dependencies:
743 | streamsearch: 1.1.0
744 | dev: false
745 |
746 | /bytes/3.1.2:
747 | resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
748 | engines: {node: '>= 0.8'}
749 | dev: false
750 |
751 | /call-bind/1.0.2:
752 | resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
753 | dependencies:
754 | function-bind: 1.1.1
755 | get-intrinsic: 1.2.1
756 |
757 | /callsites/3.1.0:
758 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
759 | engines: {node: '>=6'}
760 | dev: true
761 |
762 | /camelcase-css/2.0.1:
763 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
764 | engines: {node: '>= 6'}
765 | dev: true
766 |
767 | /caniuse-lite/1.0.30001489:
768 | resolution: {integrity: sha512-x1mgZEXK8jHIfAxm+xgdpHpk50IN3z3q3zP261/WS+uvePxW8izXuCu6AHz0lkuYTlATDehiZ/tNyYBdSQsOUQ==}
769 |
770 | /caseless/0.11.0:
771 | resolution: {integrity: sha512-ODLXH644w9C2fMPAm7bMDQ3GRvipZWZfKc+8As6hIadRIelE0n0xZuN38NS6kiK3KPEVrpymmQD8bvncAHWQkQ==}
772 | dev: false
773 |
774 | /chalk/1.1.3:
775 | resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==}
776 | engines: {node: '>=0.10.0'}
777 | dependencies:
778 | ansi-styles: 2.2.1
779 | escape-string-regexp: 1.0.5
780 | has-ansi: 2.0.0
781 | strip-ansi: 3.0.1
782 | supports-color: 2.0.0
783 | dev: false
784 |
785 | /chalk/4.1.2:
786 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
787 | engines: {node: '>=10'}
788 | dependencies:
789 | ansi-styles: 4.3.0
790 | supports-color: 7.2.0
791 | dev: true
792 |
793 | /cheerio-select/2.1.0:
794 | resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==}
795 | dependencies:
796 | boolbase: 1.0.0
797 | css-select: 5.1.0
798 | css-what: 6.1.0
799 | domelementtype: 2.3.0
800 | domhandler: 5.0.3
801 | domutils: 3.1.0
802 | dev: false
803 |
804 | /cheerio/0.19.0:
805 | resolution: {integrity: sha512-Fwcm3zkR37STnPC8FepSHeSYJM5Rd596TZOcfDUdojR4Q735aK1Xn+M+ISagNneuCwMjK28w4kX+ETILGNT/UQ==}
806 | engines: {node: '>= 0.6'}
807 | dependencies:
808 | css-select: 1.0.0
809 | dom-serializer: 0.1.1
810 | entities: 1.1.2
811 | htmlparser2: 3.8.3
812 | lodash: 3.10.1
813 | dev: false
814 |
815 | /cheerio/1.0.0-rc.12:
816 | resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==}
817 | engines: {node: '>= 6'}
818 | dependencies:
819 | cheerio-select: 2.1.0
820 | dom-serializer: 2.0.0
821 | domhandler: 5.0.3
822 | domutils: 3.1.0
823 | htmlparser2: 8.0.2
824 | parse5: 7.1.2
825 | parse5-htmlparser2-tree-adapter: 7.0.0
826 | dev: false
827 |
828 | /chokidar/3.5.3:
829 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
830 | engines: {node: '>= 8.10.0'}
831 | dependencies:
832 | anymatch: 3.1.3
833 | braces: 3.0.2
834 | glob-parent: 5.1.2
835 | is-binary-path: 2.1.0
836 | is-glob: 4.0.3
837 | normalize-path: 3.0.0
838 | readdirp: 3.6.0
839 | optionalDependencies:
840 | fsevents: 2.3.2
841 | dev: true
842 |
843 | /client-only/0.0.1:
844 | resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
845 | dev: false
846 |
847 | /clsx/1.2.1:
848 | resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==}
849 | engines: {node: '>=6'}
850 | dev: false
851 |
852 | /color-convert/2.0.1:
853 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
854 | engines: {node: '>=7.0.0'}
855 | dependencies:
856 | color-name: 1.1.4
857 | dev: true
858 |
859 | /color-name/1.1.4:
860 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
861 | dev: true
862 |
863 | /combined-stream/1.0.8:
864 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
865 | engines: {node: '>= 0.8'}
866 | dependencies:
867 | delayed-stream: 1.0.0
868 | dev: false
869 |
870 | /commander/2.20.3:
871 | resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
872 | dev: false
873 |
874 | /commander/4.1.1:
875 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
876 | engines: {node: '>= 6'}
877 | dev: true
878 |
879 | /concat-map/0.0.1:
880 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
881 | dev: true
882 |
883 | /content-disposition/0.5.4:
884 | resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
885 | engines: {node: '>= 0.6'}
886 | dependencies:
887 | safe-buffer: 5.2.1
888 | dev: false
889 |
890 | /content-type/1.0.5:
891 | resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
892 | engines: {node: '>= 0.6'}
893 | dev: false
894 |
895 | /cookie-signature/1.0.6:
896 | resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==}
897 | dev: false
898 |
899 | /cookie/0.4.2:
900 | resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==}
901 | engines: {node: '>= 0.6'}
902 | dev: false
903 |
904 | /cookie/0.5.0:
905 | resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
906 | engines: {node: '>= 0.6'}
907 | dev: false
908 |
909 | /core-util-is/1.0.3:
910 | resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
911 | dev: false
912 |
913 | /cross-env/7.0.3:
914 | resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==}
915 | engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'}
916 | hasBin: true
917 | dependencies:
918 | cross-spawn: 7.0.3
919 | dev: false
920 |
921 | /cross-fetch/3.1.6_encoding@0.1.13:
922 | resolution: {integrity: sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==}
923 | dependencies:
924 | node-fetch: 2.6.11_encoding@0.1.13
925 | transitivePeerDependencies:
926 | - encoding
927 | dev: false
928 |
929 | /cross-spawn/7.0.3:
930 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
931 | engines: {node: '>= 8'}
932 | dependencies:
933 | path-key: 3.1.1
934 | shebang-command: 2.0.0
935 | which: 2.0.2
936 |
937 | /cryptiles/2.0.5:
938 | resolution: {integrity: sha512-FFN5KwpvvQTTS5hWPxrU8/QE4kQUc6uwZcrnlMBN82t1MgAtq8mnoDwINBly9Tdr02seeIIhtdF+UH1feBYGog==}
939 | engines: {node: '>=0.10.40'}
940 | deprecated: This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).
941 | dependencies:
942 | boom: 2.10.1
943 | dev: false
944 |
945 | /css-select/1.0.0:
946 | resolution: {integrity: sha512-/xPlD7betkfd7ChGkLGGWx5HWyiHDOSn7aACLzdH0nwucPvB0EAm8hMBm7Xn7vGfAeRRN7KZ8wumGm8NoNcMRw==}
947 | dependencies:
948 | boolbase: 1.0.0
949 | css-what: 1.0.0
950 | domutils: 1.4.3
951 | nth-check: 1.0.2
952 | dev: false
953 |
954 | /css-select/1.2.0:
955 | resolution: {integrity: sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA==}
956 | dependencies:
957 | boolbase: 1.0.0
958 | css-what: 2.1.3
959 | domutils: 1.5.1
960 | nth-check: 1.0.2
961 | dev: false
962 |
963 | /css-select/5.1.0:
964 | resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==}
965 | dependencies:
966 | boolbase: 1.0.0
967 | css-what: 6.1.0
968 | domhandler: 5.0.3
969 | domutils: 3.1.0
970 | nth-check: 2.1.1
971 | dev: false
972 |
973 | /css-what/1.0.0:
974 | resolution: {integrity: sha512-60SUMPBreXrLXgvpM8kYpO0AOyMRhdRlXFX5BMQbZq1SIJCyNE56nqFQhmvREQdUJpedbGRYZ5wOyq3/F6q5Zw==}
975 | dev: false
976 |
977 | /css-what/2.1.3:
978 | resolution: {integrity: sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==}
979 | dev: false
980 |
981 | /css-what/6.1.0:
982 | resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
983 | engines: {node: '>= 6'}
984 | dev: false
985 |
986 | /cssesc/3.0.0:
987 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
988 | engines: {node: '>=4'}
989 | hasBin: true
990 | dev: true
991 |
992 | /csstype/3.1.2:
993 | resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==}
994 |
995 | /ctype/0.5.3:
996 | resolution: {integrity: sha512-T6CEkoSV4q50zW3TlTHMbzy1E5+zlnNcY+yb7tWVYlTwPhx9LpnfAkd4wecpWknDyptp4k97LUZeInlf6jdzBg==}
997 | engines: {node: '>= 0.4'}
998 | dev: false
999 |
1000 | /damerau-levenshtein/1.0.8:
1001 | resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
1002 | dev: true
1003 |
1004 | /debug/2.6.9:
1005 | resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
1006 | peerDependencies:
1007 | supports-color: '*'
1008 | peerDependenciesMeta:
1009 | supports-color:
1010 | optional: true
1011 | dependencies:
1012 | ms: 2.0.0
1013 | dev: false
1014 |
1015 | /debug/3.2.7:
1016 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
1017 | peerDependencies:
1018 | supports-color: '*'
1019 | peerDependenciesMeta:
1020 | supports-color:
1021 | optional: true
1022 | dependencies:
1023 | ms: 2.1.3
1024 | dev: true
1025 |
1026 | /debug/4.3.4:
1027 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
1028 | engines: {node: '>=6.0'}
1029 | peerDependencies:
1030 | supports-color: '*'
1031 | peerDependenciesMeta:
1032 | supports-color:
1033 | optional: true
1034 | dependencies:
1035 | ms: 2.1.2
1036 | dev: true
1037 |
1038 | /deep-equal/2.2.1:
1039 | resolution: {integrity: sha512-lKdkdV6EOGoVn65XaOsPdH4rMxTZOnmFyuIkMjM1i5HHCbfjC97dawgTAy0deYNfuqUqW+Q5VrVaQYtUpSd6yQ==}
1040 | dependencies:
1041 | array-buffer-byte-length: 1.0.0
1042 | call-bind: 1.0.2
1043 | es-get-iterator: 1.1.3
1044 | get-intrinsic: 1.2.1
1045 | is-arguments: 1.1.1
1046 | is-array-buffer: 3.0.2
1047 | is-date-object: 1.0.5
1048 | is-regex: 1.1.4
1049 | is-shared-array-buffer: 1.0.2
1050 | isarray: 2.0.5
1051 | object-is: 1.1.5
1052 | object-keys: 1.1.1
1053 | object.assign: 4.1.4
1054 | regexp.prototype.flags: 1.5.0
1055 | side-channel: 1.0.4
1056 | which-boxed-primitive: 1.0.2
1057 | which-collection: 1.0.1
1058 | which-typed-array: 1.1.9
1059 | dev: true
1060 |
1061 | /deep-is/0.1.4:
1062 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
1063 | dev: true
1064 |
1065 | /define-properties/1.2.0:
1066 | resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==}
1067 | engines: {node: '>= 0.4'}
1068 | dependencies:
1069 | has-property-descriptors: 1.0.0
1070 | object-keys: 1.1.1
1071 | dev: true
1072 |
1073 | /delayed-stream/1.0.0:
1074 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
1075 | engines: {node: '>=0.4.0'}
1076 | dev: false
1077 |
1078 | /depd/2.0.0:
1079 | resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
1080 | engines: {node: '>= 0.8'}
1081 | dev: false
1082 |
1083 | /destroy/1.2.0:
1084 | resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
1085 | engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
1086 | dev: false
1087 |
1088 | /didyoumean/1.2.2:
1089 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
1090 | dev: true
1091 |
1092 | /dir-glob/3.0.1:
1093 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
1094 | engines: {node: '>=8'}
1095 | dependencies:
1096 | path-type: 4.0.0
1097 | dev: true
1098 |
1099 | /dlv/1.1.3:
1100 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
1101 | dev: true
1102 |
1103 | /doctrine/2.1.0:
1104 | resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
1105 | engines: {node: '>=0.10.0'}
1106 | dependencies:
1107 | esutils: 2.0.3
1108 | dev: true
1109 |
1110 | /doctrine/3.0.0:
1111 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
1112 | engines: {node: '>=6.0.0'}
1113 | dependencies:
1114 | esutils: 2.0.3
1115 | dev: true
1116 |
1117 | /dom-serializer/0.1.1:
1118 | resolution: {integrity: sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==}
1119 | dependencies:
1120 | domelementtype: 1.3.1
1121 | entities: 1.1.2
1122 | dev: false
1123 |
1124 | /dom-serializer/0.2.2:
1125 | resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==}
1126 | dependencies:
1127 | domelementtype: 2.3.0
1128 | entities: 2.2.0
1129 | dev: false
1130 |
1131 | /dom-serializer/2.0.0:
1132 | resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
1133 | dependencies:
1134 | domelementtype: 2.3.0
1135 | domhandler: 5.0.3
1136 | entities: 4.5.0
1137 | dev: false
1138 |
1139 | /domelementtype/1.3.1:
1140 | resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==}
1141 | dev: false
1142 |
1143 | /domelementtype/2.3.0:
1144 | resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
1145 | dev: false
1146 |
1147 | /domhandler/2.3.0:
1148 | resolution: {integrity: sha512-q9bUwjfp7Eif8jWxxxPSykdRZAb6GkguBGSgvvCrhI9wB71W2K/Kvv4E61CF/mcCfnVJDeDWx/Vb/uAqbDj6UQ==}
1149 | dependencies:
1150 | domelementtype: 1.3.1
1151 | dev: false
1152 |
1153 | /domhandler/5.0.3:
1154 | resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
1155 | engines: {node: '>= 4'}
1156 | dependencies:
1157 | domelementtype: 2.3.0
1158 | dev: false
1159 |
1160 | /domutils/1.4.3:
1161 | resolution: {integrity: sha512-ZkVgS/PpxjyJMb+S2iVHHEZjVnOUtjGp0/zstqKGTE9lrZtNHlNQmLwP/lhLMEApYbzc08BKMx9IFpKhaSbW1w==}
1162 | dependencies:
1163 | domelementtype: 1.3.1
1164 | dev: false
1165 |
1166 | /domutils/1.5.1:
1167 | resolution: {integrity: sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==}
1168 | dependencies:
1169 | dom-serializer: 0.2.2
1170 | domelementtype: 1.3.1
1171 | dev: false
1172 |
1173 | /domutils/3.1.0:
1174 | resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==}
1175 | dependencies:
1176 | dom-serializer: 2.0.0
1177 | domelementtype: 2.3.0
1178 | domhandler: 5.0.3
1179 | dev: false
1180 |
1181 | /ee-first/1.1.1:
1182 | resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
1183 | dev: false
1184 |
1185 | /electron-to-chromium/1.4.403:
1186 | resolution: {integrity: sha512-evCMqXJWmbQHdlh307peXNguqVIMmcLGrQwXiR+Qc98js8jPDeT9rse1+EF2YRjWgueuzj1r4WWLAe4/U+xjMg==}
1187 | dev: true
1188 |
1189 | /emoji-regex/9.2.2:
1190 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
1191 | dev: true
1192 |
1193 | /encodeurl/1.0.2:
1194 | resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
1195 | engines: {node: '>= 0.8'}
1196 | dev: false
1197 |
1198 | /encoding/0.1.13:
1199 | resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==}
1200 | dependencies:
1201 | iconv-lite: 0.6.3
1202 | dev: false
1203 |
1204 | /entities/1.0.0:
1205 | resolution: {integrity: sha512-LbLqfXgJMmy81t+7c14mnulFHJ170cM6E+0vMXR9k/ZiZwgX8i5pNgjTCX3SO4VeUsFLV+8InixoretwU+MjBQ==}
1206 | dev: false
1207 |
1208 | /entities/1.1.2:
1209 | resolution: {integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==}
1210 | dev: false
1211 |
1212 | /entities/2.2.0:
1213 | resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==}
1214 | dev: false
1215 |
1216 | /entities/4.5.0:
1217 | resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
1218 | engines: {node: '>=0.12'}
1219 | dev: false
1220 |
1221 | /es-abstract/1.21.2:
1222 | resolution: {integrity: sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==}
1223 | engines: {node: '>= 0.4'}
1224 | dependencies:
1225 | array-buffer-byte-length: 1.0.0
1226 | available-typed-arrays: 1.0.5
1227 | call-bind: 1.0.2
1228 | es-set-tostringtag: 2.0.1
1229 | es-to-primitive: 1.2.1
1230 | function.prototype.name: 1.1.5
1231 | get-intrinsic: 1.2.1
1232 | get-symbol-description: 1.0.0
1233 | globalthis: 1.0.3
1234 | gopd: 1.0.1
1235 | has: 1.0.3
1236 | has-property-descriptors: 1.0.0
1237 | has-proto: 1.0.1
1238 | has-symbols: 1.0.3
1239 | internal-slot: 1.0.5
1240 | is-array-buffer: 3.0.2
1241 | is-callable: 1.2.7
1242 | is-negative-zero: 2.0.2
1243 | is-regex: 1.1.4
1244 | is-shared-array-buffer: 1.0.2
1245 | is-string: 1.0.7
1246 | is-typed-array: 1.1.10
1247 | is-weakref: 1.0.2
1248 | object-inspect: 1.12.3
1249 | object-keys: 1.1.1
1250 | object.assign: 4.1.4
1251 | regexp.prototype.flags: 1.5.0
1252 | safe-regex-test: 1.0.0
1253 | string.prototype.trim: 1.2.7
1254 | string.prototype.trimend: 1.0.6
1255 | string.prototype.trimstart: 1.0.6
1256 | typed-array-length: 1.0.4
1257 | unbox-primitive: 1.0.2
1258 | which-typed-array: 1.1.9
1259 | dev: true
1260 |
1261 | /es-get-iterator/1.1.3:
1262 | resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==}
1263 | dependencies:
1264 | call-bind: 1.0.2
1265 | get-intrinsic: 1.2.1
1266 | has-symbols: 1.0.3
1267 | is-arguments: 1.1.1
1268 | is-map: 2.0.2
1269 | is-set: 2.0.2
1270 | is-string: 1.0.7
1271 | isarray: 2.0.5
1272 | stop-iteration-iterator: 1.0.0
1273 | dev: true
1274 |
1275 | /es-set-tostringtag/2.0.1:
1276 | resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==}
1277 | engines: {node: '>= 0.4'}
1278 | dependencies:
1279 | get-intrinsic: 1.2.1
1280 | has: 1.0.3
1281 | has-tostringtag: 1.0.0
1282 | dev: true
1283 |
1284 | /es-shim-unscopables/1.0.0:
1285 | resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==}
1286 | dependencies:
1287 | has: 1.0.3
1288 | dev: true
1289 |
1290 | /es-to-primitive/1.2.1:
1291 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
1292 | engines: {node: '>= 0.4'}
1293 | dependencies:
1294 | is-callable: 1.2.7
1295 | is-date-object: 1.0.5
1296 | is-symbol: 1.0.4
1297 | dev: true
1298 |
1299 | /escalade/3.1.1:
1300 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
1301 | engines: {node: '>=6'}
1302 | dev: true
1303 |
1304 | /escape-html/1.0.3:
1305 | resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
1306 | dev: false
1307 |
1308 | /escape-string-regexp/1.0.5:
1309 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
1310 | engines: {node: '>=0.8.0'}
1311 | dev: false
1312 |
1313 | /escape-string-regexp/4.0.0:
1314 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
1315 | engines: {node: '>=10'}
1316 | dev: true
1317 |
1318 | /eslint-config-next/12.3.4_5ujgynla27k2qkzlnkldjwsutm:
1319 | resolution: {integrity: sha512-WuT3gvgi7Bwz00AOmKGhOeqnyA5P29Cdyr0iVjLyfDbk+FANQKcOjFUTZIdyYfe5Tq1x4TGcmoe4CwctGvFjHQ==}
1320 | peerDependencies:
1321 | eslint: ^7.23.0 || ^8.0.0
1322 | typescript: '>=3.3.1'
1323 | peerDependenciesMeta:
1324 | typescript:
1325 | optional: true
1326 | dependencies:
1327 | '@next/eslint-plugin-next': 12.3.4
1328 | '@rushstack/eslint-patch': 1.3.0
1329 | '@typescript-eslint/parser': 5.59.7_5ujgynla27k2qkzlnkldjwsutm
1330 | eslint: 8.41.0
1331 | eslint-import-resolver-node: 0.3.7
1332 | eslint-import-resolver-typescript: 2.7.1_bwfkg7osvbtezdkshju7lqq44q
1333 | eslint-plugin-import: 2.27.5_po3x6aylron7ephmxhmzaqgufe
1334 | eslint-plugin-jsx-a11y: 6.7.1_eslint@8.41.0
1335 | eslint-plugin-react: 7.32.2_eslint@8.41.0
1336 | eslint-plugin-react-hooks: 4.6.0_eslint@8.41.0
1337 | typescript: 4.9.5
1338 | transitivePeerDependencies:
1339 | - eslint-import-resolver-webpack
1340 | - supports-color
1341 | dev: true
1342 |
1343 | /eslint-import-resolver-node/0.3.7:
1344 | resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==}
1345 | dependencies:
1346 | debug: 3.2.7
1347 | is-core-module: 2.12.1
1348 | resolve: 1.22.2
1349 | transitivePeerDependencies:
1350 | - supports-color
1351 | dev: true
1352 |
1353 | /eslint-import-resolver-typescript/2.7.1_bwfkg7osvbtezdkshju7lqq44q:
1354 | resolution: {integrity: sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==}
1355 | engines: {node: '>=4'}
1356 | peerDependencies:
1357 | eslint: '*'
1358 | eslint-plugin-import: '*'
1359 | dependencies:
1360 | debug: 4.3.4
1361 | eslint: 8.41.0
1362 | eslint-plugin-import: 2.27.5_po3x6aylron7ephmxhmzaqgufe
1363 | glob: 7.2.3
1364 | is-glob: 4.0.3
1365 | resolve: 1.22.2
1366 | tsconfig-paths: 3.14.2
1367 | transitivePeerDependencies:
1368 | - supports-color
1369 | dev: true
1370 |
1371 | /eslint-module-utils/2.8.0_kni5gu5wkqnbu5wxsoiryysiru:
1372 | resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==}
1373 | engines: {node: '>=4'}
1374 | peerDependencies:
1375 | '@typescript-eslint/parser': '*'
1376 | eslint: '*'
1377 | eslint-import-resolver-node: '*'
1378 | eslint-import-resolver-typescript: '*'
1379 | eslint-import-resolver-webpack: '*'
1380 | peerDependenciesMeta:
1381 | '@typescript-eslint/parser':
1382 | optional: true
1383 | eslint:
1384 | optional: true
1385 | eslint-import-resolver-node:
1386 | optional: true
1387 | eslint-import-resolver-typescript:
1388 | optional: true
1389 | eslint-import-resolver-webpack:
1390 | optional: true
1391 | dependencies:
1392 | '@typescript-eslint/parser': 5.59.7_5ujgynla27k2qkzlnkldjwsutm
1393 | debug: 3.2.7
1394 | eslint: 8.41.0
1395 | eslint-import-resolver-node: 0.3.7
1396 | eslint-import-resolver-typescript: 2.7.1_bwfkg7osvbtezdkshju7lqq44q
1397 | transitivePeerDependencies:
1398 | - supports-color
1399 | dev: true
1400 |
1401 | /eslint-plugin-import/2.27.5_po3x6aylron7ephmxhmzaqgufe:
1402 | resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==}
1403 | engines: {node: '>=4'}
1404 | peerDependencies:
1405 | '@typescript-eslint/parser': '*'
1406 | eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8
1407 | peerDependenciesMeta:
1408 | '@typescript-eslint/parser':
1409 | optional: true
1410 | dependencies:
1411 | '@typescript-eslint/parser': 5.59.7_5ujgynla27k2qkzlnkldjwsutm
1412 | array-includes: 3.1.6
1413 | array.prototype.flat: 1.3.1
1414 | array.prototype.flatmap: 1.3.1
1415 | debug: 3.2.7
1416 | doctrine: 2.1.0
1417 | eslint: 8.41.0
1418 | eslint-import-resolver-node: 0.3.7
1419 | eslint-module-utils: 2.8.0_kni5gu5wkqnbu5wxsoiryysiru
1420 | has: 1.0.3
1421 | is-core-module: 2.12.1
1422 | is-glob: 4.0.3
1423 | minimatch: 3.1.2
1424 | object.values: 1.1.6
1425 | resolve: 1.22.2
1426 | semver: 6.3.0
1427 | tsconfig-paths: 3.14.2
1428 | transitivePeerDependencies:
1429 | - eslint-import-resolver-typescript
1430 | - eslint-import-resolver-webpack
1431 | - supports-color
1432 | dev: true
1433 |
1434 | /eslint-plugin-jsx-a11y/6.7.1_eslint@8.41.0:
1435 | resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==}
1436 | engines: {node: '>=4.0'}
1437 | peerDependencies:
1438 | eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
1439 | dependencies:
1440 | '@babel/runtime': 7.21.5
1441 | aria-query: 5.1.3
1442 | array-includes: 3.1.6
1443 | array.prototype.flatmap: 1.3.1
1444 | ast-types-flow: 0.0.7
1445 | axe-core: 4.7.1
1446 | axobject-query: 3.1.1
1447 | damerau-levenshtein: 1.0.8
1448 | emoji-regex: 9.2.2
1449 | eslint: 8.41.0
1450 | has: 1.0.3
1451 | jsx-ast-utils: 3.3.3
1452 | language-tags: 1.0.5
1453 | minimatch: 3.1.2
1454 | object.entries: 1.1.6
1455 | object.fromentries: 2.0.6
1456 | semver: 6.3.0
1457 | dev: true
1458 |
1459 | /eslint-plugin-react-hooks/4.6.0_eslint@8.41.0:
1460 | resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==}
1461 | engines: {node: '>=10'}
1462 | peerDependencies:
1463 | eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
1464 | dependencies:
1465 | eslint: 8.41.0
1466 | dev: true
1467 |
1468 | /eslint-plugin-react/7.32.2_eslint@8.41.0:
1469 | resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==}
1470 | engines: {node: '>=4'}
1471 | peerDependencies:
1472 | eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
1473 | dependencies:
1474 | array-includes: 3.1.6
1475 | array.prototype.flatmap: 1.3.1
1476 | array.prototype.tosorted: 1.1.1
1477 | doctrine: 2.1.0
1478 | eslint: 8.41.0
1479 | estraverse: 5.3.0
1480 | jsx-ast-utils: 3.3.3
1481 | minimatch: 3.1.2
1482 | object.entries: 1.1.6
1483 | object.fromentries: 2.0.6
1484 | object.hasown: 1.1.2
1485 | object.values: 1.1.6
1486 | prop-types: 15.8.1
1487 | resolve: 2.0.0-next.4
1488 | semver: 6.3.0
1489 | string.prototype.matchall: 4.0.8
1490 | dev: true
1491 |
1492 | /eslint-scope/7.2.0:
1493 | resolution: {integrity: sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==}
1494 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1495 | dependencies:
1496 | esrecurse: 4.3.0
1497 | estraverse: 5.3.0
1498 | dev: true
1499 |
1500 | /eslint-visitor-keys/3.4.1:
1501 | resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==}
1502 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1503 | dev: true
1504 |
1505 | /eslint/8.41.0:
1506 | resolution: {integrity: sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q==}
1507 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1508 | hasBin: true
1509 | dependencies:
1510 | '@eslint-community/eslint-utils': 4.4.0_eslint@8.41.0
1511 | '@eslint-community/regexpp': 4.5.1
1512 | '@eslint/eslintrc': 2.0.3
1513 | '@eslint/js': 8.41.0
1514 | '@humanwhocodes/config-array': 0.11.8
1515 | '@humanwhocodes/module-importer': 1.0.1
1516 | '@nodelib/fs.walk': 1.2.8
1517 | ajv: 6.12.6
1518 | chalk: 4.1.2
1519 | cross-spawn: 7.0.3
1520 | debug: 4.3.4
1521 | doctrine: 3.0.0
1522 | escape-string-regexp: 4.0.0
1523 | eslint-scope: 7.2.0
1524 | eslint-visitor-keys: 3.4.1
1525 | espree: 9.5.2
1526 | esquery: 1.5.0
1527 | esutils: 2.0.3
1528 | fast-deep-equal: 3.1.3
1529 | file-entry-cache: 6.0.1
1530 | find-up: 5.0.0
1531 | glob-parent: 6.0.2
1532 | globals: 13.20.0
1533 | graphemer: 1.4.0
1534 | ignore: 5.2.4
1535 | import-fresh: 3.3.0
1536 | imurmurhash: 0.1.4
1537 | is-glob: 4.0.3
1538 | is-path-inside: 3.0.3
1539 | js-yaml: 4.1.0
1540 | json-stable-stringify-without-jsonify: 1.0.1
1541 | levn: 0.4.1
1542 | lodash.merge: 4.6.2
1543 | minimatch: 3.1.2
1544 | natural-compare: 1.4.0
1545 | optionator: 0.9.1
1546 | strip-ansi: 6.0.1
1547 | strip-json-comments: 3.1.1
1548 | text-table: 0.2.0
1549 | transitivePeerDependencies:
1550 | - supports-color
1551 | dev: true
1552 |
1553 | /espree/9.5.2:
1554 | resolution: {integrity: sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==}
1555 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1556 | dependencies:
1557 | acorn: 8.8.2
1558 | acorn-jsx: 5.3.2_acorn@8.8.2
1559 | eslint-visitor-keys: 3.4.1
1560 | dev: true
1561 |
1562 | /esquery/1.5.0:
1563 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==}
1564 | engines: {node: '>=0.10'}
1565 | dependencies:
1566 | estraverse: 5.3.0
1567 | dev: true
1568 |
1569 | /esrecurse/4.3.0:
1570 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
1571 | engines: {node: '>=4.0'}
1572 | dependencies:
1573 | estraverse: 5.3.0
1574 | dev: true
1575 |
1576 | /estraverse/5.3.0:
1577 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
1578 | engines: {node: '>=4.0'}
1579 | dev: true
1580 |
1581 | /esutils/2.0.3:
1582 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
1583 | engines: {node: '>=0.10.0'}
1584 | dev: true
1585 |
1586 | /etag/1.8.1:
1587 | resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
1588 | engines: {node: '>= 0.6'}
1589 | dev: false
1590 |
1591 | /event-target-shim/5.0.1:
1592 | resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
1593 | engines: {node: '>=6'}
1594 | dev: false
1595 |
1596 | /eventsource-parser/0.1.0:
1597 | resolution: {integrity: sha512-M9QjFtEIkwytUarnx113HGmgtk52LSn3jNAtnWKi3V+b9rqSfQeVdLsaD5AG/O4IrGQwmAAHBIsqbmURPTd2rA==}
1598 | engines: {node: '>=14.18'}
1599 | dev: false
1600 |
1601 | /express/4.18.2:
1602 | resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==}
1603 | engines: {node: '>= 0.10.0'}
1604 | dependencies:
1605 | accepts: 1.3.8
1606 | array-flatten: 1.1.1
1607 | body-parser: 1.20.1
1608 | content-disposition: 0.5.4
1609 | content-type: 1.0.5
1610 | cookie: 0.5.0
1611 | cookie-signature: 1.0.6
1612 | debug: 2.6.9
1613 | depd: 2.0.0
1614 | encodeurl: 1.0.2
1615 | escape-html: 1.0.3
1616 | etag: 1.8.1
1617 | finalhandler: 1.2.0
1618 | fresh: 0.5.2
1619 | http-errors: 2.0.0
1620 | merge-descriptors: 1.0.1
1621 | methods: 1.1.2
1622 | on-finished: 2.4.1
1623 | parseurl: 1.3.3
1624 | path-to-regexp: 0.1.7
1625 | proxy-addr: 2.0.7
1626 | qs: 6.11.0
1627 | range-parser: 1.2.1
1628 | safe-buffer: 5.2.1
1629 | send: 0.18.0
1630 | serve-static: 1.15.0
1631 | setprototypeof: 1.2.0
1632 | statuses: 2.0.1
1633 | type-is: 1.6.18
1634 | utils-merge: 1.0.1
1635 | vary: 1.1.2
1636 | transitivePeerDependencies:
1637 | - supports-color
1638 | dev: false
1639 |
1640 | /extend/3.0.2:
1641 | resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
1642 | dev: false
1643 |
1644 | /fast-deep-equal/3.1.3:
1645 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
1646 | dev: true
1647 |
1648 | /fast-glob/3.2.12:
1649 | resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==}
1650 | engines: {node: '>=8.6.0'}
1651 | dependencies:
1652 | '@nodelib/fs.stat': 2.0.5
1653 | '@nodelib/fs.walk': 1.2.8
1654 | glob-parent: 5.1.2
1655 | merge2: 1.4.1
1656 | micromatch: 4.0.5
1657 | dev: true
1658 |
1659 | /fast-json-stable-stringify/2.1.0:
1660 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
1661 | dev: true
1662 |
1663 | /fast-levenshtein/2.0.6:
1664 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
1665 | dev: true
1666 |
1667 | /fastq/1.15.0:
1668 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
1669 | dependencies:
1670 | reusify: 1.0.4
1671 | dev: true
1672 |
1673 | /file-entry-cache/6.0.1:
1674 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
1675 | engines: {node: ^10.12.0 || >=12.0.0}
1676 | dependencies:
1677 | flat-cache: 3.0.4
1678 | dev: true
1679 |
1680 | /fill-range/7.0.1:
1681 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
1682 | engines: {node: '>=8'}
1683 | dependencies:
1684 | to-regex-range: 5.0.1
1685 | dev: true
1686 |
1687 | /finalhandler/1.2.0:
1688 | resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==}
1689 | engines: {node: '>= 0.8'}
1690 | dependencies:
1691 | debug: 2.6.9
1692 | encodeurl: 1.0.2
1693 | escape-html: 1.0.3
1694 | on-finished: 2.4.1
1695 | parseurl: 1.3.3
1696 | statuses: 2.0.1
1697 | unpipe: 1.0.0
1698 | transitivePeerDependencies:
1699 | - supports-color
1700 | dev: false
1701 |
1702 | /find-up/5.0.0:
1703 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
1704 | engines: {node: '>=10'}
1705 | dependencies:
1706 | locate-path: 6.0.0
1707 | path-exists: 4.0.0
1708 | dev: true
1709 |
1710 | /flat-cache/3.0.4:
1711 | resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==}
1712 | engines: {node: ^10.12.0 || >=12.0.0}
1713 | dependencies:
1714 | flatted: 3.2.7
1715 | rimraf: 3.0.2
1716 | dev: true
1717 |
1718 | /flatted/3.2.7:
1719 | resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==}
1720 | dev: true
1721 |
1722 | /follow-redirects/1.15.2:
1723 | resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==}
1724 | engines: {node: '>=4.0'}
1725 | peerDependencies:
1726 | debug: '*'
1727 | peerDependenciesMeta:
1728 | debug:
1729 | optional: true
1730 | dev: false
1731 |
1732 | /for-each/0.3.3:
1733 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
1734 | dependencies:
1735 | is-callable: 1.2.7
1736 | dev: true
1737 |
1738 | /forever-agent/0.6.1:
1739 | resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==}
1740 | dev: false
1741 |
1742 | /form-data/1.0.1:
1743 | resolution: {integrity: sha512-M4Yhq2mLogpCtpUmfopFlTTuIe6mSCTgKvnlMhDj3NcgVhA1uS20jT0n+xunKPzpmL5w2erSVtp+SKiJf1TlWg==}
1744 | engines: {node: '>= 0.10'}
1745 | dependencies:
1746 | async: 2.6.4
1747 | combined-stream: 1.0.8
1748 | mime-types: 2.1.35
1749 | dev: false
1750 |
1751 | /form-data/4.0.0:
1752 | resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
1753 | engines: {node: '>= 6'}
1754 | dependencies:
1755 | asynckit: 0.4.0
1756 | combined-stream: 1.0.8
1757 | mime-types: 2.1.35
1758 | dev: false
1759 |
1760 | /forwarded/0.2.0:
1761 | resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
1762 | engines: {node: '>= 0.6'}
1763 | dev: false
1764 |
1765 | /fraction.js/4.2.0:
1766 | resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==}
1767 | dev: true
1768 |
1769 | /fresh/0.5.2:
1770 | resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
1771 | engines: {node: '>= 0.6'}
1772 | dev: false
1773 |
1774 | /fs.realpath/1.0.0:
1775 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
1776 | dev: true
1777 |
1778 | /fsevents/2.3.2:
1779 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
1780 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
1781 | os: [darwin]
1782 | requiresBuild: true
1783 | dev: true
1784 | optional: true
1785 |
1786 | /function-bind/1.1.1:
1787 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
1788 |
1789 | /function.prototype.name/1.1.5:
1790 | resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==}
1791 | engines: {node: '>= 0.4'}
1792 | dependencies:
1793 | call-bind: 1.0.2
1794 | define-properties: 1.2.0
1795 | es-abstract: 1.21.2
1796 | functions-have-names: 1.2.3
1797 | dev: true
1798 |
1799 | /functions-have-names/1.2.3:
1800 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
1801 | dev: true
1802 |
1803 | /generate-function/2.3.1:
1804 | resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==}
1805 | dependencies:
1806 | is-property: 1.0.2
1807 | dev: false
1808 |
1809 | /generate-object-property/1.2.0:
1810 | resolution: {integrity: sha512-TuOwZWgJ2VAMEGJvAyPWvpqxSANF0LDpmyHauMjFYzaACvn+QTT/AZomvPCzVBV7yDN3OmwHQ5OvHaeLKre3JQ==}
1811 | dependencies:
1812 | is-property: 1.0.2
1813 | dev: false
1814 |
1815 | /get-intrinsic/1.2.1:
1816 | resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==}
1817 | dependencies:
1818 | function-bind: 1.1.1
1819 | has: 1.0.3
1820 | has-proto: 1.0.1
1821 | has-symbols: 1.0.3
1822 |
1823 | /get-symbol-description/1.0.0:
1824 | resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==}
1825 | engines: {node: '>= 0.4'}
1826 | dependencies:
1827 | call-bind: 1.0.2
1828 | get-intrinsic: 1.2.1
1829 | dev: true
1830 |
1831 | /glob-parent/5.1.2:
1832 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
1833 | engines: {node: '>= 6'}
1834 | dependencies:
1835 | is-glob: 4.0.3
1836 | dev: true
1837 |
1838 | /glob-parent/6.0.2:
1839 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
1840 | engines: {node: '>=10.13.0'}
1841 | dependencies:
1842 | is-glob: 4.0.3
1843 | dev: true
1844 |
1845 | /glob/7.1.6:
1846 | resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==}
1847 | dependencies:
1848 | fs.realpath: 1.0.0
1849 | inflight: 1.0.6
1850 | inherits: 2.0.4
1851 | minimatch: 3.1.2
1852 | once: 1.4.0
1853 | path-is-absolute: 1.0.1
1854 | dev: true
1855 |
1856 | /glob/7.1.7:
1857 | resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==}
1858 | dependencies:
1859 | fs.realpath: 1.0.0
1860 | inflight: 1.0.6
1861 | inherits: 2.0.4
1862 | minimatch: 3.1.2
1863 | once: 1.4.0
1864 | path-is-absolute: 1.0.1
1865 | dev: true
1866 |
1867 | /glob/7.2.3:
1868 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
1869 | dependencies:
1870 | fs.realpath: 1.0.0
1871 | inflight: 1.0.6
1872 | inherits: 2.0.4
1873 | minimatch: 3.1.2
1874 | once: 1.4.0
1875 | path-is-absolute: 1.0.1
1876 | dev: true
1877 |
1878 | /globals/13.20.0:
1879 | resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==}
1880 | engines: {node: '>=8'}
1881 | dependencies:
1882 | type-fest: 0.20.2
1883 | dev: true
1884 |
1885 | /globalthis/1.0.3:
1886 | resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==}
1887 | engines: {node: '>= 0.4'}
1888 | dependencies:
1889 | define-properties: 1.2.0
1890 | dev: true
1891 |
1892 | /globby/11.1.0:
1893 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
1894 | engines: {node: '>=10'}
1895 | dependencies:
1896 | array-union: 2.1.0
1897 | dir-glob: 3.0.1
1898 | fast-glob: 3.2.12
1899 | ignore: 5.2.4
1900 | merge2: 1.4.1
1901 | slash: 3.0.0
1902 | dev: true
1903 |
1904 | /gopd/1.0.1:
1905 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
1906 | dependencies:
1907 | get-intrinsic: 1.2.1
1908 | dev: true
1909 |
1910 | /graphemer/1.4.0:
1911 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
1912 | dev: true
1913 |
1914 | /har-validator/1.8.0:
1915 | resolution: {integrity: sha512-0+M2lRG5aXVEFwZZ2tUeRVBZT5AxViug9y94qquvQaHHVoL9ydL86aJvI3K28rwoD+DL15DzAgWtPCXNhdTKAQ==}
1916 | engines: {node: '>=0.10'}
1917 | deprecated: this library is no longer supported
1918 | hasBin: true
1919 | dependencies:
1920 | bluebird: 2.11.0
1921 | chalk: 1.1.3
1922 | commander: 2.20.3
1923 | is-my-json-valid: 2.20.6
1924 | dev: false
1925 |
1926 | /has-ansi/2.0.0:
1927 | resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==}
1928 | engines: {node: '>=0.10.0'}
1929 | dependencies:
1930 | ansi-regex: 2.1.1
1931 | dev: false
1932 |
1933 | /has-bigints/1.0.2:
1934 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
1935 | dev: true
1936 |
1937 | /has-flag/4.0.0:
1938 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
1939 | engines: {node: '>=8'}
1940 | dev: true
1941 |
1942 | /has-property-descriptors/1.0.0:
1943 | resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==}
1944 | dependencies:
1945 | get-intrinsic: 1.2.1
1946 | dev: true
1947 |
1948 | /has-proto/1.0.1:
1949 | resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==}
1950 | engines: {node: '>= 0.4'}
1951 |
1952 | /has-symbols/1.0.3:
1953 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
1954 | engines: {node: '>= 0.4'}
1955 |
1956 | /has-tostringtag/1.0.0:
1957 | resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==}
1958 | engines: {node: '>= 0.4'}
1959 | dependencies:
1960 | has-symbols: 1.0.3
1961 | dev: true
1962 |
1963 | /has/1.0.3:
1964 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
1965 | engines: {node: '>= 0.4.0'}
1966 | dependencies:
1967 | function-bind: 1.1.1
1968 |
1969 | /hawk/3.1.3:
1970 | resolution: {integrity: sha512-X8xbmTc1cbPXcQV4WkLcRMALuyoxhfpFATmyuCxJPOAvrDS4DNnsTAOmKUxMTOWU6TzrTOkxPKwIx5ZOpJVSrg==}
1971 | engines: {node: '>=0.10.32'}
1972 | deprecated: This module moved to @hapi/hawk. Please make sure to switch over as this distribution is no longer supported and may contain bugs and critical security issues.
1973 | dependencies:
1974 | boom: 2.10.1
1975 | cryptiles: 2.0.5
1976 | hoek: 2.16.3
1977 | sntp: 1.0.9
1978 | dev: false
1979 |
1980 | /he/1.2.0:
1981 | resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
1982 | hasBin: true
1983 | dev: false
1984 |
1985 | /hoek/2.16.3:
1986 | resolution: {integrity: sha512-V6Yw1rIcYV/4JsnggjBU0l4Kr+EXhpwqXRusENU1Xx6ro00IHPHYNynCuBTOZAPlr3AAmLvchH9I7N/VUdvOwQ==}
1987 | engines: {node: '>=0.10.40'}
1988 | deprecated: This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).
1989 | dev: false
1990 |
1991 | /hoist-non-react-statics/3.3.2:
1992 | resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==}
1993 | dependencies:
1994 | react-is: 16.13.1
1995 | dev: false
1996 |
1997 | /htmlparser2/3.8.3:
1998 | resolution: {integrity: sha512-hBxEg3CYXe+rPIua8ETe7tmG3XDn9B0edOE/e9wH2nLczxzgdu0m0aNHY+5wFZiviLWLdANPJTssa92dMcXQ5Q==}
1999 | dependencies:
2000 | domelementtype: 1.3.1
2001 | domhandler: 2.3.0
2002 | domutils: 1.5.1
2003 | entities: 1.0.0
2004 | readable-stream: 1.1.14
2005 | dev: false
2006 |
2007 | /htmlparser2/8.0.2:
2008 | resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==}
2009 | dependencies:
2010 | domelementtype: 2.3.0
2011 | domhandler: 5.0.3
2012 | domutils: 3.1.0
2013 | entities: 4.5.0
2014 | dev: false
2015 |
2016 | /http-errors/2.0.0:
2017 | resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
2018 | engines: {node: '>= 0.8'}
2019 | dependencies:
2020 | depd: 2.0.0
2021 | inherits: 2.0.4
2022 | setprototypeof: 1.2.0
2023 | statuses: 2.0.1
2024 | toidentifier: 1.0.1
2025 | dev: false
2026 |
2027 | /http-signature/0.11.0:
2028 | resolution: {integrity: sha512-Cg0qO4VID3bADaSsfFIh4X0UqktZKlKWM4tRpa2836Xka0U11xGMnX1AQBPyEkzTLc1KDqiQ8UmNB2qRYHe3SQ==}
2029 | engines: {node: '>=0.8'}
2030 | dependencies:
2031 | asn1: 0.1.11
2032 | assert-plus: 0.1.5
2033 | ctype: 0.5.3
2034 | dev: false
2035 |
2036 | /iconv-lite/0.4.24:
2037 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
2038 | engines: {node: '>=0.10.0'}
2039 | dependencies:
2040 | safer-buffer: 2.1.2
2041 | dev: false
2042 |
2043 | /iconv-lite/0.6.3:
2044 | resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
2045 | engines: {node: '>=0.10.0'}
2046 | dependencies:
2047 | safer-buffer: 2.1.2
2048 | dev: false
2049 |
2050 | /ignore/5.2.4:
2051 | resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
2052 | engines: {node: '>= 4'}
2053 | dev: true
2054 |
2055 | /import-fresh/3.3.0:
2056 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
2057 | engines: {node: '>=6'}
2058 | dependencies:
2059 | parent-module: 1.0.1
2060 | resolve-from: 4.0.0
2061 | dev: true
2062 |
2063 | /imurmurhash/0.1.4:
2064 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
2065 | engines: {node: '>=0.8.19'}
2066 | dev: true
2067 |
2068 | /inflight/1.0.6:
2069 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
2070 | dependencies:
2071 | once: 1.4.0
2072 | wrappy: 1.0.2
2073 | dev: true
2074 |
2075 | /inherits/2.0.4:
2076 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
2077 |
2078 | /internal-slot/1.0.5:
2079 | resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==}
2080 | engines: {node: '>= 0.4'}
2081 | dependencies:
2082 | get-intrinsic: 1.2.1
2083 | has: 1.0.3
2084 | side-channel: 1.0.4
2085 | dev: true
2086 |
2087 | /ipaddr.js/1.9.1:
2088 | resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
2089 | engines: {node: '>= 0.10'}
2090 | dev: false
2091 |
2092 | /is-arguments/1.1.1:
2093 | resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==}
2094 | engines: {node: '>= 0.4'}
2095 | dependencies:
2096 | call-bind: 1.0.2
2097 | has-tostringtag: 1.0.0
2098 | dev: true
2099 |
2100 | /is-array-buffer/3.0.2:
2101 | resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==}
2102 | dependencies:
2103 | call-bind: 1.0.2
2104 | get-intrinsic: 1.2.1
2105 | is-typed-array: 1.1.10
2106 | dev: true
2107 |
2108 | /is-bigint/1.0.4:
2109 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
2110 | dependencies:
2111 | has-bigints: 1.0.2
2112 | dev: true
2113 |
2114 | /is-binary-path/2.1.0:
2115 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
2116 | engines: {node: '>=8'}
2117 | dependencies:
2118 | binary-extensions: 2.2.0
2119 | dev: true
2120 |
2121 | /is-boolean-object/1.1.2:
2122 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
2123 | engines: {node: '>= 0.4'}
2124 | dependencies:
2125 | call-bind: 1.0.2
2126 | has-tostringtag: 1.0.0
2127 | dev: true
2128 |
2129 | /is-buffer/2.0.5:
2130 | resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==}
2131 | engines: {node: '>=4'}
2132 | dev: false
2133 |
2134 | /is-callable/1.2.7:
2135 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
2136 | engines: {node: '>= 0.4'}
2137 | dev: true
2138 |
2139 | /is-core-module/2.12.1:
2140 | resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==}
2141 | dependencies:
2142 | has: 1.0.3
2143 | dev: true
2144 |
2145 | /is-date-object/1.0.5:
2146 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
2147 | engines: {node: '>= 0.4'}
2148 | dependencies:
2149 | has-tostringtag: 1.0.0
2150 | dev: true
2151 |
2152 | /is-extglob/2.1.1:
2153 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
2154 | engines: {node: '>=0.10.0'}
2155 | dev: true
2156 |
2157 | /is-glob/4.0.3:
2158 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
2159 | engines: {node: '>=0.10.0'}
2160 | dependencies:
2161 | is-extglob: 2.1.1
2162 | dev: true
2163 |
2164 | /is-map/2.0.2:
2165 | resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==}
2166 | dev: true
2167 |
2168 | /is-my-ip-valid/1.0.1:
2169 | resolution: {integrity: sha512-jxc8cBcOWbNK2i2aTkCZP6i7wkHF1bqKFrwEHuN5Jtg5BSaZHUZQ/JTOJwoV41YvHnOaRyWWh72T/KvfNz9DJg==}
2170 | dev: false
2171 |
2172 | /is-my-json-valid/2.20.6:
2173 | resolution: {integrity: sha512-1JQwulVNjx8UqkPE/bqDaxtH4PXCe/2VRh/y3p99heOV87HG4Id5/VfDswd+YiAfHcRTfDlWgISycnHuhZq1aw==}
2174 | dependencies:
2175 | generate-function: 2.3.1
2176 | generate-object-property: 1.2.0
2177 | is-my-ip-valid: 1.0.1
2178 | jsonpointer: 5.0.1
2179 | xtend: 4.0.2
2180 | dev: false
2181 |
2182 | /is-negative-zero/2.0.2:
2183 | resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==}
2184 | engines: {node: '>= 0.4'}
2185 | dev: true
2186 |
2187 | /is-number-object/1.0.7:
2188 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==}
2189 | engines: {node: '>= 0.4'}
2190 | dependencies:
2191 | has-tostringtag: 1.0.0
2192 | dev: true
2193 |
2194 | /is-number/7.0.0:
2195 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
2196 | engines: {node: '>=0.12.0'}
2197 | dev: true
2198 |
2199 | /is-path-inside/3.0.3:
2200 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
2201 | engines: {node: '>=8'}
2202 | dev: true
2203 |
2204 | /is-plain-obj/2.1.0:
2205 | resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
2206 | engines: {node: '>=8'}
2207 | dev: false
2208 |
2209 | /is-property/1.0.2:
2210 | resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==}
2211 | dev: false
2212 |
2213 | /is-regex/1.1.4:
2214 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
2215 | engines: {node: '>= 0.4'}
2216 | dependencies:
2217 | call-bind: 1.0.2
2218 | has-tostringtag: 1.0.0
2219 | dev: true
2220 |
2221 | /is-set/2.0.2:
2222 | resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==}
2223 | dev: true
2224 |
2225 | /is-shared-array-buffer/1.0.2:
2226 | resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==}
2227 | dependencies:
2228 | call-bind: 1.0.2
2229 | dev: true
2230 |
2231 | /is-string/1.0.7:
2232 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
2233 | engines: {node: '>= 0.4'}
2234 | dependencies:
2235 | has-tostringtag: 1.0.0
2236 | dev: true
2237 |
2238 | /is-symbol/1.0.4:
2239 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==}
2240 | engines: {node: '>= 0.4'}
2241 | dependencies:
2242 | has-symbols: 1.0.3
2243 | dev: true
2244 |
2245 | /is-typed-array/1.1.10:
2246 | resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==}
2247 | engines: {node: '>= 0.4'}
2248 | dependencies:
2249 | available-typed-arrays: 1.0.5
2250 | call-bind: 1.0.2
2251 | for-each: 0.3.3
2252 | gopd: 1.0.1
2253 | has-tostringtag: 1.0.0
2254 | dev: true
2255 |
2256 | /is-weakmap/2.0.1:
2257 | resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==}
2258 | dev: true
2259 |
2260 | /is-weakref/1.0.2:
2261 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
2262 | dependencies:
2263 | call-bind: 1.0.2
2264 | dev: true
2265 |
2266 | /is-weakset/2.0.2:
2267 | resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==}
2268 | dependencies:
2269 | call-bind: 1.0.2
2270 | get-intrinsic: 1.2.1
2271 | dev: true
2272 |
2273 | /isarray/0.0.1:
2274 | resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==}
2275 | dev: false
2276 |
2277 | /isarray/1.0.0:
2278 | resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
2279 | dev: false
2280 |
2281 | /isarray/2.0.5:
2282 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
2283 | dev: true
2284 |
2285 | /isexe/2.0.0:
2286 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
2287 |
2288 | /isstream/0.1.2:
2289 | resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==}
2290 | dev: false
2291 |
2292 | /jiti/1.18.2:
2293 | resolution: {integrity: sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==}
2294 | hasBin: true
2295 | dev: true
2296 |
2297 | /js-tokens/4.0.0:
2298 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
2299 |
2300 | /js-yaml/4.1.0:
2301 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
2302 | hasBin: true
2303 | dependencies:
2304 | argparse: 2.0.1
2305 | dev: true
2306 |
2307 | /json-schema-traverse/0.4.1:
2308 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
2309 | dev: true
2310 |
2311 | /json-stable-stringify-without-jsonify/1.0.1:
2312 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
2313 | dev: true
2314 |
2315 | /json-stringify-safe/5.0.1:
2316 | resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
2317 | dev: false
2318 |
2319 | /json5/1.0.2:
2320 | resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
2321 | hasBin: true
2322 | dependencies:
2323 | minimist: 1.2.8
2324 | dev: true
2325 |
2326 | /jsonpointer/5.0.1:
2327 | resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==}
2328 | engines: {node: '>=0.10.0'}
2329 | dev: false
2330 |
2331 | /jsx-ast-utils/3.3.3:
2332 | resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==}
2333 | engines: {node: '>=4.0'}
2334 | dependencies:
2335 | array-includes: 3.1.6
2336 | object.assign: 4.1.4
2337 | dev: true
2338 |
2339 | /language-subtag-registry/0.3.22:
2340 | resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==}
2341 | dev: true
2342 |
2343 | /language-tags/1.0.5:
2344 | resolution: {integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==}
2345 | dependencies:
2346 | language-subtag-registry: 0.3.22
2347 | dev: true
2348 |
2349 | /levn/0.4.1:
2350 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
2351 | engines: {node: '>= 0.8.0'}
2352 | dependencies:
2353 | prelude-ls: 1.2.1
2354 | type-check: 0.4.0
2355 | dev: true
2356 |
2357 | /lilconfig/2.1.0:
2358 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
2359 | engines: {node: '>=10'}
2360 | dev: true
2361 |
2362 | /lines-and-columns/1.2.4:
2363 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
2364 | dev: true
2365 |
2366 | /locate-path/6.0.0:
2367 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
2368 | engines: {node: '>=10'}
2369 | dependencies:
2370 | p-locate: 5.0.0
2371 | dev: true
2372 |
2373 | /lodash.merge/4.6.2:
2374 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
2375 | dev: true
2376 |
2377 | /lodash/3.10.1:
2378 | resolution: {integrity: sha512-9mDDwqVIma6OZX79ZlDACZl8sBm0TEnkf99zV3iMA4GzkIT/9hiqP5mY0HoT1iNLCrKc/R1HByV+yJfRWVJryQ==}
2379 | dev: false
2380 |
2381 | /lodash/4.17.21:
2382 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
2383 | dev: false
2384 |
2385 | /loose-envify/1.4.0:
2386 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
2387 | hasBin: true
2388 | dependencies:
2389 | js-tokens: 4.0.0
2390 |
2391 | /lru-cache/6.0.0:
2392 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
2393 | engines: {node: '>=10'}
2394 | dependencies:
2395 | yallist: 4.0.0
2396 | dev: true
2397 |
2398 | /media-typer/0.3.0:
2399 | resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
2400 | engines: {node: '>= 0.6'}
2401 | dev: false
2402 |
2403 | /merge-descriptors/1.0.1:
2404 | resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==}
2405 | dev: false
2406 |
2407 | /merge2/1.4.1:
2408 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
2409 | engines: {node: '>= 8'}
2410 | dev: true
2411 |
2412 | /methods/1.1.2:
2413 | resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
2414 | engines: {node: '>= 0.6'}
2415 | dev: false
2416 |
2417 | /micromatch/4.0.5:
2418 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
2419 | engines: {node: '>=8.6'}
2420 | dependencies:
2421 | braces: 3.0.2
2422 | picomatch: 2.3.1
2423 | dev: true
2424 |
2425 | /mime-db/1.52.0:
2426 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
2427 | engines: {node: '>= 0.6'}
2428 | dev: false
2429 |
2430 | /mime-types/2.1.35:
2431 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
2432 | engines: {node: '>= 0.6'}
2433 | dependencies:
2434 | mime-db: 1.52.0
2435 | dev: false
2436 |
2437 | /mime/1.6.0:
2438 | resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
2439 | engines: {node: '>=4'}
2440 | hasBin: true
2441 | dev: false
2442 |
2443 | /minimatch/3.1.2:
2444 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
2445 | dependencies:
2446 | brace-expansion: 1.1.11
2447 | dev: true
2448 |
2449 | /minimist/1.2.8:
2450 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
2451 | dev: true
2452 |
2453 | /ms/2.0.0:
2454 | resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
2455 | dev: false
2456 |
2457 | /ms/2.1.2:
2458 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
2459 | dev: true
2460 |
2461 | /ms/2.1.3:
2462 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
2463 |
2464 | /mz/2.7.0:
2465 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
2466 | dependencies:
2467 | any-promise: 1.3.0
2468 | object-assign: 4.1.1
2469 | thenify-all: 1.6.0
2470 | dev: true
2471 |
2472 | /nanoid/3.3.6:
2473 | resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==}
2474 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
2475 | hasBin: true
2476 |
2477 | /natural-compare/1.4.0:
2478 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
2479 | dev: true
2480 |
2481 | /negotiator/0.6.3:
2482 | resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
2483 | engines: {node: '>= 0.6'}
2484 | dev: false
2485 |
2486 | /next/13.4.3_biqbaboplfbrettd7655fr4n2y:
2487 | resolution: {integrity: sha512-FV3pBrAAnAIfOclTvncw9dDohyeuEEXPe5KNcva91anT/rdycWbgtu3IjUj4n5yHnWK8YEPo0vrUecHmnmUNbA==}
2488 | engines: {node: '>=16.8.0'}
2489 | hasBin: true
2490 | peerDependencies:
2491 | '@opentelemetry/api': ^1.1.0
2492 | fibers: '>= 3.1.0'
2493 | node-sass: ^6.0.0 || ^7.0.0
2494 | react: ^18.2.0
2495 | react-dom: ^18.2.0
2496 | sass: ^1.3.0
2497 | peerDependenciesMeta:
2498 | '@opentelemetry/api':
2499 | optional: true
2500 | fibers:
2501 | optional: true
2502 | node-sass:
2503 | optional: true
2504 | sass:
2505 | optional: true
2506 | dependencies:
2507 | '@next/env': 13.4.3
2508 | '@swc/helpers': 0.5.1
2509 | busboy: 1.6.0
2510 | caniuse-lite: 1.0.30001489
2511 | postcss: 8.4.14
2512 | react: 18.2.0
2513 | react-dom: 18.2.0_react@18.2.0
2514 | styled-jsx: 5.1.1_react@18.2.0
2515 | zod: 3.21.4
2516 | optionalDependencies:
2517 | '@next/swc-darwin-arm64': 13.4.3
2518 | '@next/swc-darwin-x64': 13.4.3
2519 | '@next/swc-linux-arm64-gnu': 13.4.3
2520 | '@next/swc-linux-arm64-musl': 13.4.3
2521 | '@next/swc-linux-x64-gnu': 13.4.3
2522 | '@next/swc-linux-x64-musl': 13.4.3
2523 | '@next/swc-win32-arm64-msvc': 13.4.3
2524 | '@next/swc-win32-ia32-msvc': 13.4.3
2525 | '@next/swc-win32-x64-msvc': 13.4.3
2526 | transitivePeerDependencies:
2527 | - '@babel/core'
2528 | - babel-plugin-macros
2529 | dev: false
2530 |
2531 | /node-fetch/2.6.11_encoding@0.1.13:
2532 | resolution: {integrity: sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==}
2533 | engines: {node: 4.x || >=6.0.0}
2534 | peerDependencies:
2535 | encoding: ^0.1.0
2536 | peerDependenciesMeta:
2537 | encoding:
2538 | optional: true
2539 | dependencies:
2540 | encoding: 0.1.13
2541 | whatwg-url: 5.0.0
2542 | dev: false
2543 |
2544 | /node-html-markdown/1.3.0:
2545 | resolution: {integrity: sha512-OeFi3QwC/cPjvVKZ114tzzu+YoR+v9UXW5RwSXGUqGb0qCl0DvP406tzdL7SFn8pZrMyzXoisfG2zcuF9+zw4g==}
2546 | engines: {node: '>=10.0.0'}
2547 | dependencies:
2548 | node-html-parser: 6.1.5
2549 | dev: false
2550 |
2551 | /node-html-parser/6.1.5:
2552 | resolution: {integrity: sha512-fAaM511feX++/Chnhe475a0NHD8M7AxDInsqQpz6x63GRF7xYNdS8Vo5dKsIVPgsOvG7eioRRTZQnWBrhDHBSg==}
2553 | dependencies:
2554 | css-select: 5.1.0
2555 | he: 1.2.0
2556 | dev: false
2557 |
2558 | /node-releases/2.0.11:
2559 | resolution: {integrity: sha512-+M0PwXeU80kRohZ3aT4J/OnR+l9/KD2nVLNNoRgFtnf+umQVFdGBAO2N8+nCnEi0xlh/Wk3zOGC+vNNx+uM79Q==}
2560 | dev: true
2561 |
2562 | /node-spider/1.4.1:
2563 | resolution: {integrity: sha512-kVs2EBYFXv2TqfwW0n/aI9FUKwJgB6Lo20r6BqW8F37XCge61qVTl5M8FTx6pUux1TGlgwP7LCmTzgk22LEIXg==}
2564 | dependencies:
2565 | cheerio: 0.19.0
2566 | request: 2.61.0
2567 | dev: false
2568 |
2569 | /node-uuid/1.4.8:
2570 | resolution: {integrity: sha512-TkCET/3rr9mUuRp+CpO7qfgT++aAxfDRaalQhwPFzI9BY/2rCDn6OfpZOVggi1AXfTPpfkTrg5f5WQx5G1uLxA==}
2571 | deprecated: Use uuid module instead
2572 | hasBin: true
2573 | dev: false
2574 |
2575 | /normalize-path/3.0.0:
2576 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
2577 | engines: {node: '>=0.10.0'}
2578 | dev: true
2579 |
2580 | /normalize-range/0.1.2:
2581 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
2582 | engines: {node: '>=0.10.0'}
2583 | dev: true
2584 |
2585 | /nth-check/1.0.2:
2586 | resolution: {integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==}
2587 | dependencies:
2588 | boolbase: 1.0.0
2589 | dev: false
2590 |
2591 | /nth-check/2.1.1:
2592 | resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
2593 | dependencies:
2594 | boolbase: 1.0.0
2595 | dev: false
2596 |
2597 | /oauth-sign/0.8.2:
2598 | resolution: {integrity: sha512-VlF07iu3VV3+BTXj43Nmp6Irt/G7j/NgEctUS6IweH1RGhURjjCc2NWtzXFPXXWWfc7hgbXQdtiQu2LGp6MxUg==}
2599 | dev: false
2600 |
2601 | /object-assign/4.1.1:
2602 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
2603 | engines: {node: '>=0.10.0'}
2604 | dev: true
2605 |
2606 | /object-hash/3.0.0:
2607 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
2608 | engines: {node: '>= 6'}
2609 | dev: true
2610 |
2611 | /object-inspect/1.12.3:
2612 | resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==}
2613 |
2614 | /object-is/1.1.5:
2615 | resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==}
2616 | engines: {node: '>= 0.4'}
2617 | dependencies:
2618 | call-bind: 1.0.2
2619 | define-properties: 1.2.0
2620 | dev: true
2621 |
2622 | /object-keys/1.1.1:
2623 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
2624 | engines: {node: '>= 0.4'}
2625 | dev: true
2626 |
2627 | /object.assign/4.1.4:
2628 | resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==}
2629 | engines: {node: '>= 0.4'}
2630 | dependencies:
2631 | call-bind: 1.0.2
2632 | define-properties: 1.2.0
2633 | has-symbols: 1.0.3
2634 | object-keys: 1.1.1
2635 | dev: true
2636 |
2637 | /object.entries/1.1.6:
2638 | resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==}
2639 | engines: {node: '>= 0.4'}
2640 | dependencies:
2641 | call-bind: 1.0.2
2642 | define-properties: 1.2.0
2643 | es-abstract: 1.21.2
2644 | dev: true
2645 |
2646 | /object.fromentries/2.0.6:
2647 | resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==}
2648 | engines: {node: '>= 0.4'}
2649 | dependencies:
2650 | call-bind: 1.0.2
2651 | define-properties: 1.2.0
2652 | es-abstract: 1.21.2
2653 | dev: true
2654 |
2655 | /object.hasown/1.1.2:
2656 | resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==}
2657 | dependencies:
2658 | define-properties: 1.2.0
2659 | es-abstract: 1.21.2
2660 | dev: true
2661 |
2662 | /object.values/1.1.6:
2663 | resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==}
2664 | engines: {node: '>= 0.4'}
2665 | dependencies:
2666 | call-bind: 1.0.2
2667 | define-properties: 1.2.0
2668 | es-abstract: 1.21.2
2669 | dev: true
2670 |
2671 | /on-finished/2.4.1:
2672 | resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
2673 | engines: {node: '>= 0.8'}
2674 | dependencies:
2675 | ee-first: 1.1.1
2676 | dev: false
2677 |
2678 | /once/1.4.0:
2679 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
2680 | dependencies:
2681 | wrappy: 1.0.2
2682 | dev: true
2683 |
2684 | /openai/3.2.1:
2685 | resolution: {integrity: sha512-762C9BNlJPbjjlWZi4WYK9iM2tAVAv0uUp1UmI34vb0CN5T2mjB/qM6RYBmNKMh/dN9fC+bxqPwWJZUTWW052A==}
2686 | dependencies:
2687 | axios: 0.26.1
2688 | form-data: 4.0.0
2689 | transitivePeerDependencies:
2690 | - debug
2691 | dev: false
2692 |
2693 | /optionator/0.9.1:
2694 | resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==}
2695 | engines: {node: '>= 0.8.0'}
2696 | dependencies:
2697 | deep-is: 0.1.4
2698 | fast-levenshtein: 2.0.6
2699 | levn: 0.4.1
2700 | prelude-ls: 1.2.1
2701 | type-check: 0.4.0
2702 | word-wrap: 1.2.3
2703 | dev: true
2704 |
2705 | /p-limit/3.1.0:
2706 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
2707 | engines: {node: '>=10'}
2708 | dependencies:
2709 | yocto-queue: 0.1.0
2710 | dev: true
2711 |
2712 | /p-locate/5.0.0:
2713 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
2714 | engines: {node: '>=10'}
2715 | dependencies:
2716 | p-limit: 3.1.0
2717 | dev: true
2718 |
2719 | /parent-module/1.0.1:
2720 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
2721 | engines: {node: '>=6'}
2722 | dependencies:
2723 | callsites: 3.1.0
2724 | dev: true
2725 |
2726 | /parse5-htmlparser2-tree-adapter/7.0.0:
2727 | resolution: {integrity: sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==}
2728 | dependencies:
2729 | domhandler: 5.0.3
2730 | parse5: 7.1.2
2731 | dev: false
2732 |
2733 | /parse5/1.5.1:
2734 | resolution: {integrity: sha512-w2jx/0tJzvgKwZa58sj2vAYq/S/K1QJfIB3cWYea/Iu1scFPDQQ3IQiVZTHWtRBwAjv2Yd7S/xeZf3XqLDb3bA==}
2735 | dev: false
2736 |
2737 | /parse5/7.1.2:
2738 | resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==}
2739 | dependencies:
2740 | entities: 4.5.0
2741 | dev: false
2742 |
2743 | /parseurl/1.3.3:
2744 | resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
2745 | engines: {node: '>= 0.8'}
2746 | dev: false
2747 |
2748 | /path-exists/4.0.0:
2749 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
2750 | engines: {node: '>=8'}
2751 | dev: true
2752 |
2753 | /path-is-absolute/1.0.1:
2754 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
2755 | engines: {node: '>=0.10.0'}
2756 | dev: true
2757 |
2758 | /path-key/3.1.1:
2759 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
2760 | engines: {node: '>=8'}
2761 |
2762 | /path-parse/1.0.7:
2763 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
2764 | dev: true
2765 |
2766 | /path-to-regexp/0.1.7:
2767 | resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==}
2768 | dev: false
2769 |
2770 | /path-type/4.0.0:
2771 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
2772 | engines: {node: '>=8'}
2773 | dev: true
2774 |
2775 | /picocolors/1.0.0:
2776 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
2777 |
2778 | /picomatch/2.3.1:
2779 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
2780 | engines: {node: '>=8.6'}
2781 | dev: true
2782 |
2783 | /pify/2.3.0:
2784 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
2785 | engines: {node: '>=0.10.0'}
2786 | dev: true
2787 |
2788 | /pirates/4.0.5:
2789 | resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==}
2790 | engines: {node: '>= 6'}
2791 | dev: true
2792 |
2793 | /postcss-import/15.1.0_postcss@8.4.23:
2794 | resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
2795 | engines: {node: '>=14.0.0'}
2796 | peerDependencies:
2797 | postcss: ^8.0.0
2798 | dependencies:
2799 | postcss: 8.4.23
2800 | postcss-value-parser: 4.2.0
2801 | read-cache: 1.0.0
2802 | resolve: 1.22.2
2803 | dev: true
2804 |
2805 | /postcss-js/4.0.1_postcss@8.4.23:
2806 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
2807 | engines: {node: ^12 || ^14 || >= 16}
2808 | peerDependencies:
2809 | postcss: ^8.4.21
2810 | dependencies:
2811 | camelcase-css: 2.0.1
2812 | postcss: 8.4.23
2813 | dev: true
2814 |
2815 | /postcss-load-config/4.0.1_postcss@8.4.23:
2816 | resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==}
2817 | engines: {node: '>= 14'}
2818 | peerDependencies:
2819 | postcss: '>=8.0.9'
2820 | ts-node: '>=9.0.0'
2821 | peerDependenciesMeta:
2822 | postcss:
2823 | optional: true
2824 | ts-node:
2825 | optional: true
2826 | dependencies:
2827 | lilconfig: 2.1.0
2828 | postcss: 8.4.23
2829 | yaml: 2.2.2
2830 | dev: true
2831 |
2832 | /postcss-nested/6.0.1_postcss@8.4.23:
2833 | resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==}
2834 | engines: {node: '>=12.0'}
2835 | peerDependencies:
2836 | postcss: ^8.2.14
2837 | dependencies:
2838 | postcss: 8.4.23
2839 | postcss-selector-parser: 6.0.13
2840 | dev: true
2841 |
2842 | /postcss-selector-parser/6.0.13:
2843 | resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==}
2844 | engines: {node: '>=4'}
2845 | dependencies:
2846 | cssesc: 3.0.0
2847 | util-deprecate: 1.0.2
2848 | dev: true
2849 |
2850 | /postcss-value-parser/4.2.0:
2851 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
2852 | dev: true
2853 |
2854 | /postcss/8.4.14:
2855 | resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==}
2856 | engines: {node: ^10 || ^12 || >=14}
2857 | dependencies:
2858 | nanoid: 3.3.6
2859 | picocolors: 1.0.0
2860 | source-map-js: 1.0.2
2861 | dev: false
2862 |
2863 | /postcss/8.4.23:
2864 | resolution: {integrity: sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==}
2865 | engines: {node: ^10 || ^12 || >=14}
2866 | dependencies:
2867 | nanoid: 3.3.6
2868 | picocolors: 1.0.0
2869 | source-map-js: 1.0.2
2870 | dev: true
2871 |
2872 | /prelude-ls/1.2.1:
2873 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
2874 | engines: {node: '>= 0.8.0'}
2875 | dev: true
2876 |
2877 | /process-nextick-args/1.0.7:
2878 | resolution: {integrity: sha512-yN0WQmuCX63LP/TMvAg31nvT6m4vDqJEiiv2CAZqWOGNWutc9DfDk1NPYYmKUFmaVM2UwDowH4u5AHWYP/jxKw==}
2879 | dev: false
2880 |
2881 | /prop-types/15.8.1:
2882 | resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
2883 | dependencies:
2884 | loose-envify: 1.4.0
2885 | object-assign: 4.1.1
2886 | react-is: 16.13.1
2887 | dev: true
2888 |
2889 | /proxy-addr/2.0.7:
2890 | resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
2891 | engines: {node: '>= 0.10'}
2892 | dependencies:
2893 | forwarded: 0.2.0
2894 | ipaddr.js: 1.9.1
2895 | dev: false
2896 |
2897 | /psl/1.9.0:
2898 | resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==}
2899 | dev: false
2900 |
2901 | /punycode/2.3.0:
2902 | resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
2903 | engines: {node: '>=6'}
2904 |
2905 | /qs/4.0.0:
2906 | resolution: {integrity: sha512-8MPmJ83uBOPsQj5tQCv4g04/nTiY+d17yl9o3Bw73vC6XlEm2POIRRlOgWJ8i74bkGLII670cDJJZkgiZ2sIkg==}
2907 | dev: false
2908 |
2909 | /qs/6.11.0:
2910 | resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==}
2911 | engines: {node: '>=0.6'}
2912 | dependencies:
2913 | side-channel: 1.0.4
2914 | dev: false
2915 |
2916 | /querystringify/2.2.0:
2917 | resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==}
2918 | dev: false
2919 |
2920 | /queue-microtask/1.2.3:
2921 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
2922 | dev: true
2923 |
2924 | /range-parser/1.2.1:
2925 | resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
2926 | engines: {node: '>= 0.6'}
2927 | dev: false
2928 |
2929 | /raw-body/2.5.1:
2930 | resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==}
2931 | engines: {node: '>= 0.8'}
2932 | dependencies:
2933 | bytes: 3.1.2
2934 | http-errors: 2.0.0
2935 | iconv-lite: 0.4.24
2936 | unpipe: 1.0.0
2937 | dev: false
2938 |
2939 | /react-cookie/4.1.1_react@18.2.0:
2940 | resolution: {integrity: sha512-ffn7Y7G4bXiFbnE+dKhHhbP+b8I34mH9jqnm8Llhj89zF4nPxPutxHT1suUqMeCEhLDBI7InYwf1tpaSoK5w8A==}
2941 | peerDependencies:
2942 | react: '>= 16.3.0'
2943 | dependencies:
2944 | '@types/hoist-non-react-statics': 3.3.1
2945 | hoist-non-react-statics: 3.3.2
2946 | react: 18.2.0
2947 | universal-cookie: 4.0.4
2948 | dev: false
2949 |
2950 | /react-dom/18.2.0_react@18.2.0:
2951 | resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
2952 | peerDependencies:
2953 | react: ^18.2.0
2954 | dependencies:
2955 | loose-envify: 1.4.0
2956 | react: 18.2.0
2957 | scheduler: 0.23.0
2958 | dev: false
2959 |
2960 | /react-is/16.13.1:
2961 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
2962 |
2963 | /react-wrap-balancer/0.1.5_react@18.2.0:
2964 | resolution: {integrity: sha512-2gB/xQEgG4XR0F4W7FUkALhyeXkLR5Ly9CfqFNDb/1FfGTNVn3U458+r4D+pGsEMsVvnUtFsG7S0IihyWKGuYA==}
2965 | peerDependencies:
2966 | react: ^18.0.0
2967 | dependencies:
2968 | react: 18.2.0
2969 | dev: false
2970 |
2971 | /react/18.2.0:
2972 | resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
2973 | engines: {node: '>=0.10.0'}
2974 | dependencies:
2975 | loose-envify: 1.4.0
2976 | dev: false
2977 |
2978 | /read-cache/1.0.0:
2979 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
2980 | dependencies:
2981 | pify: 2.3.0
2982 | dev: true
2983 |
2984 | /readable-stream/1.1.14:
2985 | resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==}
2986 | dependencies:
2987 | core-util-is: 1.0.3
2988 | inherits: 2.0.4
2989 | isarray: 0.0.1
2990 | string_decoder: 0.10.31
2991 | dev: false
2992 |
2993 | /readable-stream/2.0.6:
2994 | resolution: {integrity: sha512-TXcFfb63BQe1+ySzsHZI/5v1aJPCShfqvWJ64ayNImXMsN1Cd0YGk/wm8KB7/OeessgPc9QvS9Zou8QTkFzsLw==}
2995 | dependencies:
2996 | core-util-is: 1.0.3
2997 | inherits: 2.0.4
2998 | isarray: 1.0.0
2999 | process-nextick-args: 1.0.7
3000 | string_decoder: 0.10.31
3001 | util-deprecate: 1.0.2
3002 | dev: false
3003 |
3004 | /readdirp/3.6.0:
3005 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
3006 | engines: {node: '>=8.10.0'}
3007 | dependencies:
3008 | picomatch: 2.3.1
3009 | dev: true
3010 |
3011 | /regenerator-runtime/0.13.11:
3012 | resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
3013 | dev: true
3014 |
3015 | /regexp.prototype.flags/1.5.0:
3016 | resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==}
3017 | engines: {node: '>= 0.4'}
3018 | dependencies:
3019 | call-bind: 1.0.2
3020 | define-properties: 1.2.0
3021 | functions-have-names: 1.2.3
3022 | dev: true
3023 |
3024 | /request/2.61.0:
3025 | resolution: {integrity: sha512-VzuqfRVF3Fy53F+dgzN3yf1S2P+Jf5CygTa5CSCn5UYfZgeRK7GgshyKEKjCs1fOAFLFVaBkVJSSb+yh9vTsKw==}
3026 | engines: {node: '>=0.8.0'}
3027 | deprecated: request has been deprecated, see https://github.com/request/request/issues/3142
3028 | dependencies:
3029 | aws-sign2: 0.5.0
3030 | bl: 1.0.3
3031 | caseless: 0.11.0
3032 | combined-stream: 1.0.8
3033 | extend: 3.0.2
3034 | forever-agent: 0.6.1
3035 | form-data: 1.0.1
3036 | har-validator: 1.8.0
3037 | hawk: 3.1.3
3038 | http-signature: 0.11.0
3039 | isstream: 0.1.2
3040 | json-stringify-safe: 5.0.1
3041 | mime-types: 2.1.35
3042 | node-uuid: 1.4.8
3043 | oauth-sign: 0.8.2
3044 | qs: 4.0.0
3045 | stringstream: 0.0.6
3046 | tough-cookie: 4.1.2
3047 | tunnel-agent: 0.4.3
3048 | dev: false
3049 |
3050 | /requires-port/1.0.0:
3051 | resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
3052 | dev: false
3053 |
3054 | /resolve-from/4.0.0:
3055 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
3056 | engines: {node: '>=4'}
3057 | dev: true
3058 |
3059 | /resolve/1.22.2:
3060 | resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==}
3061 | hasBin: true
3062 | dependencies:
3063 | is-core-module: 2.12.1
3064 | path-parse: 1.0.7
3065 | supports-preserve-symlinks-flag: 1.0.0
3066 | dev: true
3067 |
3068 | /resolve/2.0.0-next.4:
3069 | resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==}
3070 | hasBin: true
3071 | dependencies:
3072 | is-core-module: 2.12.1
3073 | path-parse: 1.0.7
3074 | supports-preserve-symlinks-flag: 1.0.0
3075 | dev: true
3076 |
3077 | /reusify/1.0.4:
3078 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
3079 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
3080 | dev: true
3081 |
3082 | /rimraf/3.0.2:
3083 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
3084 | hasBin: true
3085 | dependencies:
3086 | glob: 7.2.3
3087 | dev: true
3088 |
3089 | /run-parallel/1.2.0:
3090 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
3091 | dependencies:
3092 | queue-microtask: 1.2.3
3093 | dev: true
3094 |
3095 | /safe-buffer/5.2.1:
3096 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
3097 | dev: false
3098 |
3099 | /safe-regex-test/1.0.0:
3100 | resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==}
3101 | dependencies:
3102 | call-bind: 1.0.2
3103 | get-intrinsic: 1.2.1
3104 | is-regex: 1.1.4
3105 | dev: true
3106 |
3107 | /safer-buffer/2.1.2:
3108 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
3109 | dev: false
3110 |
3111 | /scheduler/0.23.0:
3112 | resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
3113 | dependencies:
3114 | loose-envify: 1.4.0
3115 | dev: false
3116 |
3117 | /semver/6.3.0:
3118 | resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==}
3119 | hasBin: true
3120 | dev: true
3121 |
3122 | /semver/7.5.1:
3123 | resolution: {integrity: sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==}
3124 | engines: {node: '>=10'}
3125 | hasBin: true
3126 | dependencies:
3127 | lru-cache: 6.0.0
3128 | dev: true
3129 |
3130 | /send/0.18.0:
3131 | resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==}
3132 | engines: {node: '>= 0.8.0'}
3133 | dependencies:
3134 | debug: 2.6.9
3135 | depd: 2.0.0
3136 | destroy: 1.2.0
3137 | encodeurl: 1.0.2
3138 | escape-html: 1.0.3
3139 | etag: 1.8.1
3140 | fresh: 0.5.2
3141 | http-errors: 2.0.0
3142 | mime: 1.6.0
3143 | ms: 2.1.3
3144 | on-finished: 2.4.1
3145 | range-parser: 1.2.1
3146 | statuses: 2.0.1
3147 | transitivePeerDependencies:
3148 | - supports-color
3149 | dev: false
3150 |
3151 | /serve-static/1.15.0:
3152 | resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==}
3153 | engines: {node: '>= 0.8.0'}
3154 | dependencies:
3155 | encodeurl: 1.0.2
3156 | escape-html: 1.0.3
3157 | parseurl: 1.3.3
3158 | send: 0.18.0
3159 | transitivePeerDependencies:
3160 | - supports-color
3161 | dev: false
3162 |
3163 | /setprototypeof/1.2.0:
3164 | resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
3165 | dev: false
3166 |
3167 | /shebang-command/2.0.0:
3168 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
3169 | engines: {node: '>=8'}
3170 | dependencies:
3171 | shebang-regex: 3.0.0
3172 |
3173 | /shebang-regex/3.0.0:
3174 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
3175 | engines: {node: '>=8'}
3176 |
3177 | /side-channel/1.0.4:
3178 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
3179 | dependencies:
3180 | call-bind: 1.0.2
3181 | get-intrinsic: 1.2.1
3182 | object-inspect: 1.12.3
3183 |
3184 | /slash/3.0.0:
3185 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
3186 | engines: {node: '>=8'}
3187 | dev: true
3188 |
3189 | /sntp/1.0.9:
3190 | resolution: {integrity: sha512-7bgVOAnPj3XjrKY577S+puCKGCRlUrcrEdsMeRXlg9Ghf5df/xNi6sONUa43WrHUd3TjJBF7O04jYoiY0FVa0A==}
3191 | engines: {node: '>=0.8.0'}
3192 | deprecated: This module moved to @hapi/sntp. Please make sure to switch over as this distribution is no longer supported and may contain bugs and critical security issues.
3193 | dependencies:
3194 | hoek: 2.16.3
3195 | dev: false
3196 |
3197 | /source-map-js/1.0.2:
3198 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
3199 | engines: {node: '>=0.10.0'}
3200 |
3201 | /statuses/2.0.1:
3202 | resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
3203 | engines: {node: '>= 0.8'}
3204 | dev: false
3205 |
3206 | /stop-iteration-iterator/1.0.0:
3207 | resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==}
3208 | engines: {node: '>= 0.4'}
3209 | dependencies:
3210 | internal-slot: 1.0.5
3211 | dev: true
3212 |
3213 | /streamsearch/1.1.0:
3214 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
3215 | engines: {node: '>=10.0.0'}
3216 | dev: false
3217 |
3218 | /string.prototype.matchall/4.0.8:
3219 | resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==}
3220 | dependencies:
3221 | call-bind: 1.0.2
3222 | define-properties: 1.2.0
3223 | es-abstract: 1.21.2
3224 | get-intrinsic: 1.2.1
3225 | has-symbols: 1.0.3
3226 | internal-slot: 1.0.5
3227 | regexp.prototype.flags: 1.5.0
3228 | side-channel: 1.0.4
3229 | dev: true
3230 |
3231 | /string.prototype.trim/1.2.7:
3232 | resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==}
3233 | engines: {node: '>= 0.4'}
3234 | dependencies:
3235 | call-bind: 1.0.2
3236 | define-properties: 1.2.0
3237 | es-abstract: 1.21.2
3238 | dev: true
3239 |
3240 | /string.prototype.trimend/1.0.6:
3241 | resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==}
3242 | dependencies:
3243 | call-bind: 1.0.2
3244 | define-properties: 1.2.0
3245 | es-abstract: 1.21.2
3246 | dev: true
3247 |
3248 | /string.prototype.trimstart/1.0.6:
3249 | resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==}
3250 | dependencies:
3251 | call-bind: 1.0.2
3252 | define-properties: 1.2.0
3253 | es-abstract: 1.21.2
3254 | dev: true
3255 |
3256 | /string_decoder/0.10.31:
3257 | resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==}
3258 | dev: false
3259 |
3260 | /stringstream/0.0.6:
3261 | resolution: {integrity: sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==}
3262 | dev: false
3263 |
3264 | /strip-ansi/3.0.1:
3265 | resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==}
3266 | engines: {node: '>=0.10.0'}
3267 | dependencies:
3268 | ansi-regex: 2.1.1
3269 | dev: false
3270 |
3271 | /strip-ansi/6.0.1:
3272 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
3273 | engines: {node: '>=8'}
3274 | dependencies:
3275 | ansi-regex: 5.0.1
3276 | dev: true
3277 |
3278 | /strip-bom/3.0.0:
3279 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
3280 | engines: {node: '>=4'}
3281 | dev: true
3282 |
3283 | /strip-json-comments/3.1.1:
3284 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
3285 | engines: {node: '>=8'}
3286 | dev: true
3287 |
3288 | /styled-jsx/5.1.1_react@18.2.0:
3289 | resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==}
3290 | engines: {node: '>= 12.0.0'}
3291 | peerDependencies:
3292 | '@babel/core': '*'
3293 | babel-plugin-macros: '*'
3294 | react: '>= 16.8.0 || 17.x.x || ^18.0.0-0'
3295 | peerDependenciesMeta:
3296 | '@babel/core':
3297 | optional: true
3298 | babel-plugin-macros:
3299 | optional: true
3300 | dependencies:
3301 | client-only: 0.0.1
3302 | react: 18.2.0
3303 | dev: false
3304 |
3305 | /sucrase/3.32.0:
3306 | resolution: {integrity: sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==}
3307 | engines: {node: '>=8'}
3308 | hasBin: true
3309 | dependencies:
3310 | '@jridgewell/gen-mapping': 0.3.3
3311 | commander: 4.1.1
3312 | glob: 7.1.6
3313 | lines-and-columns: 1.2.4
3314 | mz: 2.7.0
3315 | pirates: 4.0.5
3316 | ts-interface-checker: 0.1.13
3317 | dev: true
3318 |
3319 | /sugar-high/0.4.6:
3320 | resolution: {integrity: sha512-V/5BlmDTQ0YCD6o+xumBpOBP8CWDqVDA8Pt7W/i8QzkwFnYwBxX9T4a8XRmay7ulnnCj/5rX3f845tbkXU1lIw==}
3321 | dev: false
3322 |
3323 | /supports-color/2.0.0:
3324 | resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==}
3325 | engines: {node: '>=0.8.0'}
3326 | dev: false
3327 |
3328 | /supports-color/7.2.0:
3329 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
3330 | engines: {node: '>=8'}
3331 | dependencies:
3332 | has-flag: 4.0.0
3333 | dev: true
3334 |
3335 | /supports-preserve-symlinks-flag/1.0.0:
3336 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
3337 | engines: {node: '>= 0.4'}
3338 | dev: true
3339 |
3340 | /tailwindcss/3.3.2:
3341 | resolution: {integrity: sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==}
3342 | engines: {node: '>=14.0.0'}
3343 | hasBin: true
3344 | dependencies:
3345 | '@alloc/quick-lru': 5.2.0
3346 | arg: 5.0.2
3347 | chokidar: 3.5.3
3348 | didyoumean: 1.2.2
3349 | dlv: 1.1.3
3350 | fast-glob: 3.2.12
3351 | glob-parent: 6.0.2
3352 | is-glob: 4.0.3
3353 | jiti: 1.18.2
3354 | lilconfig: 2.1.0
3355 | micromatch: 4.0.5
3356 | normalize-path: 3.0.0
3357 | object-hash: 3.0.0
3358 | picocolors: 1.0.0
3359 | postcss: 8.4.23
3360 | postcss-import: 15.1.0_postcss@8.4.23
3361 | postcss-js: 4.0.1_postcss@8.4.23
3362 | postcss-load-config: 4.0.1_postcss@8.4.23
3363 | postcss-nested: 6.0.1_postcss@8.4.23
3364 | postcss-selector-parser: 6.0.13
3365 | postcss-value-parser: 4.2.0
3366 | resolve: 1.22.2
3367 | sucrase: 3.32.0
3368 | transitivePeerDependencies:
3369 | - ts-node
3370 | dev: true
3371 |
3372 | /text-table/0.2.0:
3373 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
3374 | dev: true
3375 |
3376 | /thenify-all/1.6.0:
3377 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
3378 | engines: {node: '>=0.8'}
3379 | dependencies:
3380 | thenify: 3.3.1
3381 | dev: true
3382 |
3383 | /thenify/3.3.1:
3384 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
3385 | dependencies:
3386 | any-promise: 1.3.0
3387 | dev: true
3388 |
3389 | /to-regex-range/5.0.1:
3390 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
3391 | engines: {node: '>=8.0'}
3392 | dependencies:
3393 | is-number: 7.0.0
3394 | dev: true
3395 |
3396 | /toidentifier/1.0.1:
3397 | resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
3398 | engines: {node: '>=0.6'}
3399 | dev: false
3400 |
3401 | /tough-cookie/4.1.2:
3402 | resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==}
3403 | engines: {node: '>=6'}
3404 | dependencies:
3405 | psl: 1.9.0
3406 | punycode: 2.3.0
3407 | universalify: 0.2.0
3408 | url-parse: 1.5.10
3409 | dev: false
3410 |
3411 | /tr46/0.0.3:
3412 | resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
3413 | dev: false
3414 |
3415 | /trough/1.0.5:
3416 | resolution: {integrity: sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==}
3417 | dev: false
3418 |
3419 | /ts-interface-checker/0.1.13:
3420 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
3421 | dev: true
3422 |
3423 | /tsconfig-paths/3.14.2:
3424 | resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==}
3425 | dependencies:
3426 | '@types/json5': 0.0.29
3427 | json5: 1.0.2
3428 | minimist: 1.2.8
3429 | strip-bom: 3.0.0
3430 | dev: true
3431 |
3432 | /tslib/1.14.1:
3433 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
3434 | dev: true
3435 |
3436 | /tslib/2.5.2:
3437 | resolution: {integrity: sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==}
3438 | dev: false
3439 |
3440 | /tsutils/3.21.0_typescript@4.9.5:
3441 | resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
3442 | engines: {node: '>= 6'}
3443 | peerDependencies:
3444 | typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
3445 | dependencies:
3446 | tslib: 1.14.1
3447 | typescript: 4.9.5
3448 | dev: true
3449 |
3450 | /tunnel-agent/0.4.3:
3451 | resolution: {integrity: sha512-e0IoVDWx8SDHc/hwFTqJDQ7CCDTEeGhmcT9jkWJjoGQSpgBz20nAMr80E3Tpk7PatJ1b37DQDgJR3CNSzcMOZQ==}
3452 | dev: false
3453 |
3454 | /turbo-darwin-64/1.9.8:
3455 | resolution: {integrity: sha512-PkTdBjPfgpj/Dob/6SjkzP0BBP80/KmFjLEocXVEECCLJE6tHKbWLRdvc79B0N6SufdYdZ1uvvoU3KPtBokSPw==}
3456 | cpu: [x64]
3457 | os: [darwin]
3458 | requiresBuild: true
3459 | dev: true
3460 | optional: true
3461 |
3462 | /turbo-darwin-arm64/1.9.8:
3463 | resolution: {integrity: sha512-sLwqOx3XV57QCEoJM9GnDDnnqidG8wf29ytxssBaWHBdeJTjupyrmzTUrX+tyKo3Q+CjWvbPLyqVqxT4g5NuXQ==}
3464 | cpu: [arm64]
3465 | os: [darwin]
3466 | requiresBuild: true
3467 | dev: true
3468 | optional: true
3469 |
3470 | /turbo-linux-64/1.9.8:
3471 | resolution: {integrity: sha512-AMg6VT6sW7aOD1uOs5suxglXfTYz9T0uVyKGKokDweGOYTWmuTMGU5afUT1tYRUwQ+kVPJI+83Atl5Ob0oBsgw==}
3472 | cpu: [x64]
3473 | os: [linux]
3474 | requiresBuild: true
3475 | dev: true
3476 | optional: true
3477 |
3478 | /turbo-linux-arm64/1.9.8:
3479 | resolution: {integrity: sha512-tLnxFv+OIklwTjiOZ8XMeEeRDAf150Ry4BCivNwgTVFAqQGEqkFP6KGBy56hb5RRF1frPQpoPGipJNVm7c8m1w==}
3480 | cpu: [arm64]
3481 | os: [linux]
3482 | requiresBuild: true
3483 | dev: true
3484 | optional: true
3485 |
3486 | /turbo-windows-64/1.9.8:
3487 | resolution: {integrity: sha512-r3pCjvXTMR7kq2E3iqwFlN1R7pFO/TOsuUjMhOSPP7HwuuUIinAckU4I9foM3q7ZCQd1XXScBUt3niDyHijAqQ==}
3488 | cpu: [x64]
3489 | os: [win32]
3490 | requiresBuild: true
3491 | dev: true
3492 | optional: true
3493 |
3494 | /turbo-windows-arm64/1.9.8:
3495 | resolution: {integrity: sha512-CWzRbX2TM5IfHBC6uWM659qUOEDC4h0nn16ocG8yIq1IF3uZMzKRBHgGOT5m1BHom+R08V0NcjTmPRoqpiI0dg==}
3496 | cpu: [arm64]
3497 | os: [win32]
3498 | requiresBuild: true
3499 | dev: true
3500 | optional: true
3501 |
3502 | /turbo/1.9.8:
3503 | resolution: {integrity: sha512-dTouGZBm4a2fE0OPafcTQERCp4i3ZOow0Pr0JlOyxKmzJy0JRwXypH013kbZoK6k1ET5tS/g9rwUXIM/AmWXXQ==}
3504 | hasBin: true
3505 | requiresBuild: true
3506 | optionalDependencies:
3507 | turbo-darwin-64: 1.9.8
3508 | turbo-darwin-arm64: 1.9.8
3509 | turbo-linux-64: 1.9.8
3510 | turbo-linux-arm64: 1.9.8
3511 | turbo-windows-64: 1.9.8
3512 | turbo-windows-arm64: 1.9.8
3513 | dev: true
3514 |
3515 | /type-check/0.4.0:
3516 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
3517 | engines: {node: '>= 0.8.0'}
3518 | dependencies:
3519 | prelude-ls: 1.2.1
3520 | dev: true
3521 |
3522 | /type-fest/0.20.2:
3523 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
3524 | engines: {node: '>=10'}
3525 | dev: true
3526 |
3527 | /type-is/1.6.18:
3528 | resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
3529 | engines: {node: '>= 0.6'}
3530 | dependencies:
3531 | media-typer: 0.3.0
3532 | mime-types: 2.1.35
3533 | dev: false
3534 |
3535 | /typed-array-length/1.0.4:
3536 | resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==}
3537 | dependencies:
3538 | call-bind: 1.0.2
3539 | for-each: 0.3.3
3540 | is-typed-array: 1.1.10
3541 | dev: true
3542 |
3543 | /typescript/4.9.5:
3544 | resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
3545 | engines: {node: '>=4.2.0'}
3546 | hasBin: true
3547 | dev: true
3548 |
3549 | /unbox-primitive/1.0.2:
3550 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
3551 | dependencies:
3552 | call-bind: 1.0.2
3553 | has-bigints: 1.0.2
3554 | has-symbols: 1.0.3
3555 | which-boxed-primitive: 1.0.2
3556 | dev: true
3557 |
3558 | /unified/8.4.2:
3559 | resolution: {integrity: sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA==}
3560 | dependencies:
3561 | '@types/unist': 2.0.6
3562 | bail: 1.0.5
3563 | extend: 3.0.2
3564 | is-plain-obj: 2.1.0
3565 | trough: 1.0.5
3566 | vfile: 4.2.1
3567 | dev: false
3568 |
3569 | /unist-util-stringify-position/2.0.3:
3570 | resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==}
3571 | dependencies:
3572 | '@types/unist': 2.0.6
3573 | dev: false
3574 |
3575 | /universal-cookie/4.0.4:
3576 | resolution: {integrity: sha512-lbRVHoOMtItjWbM7TwDLdl8wug7izB0tq3/YVKhT/ahB4VDvWMyvnADfnJI8y6fSvsjh51Ix7lTGC6Tn4rMPhw==}
3577 | dependencies:
3578 | '@types/cookie': 0.3.3
3579 | cookie: 0.4.2
3580 | dev: false
3581 |
3582 | /universalify/0.2.0:
3583 | resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==}
3584 | engines: {node: '>= 4.0.0'}
3585 | dev: false
3586 |
3587 | /unpipe/1.0.0:
3588 | resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
3589 | engines: {node: '>= 0.8'}
3590 | dev: false
3591 |
3592 | /update-browserslist-db/1.0.11_browserslist@4.21.5:
3593 | resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==}
3594 | hasBin: true
3595 | peerDependencies:
3596 | browserslist: '>= 4.21.0'
3597 | dependencies:
3598 | browserslist: 4.21.5
3599 | escalade: 3.1.1
3600 | picocolors: 1.0.0
3601 | dev: true
3602 |
3603 | /uri-js/4.4.1:
3604 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
3605 | dependencies:
3606 | punycode: 2.3.0
3607 | dev: true
3608 |
3609 | /url-parse/1.5.10:
3610 | resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==}
3611 | dependencies:
3612 | querystringify: 2.2.0
3613 | requires-port: 1.0.0
3614 | dev: false
3615 |
3616 | /util-deprecate/1.0.2:
3617 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
3618 |
3619 | /utils-merge/1.0.1:
3620 | resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
3621 | engines: {node: '>= 0.4.0'}
3622 | dev: false
3623 |
3624 | /vary/1.1.2:
3625 | resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
3626 | engines: {node: '>= 0.8'}
3627 | dev: false
3628 |
3629 | /vfile-message/2.0.4:
3630 | resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==}
3631 | dependencies:
3632 | '@types/unist': 2.0.6
3633 | unist-util-stringify-position: 2.0.3
3634 | dev: false
3635 |
3636 | /vfile/4.2.1:
3637 | resolution: {integrity: sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==}
3638 | dependencies:
3639 | '@types/unist': 2.0.6
3640 | is-buffer: 2.0.5
3641 | unist-util-stringify-position: 2.0.3
3642 | vfile-message: 2.0.4
3643 | dev: false
3644 |
3645 | /webidl-conversions/3.0.1:
3646 | resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
3647 | dev: false
3648 |
3649 | /whacko/0.19.1:
3650 | resolution: {integrity: sha512-OnO3ZX6wIC21GASyIl6ZcVYhu+BaIcaGNtads+O9U/gFqQ4dkUrpauAb3WMSWFK+2qzDfxEXnOxBqQnS1/NrXQ==}
3651 | engines: {node: '>= 0.6'}
3652 | dependencies:
3653 | css-select: 1.2.0
3654 | domutils: 1.5.1
3655 | lodash: 3.10.1
3656 | parse5: 1.5.1
3657 | dev: false
3658 |
3659 | /whatwg-url/5.0.0:
3660 | resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
3661 | dependencies:
3662 | tr46: 0.0.3
3663 | webidl-conversions: 3.0.1
3664 | dev: false
3665 |
3666 | /which-boxed-primitive/1.0.2:
3667 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
3668 | dependencies:
3669 | is-bigint: 1.0.4
3670 | is-boolean-object: 1.1.2
3671 | is-number-object: 1.0.7
3672 | is-string: 1.0.7
3673 | is-symbol: 1.0.4
3674 | dev: true
3675 |
3676 | /which-collection/1.0.1:
3677 | resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==}
3678 | dependencies:
3679 | is-map: 2.0.2
3680 | is-set: 2.0.2
3681 | is-weakmap: 2.0.1
3682 | is-weakset: 2.0.2
3683 | dev: true
3684 |
3685 | /which-typed-array/1.1.9:
3686 | resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==}
3687 | engines: {node: '>= 0.4'}
3688 | dependencies:
3689 | available-typed-arrays: 1.0.5
3690 | call-bind: 1.0.2
3691 | for-each: 0.3.3
3692 | gopd: 1.0.1
3693 | has-tostringtag: 1.0.0
3694 | is-typed-array: 1.1.10
3695 | dev: true
3696 |
3697 | /which/2.0.2:
3698 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
3699 | engines: {node: '>= 8'}
3700 | hasBin: true
3701 | dependencies:
3702 | isexe: 2.0.0
3703 |
3704 | /word-wrap/1.2.3:
3705 | resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==}
3706 | engines: {node: '>=0.10.0'}
3707 | dev: true
3708 |
3709 | /wrappy/1.0.2:
3710 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
3711 | dev: true
3712 |
3713 | /xtend/4.0.2:
3714 | resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
3715 | engines: {node: '>=0.4'}
3716 | dev: false
3717 |
3718 | /yallist/4.0.0:
3719 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
3720 | dev: true
3721 |
3722 | /yaml/2.2.2:
3723 | resolution: {integrity: sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==}
3724 | engines: {node: '>= 14'}
3725 | dev: true
3726 |
3727 | /yocto-queue/0.1.0:
3728 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
3729 | engines: {node: '>=10'}
3730 | dev: true
3731 |
3732 | /zod/3.21.4:
3733 | resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==}
3734 | dev: false
3735 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | // If you want to use other PostCSS plugins, see the following:
2 | // https://tailwindcss.com/docs/using-with-preprocessors
3 | module.exports = {
4 | plugins: {
5 | tailwindcss: {},
6 | autoprefixer: {},
7 | },
8 | }
9 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pinecone-io/vercel-chatbot-template/b59a3dbf73c656bfc8bfa20c379e3acf84c8dd0e/public/favicon.ico
--------------------------------------------------------------------------------
/seed/crawler.ts:
--------------------------------------------------------------------------------
1 | import cheerio from 'cheerio';
2 |
3 | import { NodeHtmlMarkdown, NodeHtmlMarkdownOptions } from 'node-html-markdown'
4 |
5 | interface QueueItem {
6 | url: string;
7 | depth: number;
8 | }
9 |
10 | interface Page {
11 | url: string;
12 | content: string;
13 | }
14 |
15 | class Crawler {
16 | private queue: QueueItem[] = [];
17 | private seen: Set = new Set();
18 | private maxDepth: number;
19 | private maxPages: number;
20 | public pages: Page[] = [];
21 |
22 | constructor(maxDepth: number = 2, maxPages: number = 1) {
23 | this.maxDepth = maxDepth;
24 | this.maxPages = maxPages;
25 | }
26 |
27 | async crawl(startUrl: string): Promise {
28 | this.queue.push({ url: startUrl, depth: 0 });
29 |
30 | while (this.queue.length > 0 && this.pages.length < this.maxPages) {
31 | const { url, depth } = this.queue.shift() as QueueItem;
32 | console.log(url, depth)
33 | if (depth > this.maxDepth) continue;
34 |
35 | if (this.seen.has(url)) continue;
36 |
37 | this.seen.add(url);
38 |
39 | const html = await this.fetchPage(url);
40 | const text = NodeHtmlMarkdown.translate(html)
41 | // console.log("TEXT", text)
42 | this.pages.push({ url, content: text });
43 |
44 | const newUrls = this.extractUrls(html, url);
45 |
46 | this.queue.push(...newUrls.map(newUrl => ({ url: newUrl, depth: depth + 1 })));
47 | }
48 | return this.pages;
49 | }
50 |
51 | private async fetchPage(url: string): Promise {
52 | try {
53 | const response = await fetch(url);
54 | return await response.text();
55 | } catch (error) {
56 | // @ts-ignore
57 | console.error(`Failed to fetch ${url}: ${error.message}`);
58 | return '';
59 | }
60 | }
61 |
62 | private extractUrls(html: string, baseUrl: string): string[] {
63 | const $ = cheerio.load(html);
64 | const relativeUrls = $('a').map((i, link) => $(link).attr('href')).get() as string[];
65 | return relativeUrls.map(relativeUrl => new URL(relativeUrl, baseUrl).href);
66 | }
67 | }
68 |
69 | export { Crawler };
70 | export type { Page };
71 |
--------------------------------------------------------------------------------
/seed/seed.ts:
--------------------------------------------------------------------------------
1 | import { NextApiRequest, NextApiResponse } from "next";
2 | import { PineconeClient, Vector } from "@pinecone-database/pinecone";
3 | import { Crawler, Page } from './crawler'
4 |
5 | import { summarizeLongDocument } from "./summarizer";
6 | import { RecursiveCharacterTextSplitter, Document } from "../utils/TextSplitter";
7 | import { OpenAIEmbedding } from "../utils/OpenAIEmbedding";
8 | import { chunkedUpsert, createIndexIfNotExists } from "../pages/api/pinecone";
9 |
10 |
11 |
12 | let pinecone: PineconeClient | null = null
13 |
14 | const initPineconeClient = async () => {
15 | pinecone = new PineconeClient();
16 | console.log("init pinecone")
17 | await pinecone.init({
18 | environment: process.env.PINECONE_ENVIRONMENT!,
19 | apiKey: process.env.PINECONE_API_KEY!,
20 | });
21 | }
22 |
23 |
24 | // The TextEncoder instance enc is created and its encode() method is called on the input string.
25 | // The resulting Uint8Array is then sliced, and the TextDecoder instance decodes the sliced array in a single line of code.
26 | const truncateStringByBytes = (str: string, bytes: number) => {
27 | const enc = new TextEncoder();
28 | return new TextDecoder("utf-8").decode(enc.encode(str).slice(0, bytes));
29 | };
30 |
31 | export default async function seed(url: string, limit: number, indexName: string, summarize: boolean) {
32 |
33 | const crawlLimit = limit || 100;
34 | const pineconeIndexName = indexName as string
35 | const shouldSummarize = summarize === true
36 |
37 | if (!pinecone) {
38 | await initPineconeClient();
39 | }
40 |
41 | await createIndexIfNotExists(pinecone!, pineconeIndexName, 1536)
42 |
43 | const crawler = new Crawler(1, crawlLimit)
44 | const pages = await crawler.crawl(url) as Page[]
45 |
46 | const documents = await Promise.all(pages.map(async row => {
47 |
48 | const splitter = new RecursiveCharacterTextSplitter({
49 | chunkSize: 256,
50 | chunkOverlap: 10
51 | })
52 | const pageContent = shouldSummarize ? await summarizeLongDocument({ document: row.content }) : row.content
53 |
54 | const docs = await splitter.splitDocuments([
55 | new Document({ pageContent, metadata: { url: row.url, text: truncateStringByBytes(pageContent, 36000) } }),
56 | ]);
57 |
58 | return docs
59 | }))
60 |
61 | const index = pinecone && pinecone.Index(pineconeIndexName);
62 |
63 |
64 | let counter = 0
65 |
66 | //Embed the documents
67 | const getEmbedding = async (doc: Document) => {
68 | const embedding = await OpenAIEmbedding(doc.pageContent)
69 | counter = counter + 1
70 | return {
71 | id: crypto.randomUUID(),
72 | values: embedding,
73 | metadata: {
74 | chunk: doc.pageContent,
75 | text: doc.metadata.text as string,
76 | url: doc.metadata.url as string,
77 | }
78 | } as Vector
79 | }
80 |
81 | console.log("done embedding");
82 |
83 | let vectors = [] as Vector[]
84 |
85 | try {
86 | vectors = await Promise.all(documents.flat().map((doc) => getEmbedding(doc))) as unknown as Vector[]
87 | try {
88 | await chunkedUpsert(index!, vectors, 'documents', 10)
89 | console.log("done upserting")
90 | } catch (e) {
91 | console.log(e)
92 | console.error({ message: `Error ${JSON.stringify(e)}` })
93 | }
94 | } catch (e) {
95 | console.log(e)
96 | }
97 | }
--------------------------------------------------------------------------------
/seed/summarizer.ts:
--------------------------------------------------------------------------------
1 | import { OpenAICompletion } from "../utils/OpenAICompletion";
2 |
3 |
4 | const chunkSubstr = (str: string, size: number) => {
5 | const numChunks = Math.ceil(str.length / size)
6 | const chunks = new Array(numChunks)
7 |
8 | for (let i = 0, o = 0; i < numChunks; ++i, o += size) {
9 | chunks[i] = str.substr(o, size)
10 | }
11 |
12 | return chunks
13 | }
14 |
15 | const summarize = async ({ document, inquiry, onSummaryDone }: { document: string, inquiry?: string, onSummaryDone?: Function }) => {
16 | console.log("summarizing ", document.length)
17 |
18 | const payload = `Summarize the following document so that it satisfies on the inquiry below:
19 | INQUIRY: ${inquiry}
20 | DOCUMENT: ${document}
21 | `
22 | try {
23 | const result = await OpenAICompletion(payload)
24 | onSummaryDone && onSummaryDone(result.text)
25 | return result
26 | } catch (e) {
27 | console.log(e)
28 | }
29 | }
30 |
31 | const summarizeLongDocument = async ({ document, inquiry, onSummaryDone }: { document: string, inquiry?: string, onSummaryDone?: Function }): Promise => {
32 | // Chunk document into 4000 character chunks
33 |
34 | try {
35 | if ((document.length) > 4000) {
36 | console.log("document is long and has to be shortened", document.length)
37 | const chunks = chunkSubstr(document, 4000)
38 | let summarizedChunks: string[] = []
39 | summarizedChunks = await Promise.all(
40 | chunks.map(async (chunk) => {
41 | let result
42 | if (inquiry) {
43 | result = await summarize({ document: chunk, inquiry, onSummaryDone })
44 | } else {
45 | result = await summarize({ document: chunk, onSummaryDone })
46 | }
47 | return result
48 | })
49 | )
50 |
51 | const result = summarizedChunks.join("\n");
52 | console.log(result.length)
53 |
54 | if (result.length > 4000) {
55 | console.log("document is STILL long and has to be shortened further")
56 | return await summarizeLongDocument({ document: result, inquiry, onSummaryDone })
57 | } else {
58 | console.log("done")
59 | return result
60 | }
61 |
62 | } else {
63 | return document
64 | }
65 | } catch (e) {
66 | throw new Error(e as string)
67 | }
68 | }
69 |
70 | export { summarizeLongDocument }
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: [require('@vercel/examples-ui/tailwind')],
3 | content: [
4 | './pages/**/*.{js,ts,jsx,tsx}',
5 | './components/**/*.{js,ts,jsx,tsx}',
6 | './node_modules/@vercel/examples-ui/**/*.js',
7 | ],
8 | }
9 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "lib": ["dom", "dom.iterable", "esnext"],
5 | "allowJs": true,
6 | "skipLibCheck": true,
7 | "strict": true,
8 | "forceConsistentCasingInFileNames": true,
9 | "noEmit": true,
10 | "esModuleInterop": true,
11 | "module": "esnext",
12 | "moduleResolution": "node",
13 | "resolveJsonModule": true,
14 | "isolatedModules": true,
15 | "jsx": "preserve",
16 | "incremental": true
17 | },
18 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
19 | "exclude": ["node_modules"]
20 | }
21 |
--------------------------------------------------------------------------------
/turbo.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://turbo.build/schema.json",
3 | "pipeline": {
4 | "build": {
5 | "outputs": [".next/**", "!.next/cache/**"]
6 | },
7 | "lint": {}
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/utils/OpenAICompletion.ts:
--------------------------------------------------------------------------------
1 | export type ChatGPTAgent = 'user' | 'system' | 'assistant'
2 |
3 | export interface ChatGPTMessage {
4 | role: ChatGPTAgent
5 | content: string
6 | }
7 |
8 | export interface OpenAIPayload {
9 | model: string
10 | messages: ChatGPTMessage[]
11 | temperature: number
12 | top_p: number
13 | frequency_penalty: number
14 | presence_penalty: number
15 | max_tokens: number
16 | stream: boolean
17 | stop?: string[]
18 | user?: string
19 | n: number
20 | }
21 |
22 |
23 |
24 | export const OpenAICompletion = async (text: string) => {
25 | const payload: OpenAIPayload = {
26 | model: 'gpt-3.5-turbo',
27 | messages: [{
28 | role: 'system',
29 | content: text
30 | }],
31 | temperature: process.env.AI_TEMP ? parseFloat(process.env.AI_TEMP) : 0.7,
32 | max_tokens: process.env.AI_MAX_TOKENS
33 | ? parseInt(process.env.AI_MAX_TOKENS)
34 | : 100,
35 | top_p: 1,
36 | frequency_penalty: 0,
37 | presence_penalty: 0,
38 | stream: true,
39 | n: 1,
40 | }
41 |
42 | const requestHeaders: Record = {
43 | 'Content-Type': 'application/json',
44 | Authorization: `Bearer ${process.env.OPENAI_API_KEY ?? ''}`,
45 | }
46 |
47 | if (process.env.OPENAI_API_ORG) {
48 | requestHeaders['OpenAI-Organization'] = process.env.OPENAI_API_ORG
49 | }
50 |
51 | const res = await fetch('https://api.openai.com/v1/chat/completions', {
52 | headers: requestHeaders,
53 | method: 'POST',
54 | body: JSON.stringify(payload),
55 | })
56 |
57 | return res.json()
58 | }
--------------------------------------------------------------------------------
/utils/OpenAIEmbedding.ts:
--------------------------------------------------------------------------------
1 | export async function OpenAIEmbedding(input: string) {
2 | try {
3 | const response = await fetch("https://api.openai.com/v1/embeddings", {
4 | method: "POST",
5 | headers: {
6 | "Authorization": `Bearer ${process.env.OPENAI_API_KEY}`,
7 | "Content-Type": "application/json",
8 | },
9 | body: JSON.stringify({
10 | input,
11 | model: "text-embedding-ada-002",
12 | }),
13 | });
14 | const result = await response.json();
15 | return result.data[0].embedding as number[]
16 |
17 | } catch (e) {
18 | console.log("Error calling OpenAI embedding API: ", e);
19 | throw new Error(`Error calling OpenAI embedding API: ${e}`);
20 | }
21 | }
--------------------------------------------------------------------------------
/utils/OpenAIStream.ts:
--------------------------------------------------------------------------------
1 | import {
2 | createParser,
3 | ParsedEvent,
4 | ReconnectInterval,
5 | } from 'eventsource-parser'
6 |
7 | export type ChatGPTAgent = 'user' | 'system' | 'assistant'
8 |
9 | export interface ChatGPTMessage {
10 | role: ChatGPTAgent
11 | content: string
12 | }
13 |
14 | export interface OpenAIStreamPayload {
15 | model: string
16 | messages: ChatGPTMessage[]
17 | temperature: number
18 | top_p: number
19 | frequency_penalty: number
20 | presence_penalty: number
21 | max_tokens: number
22 | stream: boolean
23 | stop?: string[]
24 | user?: string
25 | n: number
26 | }
27 |
28 | export async function OpenAIStream(payload: OpenAIStreamPayload) {
29 | const encoder = new TextEncoder()
30 | const decoder = new TextDecoder()
31 |
32 | let counter = 0
33 |
34 | const requestHeaders: Record = {
35 | 'Content-Type': 'application/json',
36 | Authorization: `Bearer ${process.env.OPENAI_API_KEY ?? ''}`,
37 | }
38 |
39 | if (process.env.OPENAI_API_ORG) {
40 | requestHeaders['OpenAI-Organization'] = process.env.OPENAI_API_ORG
41 | }
42 |
43 | const res = await fetch('https://api.openai.com/v1/chat/completions', {
44 | headers: requestHeaders,
45 | method: 'POST',
46 | body: JSON.stringify(payload),
47 | })
48 |
49 | const stream = new ReadableStream({
50 | async start(controller) {
51 | // callback
52 | function onParse(event: ParsedEvent | ReconnectInterval) {
53 | if (event.type === 'event') {
54 | const data = event.data
55 | // https://beta.openai.com/docs/api-reference/completions/create#completions/create-stream
56 | if (data === '[DONE]') {
57 | console.log('DONE')
58 | controller.close()
59 | return
60 | }
61 | try {
62 | const json = JSON.parse(data)
63 | const text = json.choices[0].delta?.content || ''
64 | if (counter < 2 && (text.match(/\n/) || []).length) {
65 | // this is a prefix character (i.e., "\n\n"), do nothing
66 | return
67 | }
68 | const queue = encoder.encode(text)
69 | controller.enqueue(queue)
70 | counter++
71 | } catch (e) {
72 | // maybe parse error
73 | controller.error(e)
74 | }
75 | }
76 | }
77 |
78 | // stream response (SSE) from OpenAI may be fragmented into multiple chunks
79 | // this ensures we properly read chunks and invoke an event for each SSE event stream
80 | const parser = createParser(onParse)
81 | for await (const chunk of res.body as any) {
82 | parser.feed(decoder.decode(chunk))
83 | }
84 | },
85 | })
86 |
87 | return stream
88 | }
89 |
90 |
--------------------------------------------------------------------------------
/utils/TextSplitter.ts:
--------------------------------------------------------------------------------
1 | type Metadata = Record;
2 |
3 | interface DocumentInput {
4 | pageContent: string;
5 | metadata?: Metadata;
6 | }
7 |
8 | export class Document implements DocumentInput {
9 | pageContent: string;
10 | metadata: Metadata;
11 |
12 | constructor(fields: DocumentInput) {
13 | this.pageContent = fields.pageContent || "";
14 | this.metadata = fields.metadata || {};
15 | }
16 | }
17 |
18 | interface TextSplitterParams {
19 | chunkSize: number;
20 | chunkOverlap: number;
21 | }
22 |
23 | export abstract class TextSplitter implements TextSplitterParams {
24 | chunkSize = 1000;
25 |
26 | chunkOverlap = 200;
27 |
28 | constructor(fields?: Partial) {
29 | this.chunkSize = fields?.chunkSize ?? this.chunkSize;
30 | this.chunkOverlap = fields?.chunkOverlap ?? this.chunkOverlap;
31 | if (this.chunkOverlap >= this.chunkSize) {
32 | throw new Error("Cannot have chunkOverlap >= chunkSize");
33 | }
34 | }
35 |
36 | abstract splitText(text: string): Promise;
37 |
38 | private getNewLinesCount(text: string): number {
39 | return (text.match(/\n/g) || []).length;
40 | }
41 |
42 | private getLoc(metadata: Metadata, from: number, to: number): Metadata {
43 | const loc = metadata.loc && typeof metadata.loc === "object"
44 | ? { ...metadata.loc }
45 | : {};
46 |
47 | return {
48 | ...metadata,
49 | loc: {
50 | ...loc,
51 | lines: { from, to }
52 | }
53 | };
54 | }
55 |
56 | private getIntermediateNewLines(text: string, prevChunk: string, chunk: string): number {
57 | if (!prevChunk) return 0;
58 |
59 | const indexChunk = text.indexOf(chunk);
60 | const indexEndPrevChunk = text.indexOf(prevChunk) + prevChunk.length;
61 | const removedNewlinesFromSplittingText = text.slice(indexEndPrevChunk, indexChunk);
62 |
63 | return this.getNewLinesCount(removedNewlinesFromSplittingText);
64 | }
65 |
66 | private async createDocumentsFromText(text: string, metadata: Metadata): Promise {
67 | let lineCounterIndex = 1;
68 | let prevChunk = null;
69 | const documents = [];
70 |
71 | for (const chunk of await this.splitText(text)) {
72 | const intermediateNewLines = this.getIntermediateNewLines(text, prevChunk!, chunk);
73 | lineCounterIndex += intermediateNewLines;
74 |
75 | const newLinesCount = this.getNewLinesCount(chunk);
76 | const updatedMetadata = this.getLoc(metadata, lineCounterIndex, lineCounterIndex + newLinesCount);
77 |
78 | documents.push(new Document({ pageContent: chunk, metadata: updatedMetadata }));
79 |
80 | lineCounterIndex += newLinesCount;
81 | prevChunk = chunk;
82 | }
83 |
84 | return documents;
85 | }
86 |
87 | async createDocuments(texts: string[], metadatas: Metadata[] = []): Promise {
88 | metadatas = metadatas.length > 0 ? metadatas : new Array(texts.length).fill({});
89 | const documentPromises = texts.map((text, i) => this.createDocumentsFromText(text, metadatas[i]));
90 |
91 | return (await Promise.all(documentPromises)).flat();
92 | }
93 |
94 | async splitDocuments(documents: Document[]): Promise {
95 | const selectedDocuments = documents.filter(
96 | (doc) => doc.pageContent !== undefined
97 | );
98 | const texts = selectedDocuments.map((doc) => doc.pageContent);
99 | const metadatas = selectedDocuments.map((doc) => doc.metadata);
100 | return this.createDocuments(texts, metadatas);
101 | }
102 |
103 | private joinDocs(docs: string[], separator: string): string | null {
104 | const text = docs.join(separator).trim();
105 | return text === "" ? null : text;
106 | }
107 |
108 | private warnForExcessChunkSize(total: number): void {
109 | if (total > this.chunkSize) {
110 | console.warn(
111 | `Created a chunk of size ${total}, which is longer than the specified ${this.chunkSize}`
112 | );
113 | }
114 | }
115 |
116 | private createDocAndAdjustCurrentDoc(currentDoc: string[], separator: string, total: number, len: number): string {
117 | const doc = this.joinDocs(currentDoc, separator);
118 | while (total > this.chunkOverlap || (total + len > this.chunkSize && total > 0)) {
119 | total -= currentDoc[0].length;
120 | currentDoc.shift();
121 | }
122 | return doc!;
123 | }
124 |
125 | mergeSplits(splits: string[], separator: string): string[] {
126 | const docs: string[] = [];
127 | let currentDoc: string[] = [];
128 | let total = 0;
129 |
130 | for (const d of splits) {
131 | const len = d.length;
132 | if (total + len >= this.chunkSize) {
133 | this.warnForExcessChunkSize(total);
134 |
135 | if (currentDoc.length > 0) {
136 | const doc = this.createDocAndAdjustCurrentDoc(currentDoc, separator, total, len);
137 | if (doc !== null) {
138 | docs.push(doc);
139 | }
140 | }
141 | }
142 |
143 | currentDoc.push(d);
144 | total += len;
145 | }
146 |
147 | const doc = this.joinDocs(currentDoc, separator);
148 | if (doc !== null) {
149 | docs.push(doc);
150 | }
151 |
152 | return docs;
153 | }
154 |
155 | }
156 |
157 | interface CharacterTextSplitterParams extends TextSplitterParams {
158 | separator: string;
159 | }
160 |
161 | interface RecursiveCharacterTextSplitterParams extends TextSplitterParams {
162 | separators: string[];
163 | }
164 |
165 | export class RecursiveCharacterTextSplitter extends TextSplitter implements RecursiveCharacterTextSplitterParams {
166 | separators: string[] = ["\n\n", "\n", " ", ""];
167 |
168 | constructor(fields?: Partial) {
169 | super(fields);
170 | this.separators = fields?.separators ?? this.separators;
171 | }
172 |
173 | async splitText(text: string): Promise {
174 | const finalChunks: string[] = [];
175 |
176 | let separator: string = this.separators[this.separators.length - 1];
177 | for (const s of this.separators) {
178 | if (s === "") {
179 | separator = s;
180 | break;
181 | }
182 | if (text.includes(s)) {
183 | separator = s;
184 | break;
185 | }
186 | }
187 |
188 | let splits: string[];
189 | if (separator) {
190 | splits = text.split(separator);
191 | } else {
192 | splits = text.split("");
193 | }
194 |
195 | let goodSplits: string[] = [];
196 | for (const s of splits) {
197 | if (s.length < this.chunkSize) {
198 | goodSplits.push(s);
199 | } else {
200 | if (goodSplits.length) {
201 | const mergedText = this.mergeSplits(goodSplits, separator);
202 | finalChunks.push(...mergedText);
203 | goodSplits = [];
204 | }
205 | const otherInfo = await this.splitText(s);
206 | finalChunks.push(...otherInfo);
207 | }
208 | }
209 | if (goodSplits.length) {
210 | const mergedText = this.mergeSplits(goodSplits, separator);
211 | finalChunks.push(...mergedText);
212 | }
213 | return finalChunks;
214 | }
215 |
216 | mergeSplits(splits: string[], separator: string): string[] {
217 | const mergedText: string[] = [];
218 | let currentChunk = "";
219 | for (const s of splits) {
220 | if (currentChunk.length + s.length < this.chunkSize) {
221 | currentChunk += s + separator;
222 | } else {
223 | mergedText.push(currentChunk.trim());
224 | currentChunk = s + separator;
225 | }
226 | }
227 | if (currentChunk) {
228 | mergedText.push(currentChunk.trim());
229 | }
230 | return mergedText;
231 | }
232 | }
233 |
234 |
235 |
--------------------------------------------------------------------------------
/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "buildCommand": "pnpm turbo build",
3 | "ignoreCommand": "pnpm dlx turbo-ignore"
4 | }
5 |
--------------------------------------------------------------------------------