├── .env.example
├── .gitignore
├── .prettierignore
├── LICENSE.md
├── README.md
├── app
├── api
│ └── chat
│ │ └── route.ts
├── favicon.ico
├── globals.css
├── icons.tsx
├── layout.tsx
├── opengraph-image.png
└── page.tsx
├── next.config.js
├── package.json
├── pnpm-lock.yaml
├── postcss.config.js
├── prettier.config.js
├── public
└── shooketh.png
├── scripts
├── data.jsonl
└── fine-tune.ts
├── tailwind.config.js
└── tsconfig.json
/.env.example:
--------------------------------------------------------------------------------
1 | # Get your OpenAI API key here: https://platform.openai.com/account/api-keys
2 | OPENAI_API_KEY=
--------------------------------------------------------------------------------
/.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 |
18 | # misc
19 | .DS_Store
20 | *.pem
21 |
22 | # debug
23 | npm-debug.log*
24 | yarn-debug.log*
25 | yarn-error.log*
26 |
27 | # local env files
28 | .env
29 | .env*.local
30 |
31 | # vercel
32 | .vercel
33 |
34 | # typescript
35 | *.tsbuildinfo
36 | next-env.d.ts
37 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | pnpm-lock.yaml
2 | yarn.lock
3 | node_modules
4 | .next
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2023 Steven Tey
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in
13 | all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | THE SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | Shooketh
4 |
5 |
6 |
7 | An AI bot built with the Vercel AI SDK and fine-tuned on Shakespeare's literary works.
8 |
9 |
10 |
11 | Introduction ·
12 | Deploy Your Own ·
13 | Fine-tuning the model ·
14 | Tech Stack ·
15 | Contributing ·
16 | License
17 |
18 |
19 |
20 | ## Introduction
21 |
22 | Shooketh is an AI bot built with the [Vercel AI SDK](https://sdk.vercel.ai/docs) and [fine-tuned](https://openai.com/blog/gpt-3-5-turbo-fine-tuning-and-api-updates) on Shakespeare's literary works. [Read the guide](https://vercel.com/guides/fine-tuning-openai-nextjs) on how you can build your own bot like me.
23 |
24 | ## Deploy your own
25 |
26 | You can deploy your own version of Shooketh with 1-click:
27 |
28 | [](https://vercel.com/new/clone?demo-description=An+AI+bot+built+with+the+Vercel+AI+SDK%2C+OpenAI+gpt-3.5-turbo%2C+and+fine-tuned+on+Shakespeare%27s+literary+works&demo-image=%2F%2Fimages.ctfassets.net%2Fe5382hct74si%2F18AaW1vWGDC6nOWYkVsYKu%2Fd18b230765c3436a9a3b3fd62bc06867%2FCleanShot_2023-08-30_at_10.07.14_2x.png&demo-title=Shooketh+%E2%80%93%C2%A0AI+bot+fine-tuned+on+Shakespeare&demo-url=https%3A%2F%2Fvercel.fyi/shooketh%2F&env=OPENAI_API_KEY&envDescription=Get+your+OpenAI+API+Key+here%3A&envLink=https%3A%2F%2Fplatform.openai.com%2Faccount%2Fapi-keys&from=templates&project-name=Shooketh+%E2%80%93%C2%A0AI+bot+fine-tuned+on+Shakespeare&repository-name=shooketh&repository-url=https%3A%2F%2Fgithub.com%2Fsteven-tey%2Fshooketh)
29 |
30 | ## Fine-tuning the model
31 |
32 | [Read the guide](https://vercel.com/guides/fine-tuning-openai-nextjs) on how you can fine-tune your own AI bot with OpenAI + the Vercel AI SDK.
33 |
34 | ## Tech Stack
35 |
36 | ChatH is built on the following stack:
37 |
38 | - [Next.js](https://nextjs.org/) – framework
39 | - [OpenAI Fine-tuning](https://openai.com/blog/gpt-3-5-turbo-fine-tuning-and-api-updates) - Fine-tuning
40 | - [Vercel AI SDK](https://sdk.vercel.ai/docs) – AI completions
41 | - [Vercel](https://vercel.com) – deployments
42 | - [TailwindCSS](https://tailwindcss.com/) – styles
43 |
44 | ## Contributing
45 |
46 | Here's how you can contribute:
47 |
48 | - [Open an issue](https://github.com/steven-tey/shooketh/issues) if you believe you've encountered a bug.
49 | - Make a [pull request](https://github.com/steven-tey/shooketh/pull) to add new features/make quality-of-life improvements/fix bugs.
50 |
51 | ## Author
52 |
53 | - Steven Tey ([@steventey](https://twitter.com/steventey))
54 |
55 | ## License
56 |
57 | Licensed under the [MIT license](https://github.com/steven-tey/shooketh/blob/main/LICENSE.md).
58 |
--------------------------------------------------------------------------------
/app/api/chat/route.ts:
--------------------------------------------------------------------------------
1 | // ./app/api/chat/route.ts
2 | import OpenAI from 'openai'
3 | import { OpenAIStream, StreamingTextResponse } from 'ai'
4 |
5 | // Create an OpenAI API client (that's edge friendly!)
6 | const openai = new OpenAI({
7 | apiKey: process.env.OPENAI_API_KEY || ''
8 | })
9 |
10 | // IMPORTANT! Set the runtime to edge
11 | export const runtime = 'edge'
12 |
13 | export async function POST(req: Request) {
14 | // Extract the `prompt` from the body of the request
15 | const { messages } = await req.json()
16 |
17 | // Ask OpenAI for a streaming chat completion given the prompt
18 | const response = await openai.chat.completions.create({
19 | model: 'ft:gpt-3.5-turbo-0613:vercel::7tMs6IaF',
20 | stream: true,
21 | messages: [
22 | {
23 | role: 'system',
24 | // Note: This has to be the same system prompt as the one
25 | // used in the fine-tuning dataset
26 | content:
27 | "Shooketh is an AI bot that answers in the style of Shakespeare's literary works."
28 | },
29 | ...messages
30 | ]
31 | })
32 |
33 | // Convert the response into a friendly text-stream
34 | const stream = OpenAIStream(response)
35 | // Respond with the stream
36 | return new StreamingTextResponse(stream)
37 | }
38 |
--------------------------------------------------------------------------------
/app/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/steven-tey/shooketh/ed533ebab72e36923b4d187ed0ba015faaad12bc/app/favicon.ico
--------------------------------------------------------------------------------
/app/globals.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
--------------------------------------------------------------------------------
/app/icons.tsx:
--------------------------------------------------------------------------------
1 | export const VercelIcon = () => {
2 | return (
3 |
9 |
10 |
11 | )
12 | }
13 |
14 | export const GithubIcon = () => {
15 | return (
16 |
23 |
24 |
25 | )
26 | }
27 |
28 | export const LoadingCircle = () => {
29 | return (
30 |
37 |
41 |
45 |
46 | )
47 | }
48 |
49 | export const SendIcon = ({ className }: { className?: string }) => {
50 | return (
51 |
58 |
62 |
63 | )
64 | }
65 |
66 | export const UserIcon = () => {
67 | return (
68 |
79 |
80 |
81 |
82 | )
83 | }
84 |
--------------------------------------------------------------------------------
/app/layout.tsx:
--------------------------------------------------------------------------------
1 | import './globals.css'
2 | import { Inter } from 'next/font/google'
3 | import { Analytics } from '@vercel/analytics/react';
4 |
5 | const inter = Inter({ subsets: ['latin'] })
6 |
7 | export const metadata = {
8 | title: "Shooketh – AI bot fine-tuned on Shakespeare's literary works",
9 | description:
10 | "Shooketh is an AI bot built with the Vercel AI SDK and fine-tuned on Shakespeare's literary works."
11 | }
12 |
13 | export default function RootLayout({
14 | children
15 | }: {
16 | children: React.ReactNode
17 | }) {
18 | return (
19 |
20 |
21 | {children}
22 |
23 |
24 |
25 | )
26 | }
27 |
--------------------------------------------------------------------------------
/app/opengraph-image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/steven-tey/shooketh/ed533ebab72e36923b4d187ed0ba015faaad12bc/app/opengraph-image.png
--------------------------------------------------------------------------------
/app/page.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { useRef } from "react";
4 | import { useChat } from "ai/react";
5 | import clsx from "clsx";
6 | import {
7 | VercelIcon,
8 | GithubIcon,
9 | LoadingCircle,
10 | SendIcon,
11 | UserIcon,
12 | } from "./icons";
13 | import Textarea from "react-textarea-autosize";
14 | import Image from "next/image";
15 |
16 | const examples = [
17 | "To be or not to be",
18 | "All the world's a stage",
19 | "What is the meaning of life?",
20 | ];
21 |
22 | export default function Chat() {
23 | const formRef = useRef(null);
24 | const inputRef = useRef(null);
25 |
26 | const { messages, input, setInput, handleSubmit, isLoading } = useChat({
27 | onResponse: (response) => {
28 | if (response.status === 429) {
29 | window.alert("You have reached your request limit for the day.");
30 | return;
31 | }
32 | },
33 | });
34 |
35 | const disabled = isLoading || input.length === 0;
36 |
37 | return (
38 |
39 |
55 | {messages.length > 0 ? (
56 | messages.map((message, i) => (
57 |
64 |
65 |
72 | {message.role === "user" ? (
73 |
74 | ) : (
75 |
81 | )}
82 |
83 |
84 | {message.content}
85 |
86 |
87 |
88 | ))
89 | ) : (
90 |
91 |
134 |
135 | {examples.map((example, i) => (
136 | {
140 | setInput(example);
141 | inputRef.current?.focus();
142 | }}
143 | >
144 | {example}
145 |
146 | ))}
147 |
148 |
149 | )}
150 |
235 |
236 | );
237 | }
238 |
--------------------------------------------------------------------------------
/next.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('next').NextConfig} */
2 | const nextConfig = {
3 | experimental: {
4 | serverActions: true,
5 | },
6 | redirects: async () => {
7 | return [
8 | {
9 | source: "/github",
10 | destination: "https://github.com/steven-tey/chathn",
11 | permanent: true,
12 | },
13 | {
14 | source: "/deploy",
15 | destination: "https://vercel.com/templates/next.js/chathn",
16 | permanent: true,
17 | },
18 | ];
19 | },
20 | };
21 |
22 | module.exports = nextConfig;
23 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "shooketh",
3 | "version": "0.0.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "next dev",
7 | "build": "next build",
8 | "start": "next start",
9 | "tune": "ts-node -O {\\\"module\\\":\\\"commonjs\\\"} scripts/fine-tune.ts"
10 | },
11 | "dependencies": {
12 | "@vercel/analytics": "^1.0.2",
13 | "ai": "2.2.10",
14 | "clsx": "^2.0.0",
15 | "dotenv": "^16.3.1",
16 | "fs": "0.0.1-security",
17 | "next": "13.4.12",
18 | "openai": "4.2.0",
19 | "react": "18.2.0",
20 | "react-dom": "^18.2.0",
21 | "react-textarea-autosize": "^8.5.3",
22 | "ts-node": "^10.9.1"
23 | },
24 | "devDependencies": {
25 | "@types/node": "^17.0.12",
26 | "@types/react": "18.2.8",
27 | "@types/react-dom": "18.2.4",
28 | "autoprefixer": "^10.4.14",
29 | "postcss": "^8.4.23",
30 | "tailwindcss": "^3.3.2",
31 | "typescript": "5.1.3"
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '6.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | dependencies:
8 | '@vercel/analytics':
9 | specifier: ^1.0.2
10 | version: 1.0.2
11 | ai:
12 | specifier: 2.2.10
13 | version: 2.2.10(react@18.2.0)(solid-js@1.7.11)(svelte@4.2.0)(vue@3.3.4)
14 | clsx:
15 | specifier: ^2.0.0
16 | version: 2.0.0
17 | dotenv:
18 | specifier: ^16.3.1
19 | version: 16.3.1
20 | fs:
21 | specifier: 0.0.1-security
22 | version: 0.0.1-security
23 | next:
24 | specifier: 13.4.12
25 | version: 13.4.12(react-dom@18.2.0)(react@18.2.0)
26 | openai:
27 | specifier: 4.2.0
28 | version: 4.2.0
29 | react:
30 | specifier: 18.2.0
31 | version: 18.2.0
32 | react-dom:
33 | specifier: ^18.2.0
34 | version: 18.2.0(react@18.2.0)
35 | react-textarea-autosize:
36 | specifier: ^8.5.3
37 | version: 8.5.3(@types/react@18.2.8)(react@18.2.0)
38 | ts-node:
39 | specifier: ^10.9.1
40 | version: 10.9.1(@types/node@17.0.12)(typescript@5.1.3)
41 |
42 | devDependencies:
43 | '@types/node':
44 | specifier: ^17.0.12
45 | version: 17.0.12
46 | '@types/react':
47 | specifier: 18.2.8
48 | version: 18.2.8
49 | '@types/react-dom':
50 | specifier: 18.2.4
51 | version: 18.2.4
52 | autoprefixer:
53 | specifier: ^10.4.14
54 | version: 10.4.14(postcss@8.4.23)
55 | postcss:
56 | specifier: ^8.4.23
57 | version: 8.4.23
58 | tailwindcss:
59 | specifier: ^3.3.2
60 | version: 3.3.2(ts-node@10.9.1)
61 | typescript:
62 | specifier: 5.1.3
63 | version: 5.1.3
64 |
65 | packages:
66 |
67 | /@alloc/quick-lru@5.2.0:
68 | resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
69 | engines: {node: '>=10'}
70 | dev: true
71 |
72 | /@ampproject/remapping@2.2.1:
73 | resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==}
74 | engines: {node: '>=6.0.0'}
75 | dependencies:
76 | '@jridgewell/gen-mapping': 0.3.3
77 | '@jridgewell/trace-mapping': 0.3.19
78 | dev: false
79 |
80 | /@babel/helper-string-parser@7.22.5:
81 | resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==}
82 | engines: {node: '>=6.9.0'}
83 | dev: false
84 |
85 | /@babel/helper-validator-identifier@7.22.5:
86 | resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==}
87 | engines: {node: '>=6.9.0'}
88 | dev: false
89 |
90 | /@babel/parser@7.22.13:
91 | resolution: {integrity: sha512-3l6+4YOvc9wx7VlCSw4yQfcBo01ECA8TicQfbnCPuCEpRQrf+gTUyGdxNw+pyTUyywp6JRD1w0YQs9TpBXYlkw==}
92 | engines: {node: '>=6.0.0'}
93 | hasBin: true
94 | dependencies:
95 | '@babel/types': 7.22.11
96 | dev: false
97 |
98 | /@babel/runtime@7.22.11:
99 | resolution: {integrity: sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA==}
100 | engines: {node: '>=6.9.0'}
101 | dependencies:
102 | regenerator-runtime: 0.14.0
103 | dev: false
104 |
105 | /@babel/types@7.22.11:
106 | resolution: {integrity: sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==}
107 | engines: {node: '>=6.9.0'}
108 | dependencies:
109 | '@babel/helper-string-parser': 7.22.5
110 | '@babel/helper-validator-identifier': 7.22.5
111 | to-fast-properties: 2.0.0
112 | dev: false
113 |
114 | /@cspotcode/source-map-support@0.8.1:
115 | resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
116 | engines: {node: '>=12'}
117 | dependencies:
118 | '@jridgewell/trace-mapping': 0.3.9
119 |
120 | /@jridgewell/gen-mapping@0.3.3:
121 | resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
122 | engines: {node: '>=6.0.0'}
123 | dependencies:
124 | '@jridgewell/set-array': 1.1.2
125 | '@jridgewell/sourcemap-codec': 1.4.15
126 | '@jridgewell/trace-mapping': 0.3.19
127 |
128 | /@jridgewell/resolve-uri@3.1.1:
129 | resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==}
130 | engines: {node: '>=6.0.0'}
131 |
132 | /@jridgewell/set-array@1.1.2:
133 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
134 | engines: {node: '>=6.0.0'}
135 |
136 | /@jridgewell/sourcemap-codec@1.4.15:
137 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
138 |
139 | /@jridgewell/trace-mapping@0.3.19:
140 | resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==}
141 | dependencies:
142 | '@jridgewell/resolve-uri': 3.1.1
143 | '@jridgewell/sourcemap-codec': 1.4.15
144 |
145 | /@jridgewell/trace-mapping@0.3.9:
146 | resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
147 | dependencies:
148 | '@jridgewell/resolve-uri': 3.1.1
149 | '@jridgewell/sourcemap-codec': 1.4.15
150 |
151 | /@next/env@13.4.12:
152 | resolution: {integrity: sha512-RmHanbV21saP/6OEPBJ7yJMuys68cIf8OBBWd7+uj40LdpmswVAwe1uzeuFyUsd6SfeITWT3XnQfn6wULeKwDQ==}
153 | dev: false
154 |
155 | /@next/swc-darwin-arm64@13.4.12:
156 | resolution: {integrity: sha512-deUrbCXTMZ6ZhbOoloqecnUeNpUOupi8SE2tx4jPfNS9uyUR9zK4iXBvH65opVcA/9F5I/p8vDXSYbUlbmBjZg==}
157 | engines: {node: '>= 10'}
158 | cpu: [arm64]
159 | os: [darwin]
160 | requiresBuild: true
161 | dev: false
162 | optional: true
163 |
164 | /@next/swc-darwin-x64@13.4.12:
165 | resolution: {integrity: sha512-WRvH7RxgRHlC1yb5oG0ZLx8F7uci9AivM5/HGGv9ZyG2Als8Ij64GC3d+mQ5sJhWjusyU6T6V1WKTUoTmOB0zQ==}
166 | engines: {node: '>= 10'}
167 | cpu: [x64]
168 | os: [darwin]
169 | requiresBuild: true
170 | dev: false
171 | optional: true
172 |
173 | /@next/swc-linux-arm64-gnu@13.4.12:
174 | resolution: {integrity: sha512-YEKracAWuxp54tKiAvvq73PUs9lok57cc8meYRibTWe/VdPB2vLgkTVWFcw31YDuRXdEhdX0fWS6Q+ESBhnEig==}
175 | engines: {node: '>= 10'}
176 | cpu: [arm64]
177 | os: [linux]
178 | requiresBuild: true
179 | dev: false
180 | optional: true
181 |
182 | /@next/swc-linux-arm64-musl@13.4.12:
183 | resolution: {integrity: sha512-LhJR7/RAjdHJ2Isl2pgc/JaoxNk0KtBgkVpiDJPVExVWA1c6gzY57+3zWuxuyWzTG+fhLZo2Y80pLXgIJv7g3g==}
184 | engines: {node: '>= 10'}
185 | cpu: [arm64]
186 | os: [linux]
187 | requiresBuild: true
188 | dev: false
189 | optional: true
190 |
191 | /@next/swc-linux-x64-gnu@13.4.12:
192 | resolution: {integrity: sha512-1DWLL/B9nBNiQRng+1aqs3OaZcxC16Nf+mOnpcrZZSdyKHek3WQh6j/fkbukObgNGwmCoVevLUa/p3UFTTqgqg==}
193 | engines: {node: '>= 10'}
194 | cpu: [x64]
195 | os: [linux]
196 | requiresBuild: true
197 | dev: false
198 | optional: true
199 |
200 | /@next/swc-linux-x64-musl@13.4.12:
201 | resolution: {integrity: sha512-kEAJmgYFhp0VL+eRWmUkVxLVunn7oL9Mdue/FS8yzRBVj7Z0AnIrHpTIeIUl1bbdQq1VaoOztnKicAjfkLTRCQ==}
202 | engines: {node: '>= 10'}
203 | cpu: [x64]
204 | os: [linux]
205 | requiresBuild: true
206 | dev: false
207 | optional: true
208 |
209 | /@next/swc-win32-arm64-msvc@13.4.12:
210 | resolution: {integrity: sha512-GMLuL/loR6yIIRTnPRY6UGbLL9MBdw2anxkOnANxvLvsml4F0HNIgvnU3Ej4BjbqMTNjD4hcPFdlEow4XHPdZA==}
211 | engines: {node: '>= 10'}
212 | cpu: [arm64]
213 | os: [win32]
214 | requiresBuild: true
215 | dev: false
216 | optional: true
217 |
218 | /@next/swc-win32-ia32-msvc@13.4.12:
219 | resolution: {integrity: sha512-PhgNqN2Vnkm7XaMdRmmX0ZSwZXQAtamBVSa9A/V1dfKQCV1rjIZeiy/dbBnVYGdj63ANfsOR/30XpxP71W0eww==}
220 | engines: {node: '>= 10'}
221 | cpu: [ia32]
222 | os: [win32]
223 | requiresBuild: true
224 | dev: false
225 | optional: true
226 |
227 | /@next/swc-win32-x64-msvc@13.4.12:
228 | resolution: {integrity: sha512-Z+56e/Ljt0bUs+T+jPjhFyxYBcdY2RIq9ELFU+qAMQMteHo7ymbV7CKmlcX59RI9C4YzN8PgMgLyAoi916b5HA==}
229 | engines: {node: '>= 10'}
230 | cpu: [x64]
231 | os: [win32]
232 | requiresBuild: true
233 | dev: false
234 | optional: true
235 |
236 | /@nodelib/fs.scandir@2.1.5:
237 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
238 | engines: {node: '>= 8'}
239 | dependencies:
240 | '@nodelib/fs.stat': 2.0.5
241 | run-parallel: 1.2.0
242 | dev: true
243 |
244 | /@nodelib/fs.stat@2.0.5:
245 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
246 | engines: {node: '>= 8'}
247 | dev: true
248 |
249 | /@nodelib/fs.walk@1.2.8:
250 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
251 | engines: {node: '>= 8'}
252 | dependencies:
253 | '@nodelib/fs.scandir': 2.1.5
254 | fastq: 1.15.0
255 | dev: true
256 |
257 | /@swc/helpers@0.5.1:
258 | resolution: {integrity: sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==}
259 | dependencies:
260 | tslib: 2.6.2
261 | dev: false
262 |
263 | /@tsconfig/node10@1.0.9:
264 | resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==}
265 |
266 | /@tsconfig/node12@1.0.11:
267 | resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==}
268 |
269 | /@tsconfig/node14@1.0.3:
270 | resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==}
271 |
272 | /@tsconfig/node16@1.0.4:
273 | resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==}
274 |
275 | /@types/estree@1.0.1:
276 | resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==}
277 | dev: false
278 |
279 | /@types/node-fetch@2.6.4:
280 | resolution: {integrity: sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==}
281 | dependencies:
282 | '@types/node': 17.0.12
283 | form-data: 3.0.1
284 | dev: false
285 |
286 | /@types/node@17.0.12:
287 | resolution: {integrity: sha512-4YpbAsnJXWYK/fpTVFlMIcUIho2AYCi4wg5aNPrG1ng7fn/1/RZfCIpRCiBX+12RVa34RluilnvCqD+g3KiSiA==}
288 |
289 | /@types/node@18.17.12:
290 | resolution: {integrity: sha512-d6xjC9fJ/nSnfDeU0AMDsaJyb1iHsqCSOdi84w4u+SlN/UgQdY5tRhpMzaFYsI4mnpvgTivEaQd0yOUhAtOnEQ==}
291 | dev: false
292 |
293 | /@types/prop-types@15.7.5:
294 | resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==}
295 |
296 | /@types/react-dom@18.2.4:
297 | resolution: {integrity: sha512-G2mHoTMTL4yoydITgOGwWdWMVd8sNgyEP85xVmMKAPUBwQWm9wBPQUmvbeF4V3WBY1P7mmL4BkjQ0SqUpf1snw==}
298 | dependencies:
299 | '@types/react': 18.2.8
300 | dev: true
301 |
302 | /@types/react@18.2.8:
303 | resolution: {integrity: sha512-lTyWUNrd8ntVkqycEEplasWy2OxNlShj3zqS0LuB1ENUGis5HodmhM7DtCoUGbxj3VW/WsGA0DUhpG6XrM7gPA==}
304 | dependencies:
305 | '@types/prop-types': 15.7.5
306 | '@types/scheduler': 0.16.3
307 | csstype: 3.1.2
308 |
309 | /@types/scheduler@0.16.3:
310 | resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==}
311 |
312 | /@vercel/analytics@1.0.2:
313 | resolution: {integrity: sha512-BZFxVrv24VbNNl5xMxqUojQIegEeXMI6rX3rg1uVLYUEXsuKNBSAEQf4BWEcjQDp/8aYJOj6m8V4PUA3x/cxgg==}
314 | dev: false
315 |
316 | /@vue/compiler-core@3.3.4:
317 | resolution: {integrity: sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==}
318 | dependencies:
319 | '@babel/parser': 7.22.13
320 | '@vue/shared': 3.3.4
321 | estree-walker: 2.0.2
322 | source-map-js: 1.0.2
323 | dev: false
324 |
325 | /@vue/compiler-dom@3.3.4:
326 | resolution: {integrity: sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==}
327 | dependencies:
328 | '@vue/compiler-core': 3.3.4
329 | '@vue/shared': 3.3.4
330 | dev: false
331 |
332 | /@vue/compiler-sfc@3.3.4:
333 | resolution: {integrity: sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==}
334 | dependencies:
335 | '@babel/parser': 7.22.13
336 | '@vue/compiler-core': 3.3.4
337 | '@vue/compiler-dom': 3.3.4
338 | '@vue/compiler-ssr': 3.3.4
339 | '@vue/reactivity-transform': 3.3.4
340 | '@vue/shared': 3.3.4
341 | estree-walker: 2.0.2
342 | magic-string: 0.30.3
343 | postcss: 8.4.29
344 | source-map-js: 1.0.2
345 | dev: false
346 |
347 | /@vue/compiler-ssr@3.3.4:
348 | resolution: {integrity: sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==}
349 | dependencies:
350 | '@vue/compiler-dom': 3.3.4
351 | '@vue/shared': 3.3.4
352 | dev: false
353 |
354 | /@vue/reactivity-transform@3.3.4:
355 | resolution: {integrity: sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==}
356 | dependencies:
357 | '@babel/parser': 7.22.13
358 | '@vue/compiler-core': 3.3.4
359 | '@vue/shared': 3.3.4
360 | estree-walker: 2.0.2
361 | magic-string: 0.30.3
362 | dev: false
363 |
364 | /@vue/reactivity@3.3.4:
365 | resolution: {integrity: sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==}
366 | dependencies:
367 | '@vue/shared': 3.3.4
368 | dev: false
369 |
370 | /@vue/runtime-core@3.3.4:
371 | resolution: {integrity: sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==}
372 | dependencies:
373 | '@vue/reactivity': 3.3.4
374 | '@vue/shared': 3.3.4
375 | dev: false
376 |
377 | /@vue/runtime-dom@3.3.4:
378 | resolution: {integrity: sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==}
379 | dependencies:
380 | '@vue/runtime-core': 3.3.4
381 | '@vue/shared': 3.3.4
382 | csstype: 3.1.2
383 | dev: false
384 |
385 | /@vue/server-renderer@3.3.4(vue@3.3.4):
386 | resolution: {integrity: sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==}
387 | peerDependencies:
388 | vue: 3.3.4
389 | dependencies:
390 | '@vue/compiler-ssr': 3.3.4
391 | '@vue/shared': 3.3.4
392 | vue: 3.3.4
393 | dev: false
394 |
395 | /@vue/shared@3.3.4:
396 | resolution: {integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==}
397 | dev: false
398 |
399 | /abort-controller@3.0.0:
400 | resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
401 | engines: {node: '>=6.5'}
402 | dependencies:
403 | event-target-shim: 5.0.1
404 | dev: false
405 |
406 | /acorn-walk@8.2.0:
407 | resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==}
408 | engines: {node: '>=0.4.0'}
409 |
410 | /acorn@8.10.0:
411 | resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==}
412 | engines: {node: '>=0.4.0'}
413 | hasBin: true
414 |
415 | /agentkeepalive@4.5.0:
416 | resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
417 | engines: {node: '>= 8.0.0'}
418 | dependencies:
419 | humanize-ms: 1.2.1
420 | dev: false
421 |
422 | /ai@2.2.10(react@18.2.0)(solid-js@1.7.11)(svelte@4.2.0)(vue@3.3.4):
423 | resolution: {integrity: sha512-3FARCB9X57YxpAJeAUvZHTeeQ549B/kTMQk5Qet1rZNm9EjKXeHUiQfaq+L8v9f75HYasZXJIl//owzdjojTTw==}
424 | engines: {node: '>=14.6'}
425 | peerDependencies:
426 | react: ^18.2.0
427 | solid-js: ^1.7.7
428 | svelte: ^3.0.0 || ^4.0.0
429 | vue: ^3.3.4
430 | peerDependenciesMeta:
431 | react:
432 | optional: true
433 | solid-js:
434 | optional: true
435 | svelte:
436 | optional: true
437 | vue:
438 | optional: true
439 | dependencies:
440 | eventsource-parser: 1.0.0
441 | nanoid: 3.3.6
442 | openai: 4.2.0
443 | react: 18.2.0
444 | solid-js: 1.7.11
445 | solid-swr-store: 0.10.7(solid-js@1.7.11)(swr-store@0.10.6)
446 | sswr: 2.0.0(svelte@4.2.0)
447 | svelte: 4.2.0
448 | swr: 2.2.0(react@18.2.0)
449 | swr-store: 0.10.6
450 | swrv: 1.0.4(vue@3.3.4)
451 | vue: 3.3.4
452 | transitivePeerDependencies:
453 | - encoding
454 | dev: false
455 |
456 | /any-promise@1.3.0:
457 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
458 | dev: true
459 |
460 | /anymatch@3.1.3:
461 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
462 | engines: {node: '>= 8'}
463 | dependencies:
464 | normalize-path: 3.0.0
465 | picomatch: 2.3.1
466 | dev: true
467 |
468 | /arg@4.1.3:
469 | resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
470 |
471 | /arg@5.0.2:
472 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
473 | dev: true
474 |
475 | /aria-query@5.3.0:
476 | resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}
477 | dependencies:
478 | dequal: 2.0.3
479 | dev: false
480 |
481 | /asynckit@0.4.0:
482 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
483 | dev: false
484 |
485 | /autoprefixer@10.4.14(postcss@8.4.23):
486 | resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==}
487 | engines: {node: ^10 || ^12 || >=14}
488 | hasBin: true
489 | peerDependencies:
490 | postcss: ^8.1.0
491 | dependencies:
492 | browserslist: 4.21.10
493 | caniuse-lite: 1.0.30001524
494 | fraction.js: 4.3.1
495 | normalize-range: 0.1.2
496 | picocolors: 1.0.0
497 | postcss: 8.4.23
498 | postcss-value-parser: 4.2.0
499 | dev: true
500 |
501 | /axobject-query@3.2.1:
502 | resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==}
503 | dependencies:
504 | dequal: 2.0.3
505 | dev: false
506 |
507 | /balanced-match@1.0.2:
508 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
509 | dev: true
510 |
511 | /base-64@0.1.0:
512 | resolution: {integrity: sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==}
513 | dev: false
514 |
515 | /binary-extensions@2.2.0:
516 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
517 | engines: {node: '>=8'}
518 | dev: true
519 |
520 | /brace-expansion@1.1.11:
521 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
522 | dependencies:
523 | balanced-match: 1.0.2
524 | concat-map: 0.0.1
525 | dev: true
526 |
527 | /braces@3.0.2:
528 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
529 | engines: {node: '>=8'}
530 | dependencies:
531 | fill-range: 7.0.1
532 | dev: true
533 |
534 | /browserslist@4.21.10:
535 | resolution: {integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==}
536 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
537 | hasBin: true
538 | dependencies:
539 | caniuse-lite: 1.0.30001524
540 | electron-to-chromium: 1.4.505
541 | node-releases: 2.0.13
542 | update-browserslist-db: 1.0.11(browserslist@4.21.10)
543 | dev: true
544 |
545 | /busboy@1.6.0:
546 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
547 | engines: {node: '>=10.16.0'}
548 | dependencies:
549 | streamsearch: 1.1.0
550 | dev: false
551 |
552 | /camelcase-css@2.0.1:
553 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
554 | engines: {node: '>= 6'}
555 | dev: true
556 |
557 | /caniuse-lite@1.0.30001524:
558 | resolution: {integrity: sha512-Jj917pJtYg9HSJBF95HVX3Cdr89JUyLT4IZ8SvM5aDRni95swKgYi3TgYLH5hnGfPE/U1dg6IfZ50UsIlLkwSA==}
559 |
560 | /charenc@0.0.2:
561 | resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==}
562 | dev: false
563 |
564 | /chokidar@3.5.3:
565 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
566 | engines: {node: '>= 8.10.0'}
567 | dependencies:
568 | anymatch: 3.1.3
569 | braces: 3.0.2
570 | glob-parent: 5.1.2
571 | is-binary-path: 2.1.0
572 | is-glob: 4.0.3
573 | normalize-path: 3.0.0
574 | readdirp: 3.6.0
575 | optionalDependencies:
576 | fsevents: 2.3.3
577 | dev: true
578 |
579 | /client-only@0.0.1:
580 | resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
581 | dev: false
582 |
583 | /clsx@2.0.0:
584 | resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==}
585 | engines: {node: '>=6'}
586 | dev: false
587 |
588 | /code-red@1.0.4:
589 | resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==}
590 | dependencies:
591 | '@jridgewell/sourcemap-codec': 1.4.15
592 | '@types/estree': 1.0.1
593 | acorn: 8.10.0
594 | estree-walker: 3.0.3
595 | periscopic: 3.1.0
596 | dev: false
597 |
598 | /combined-stream@1.0.8:
599 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
600 | engines: {node: '>= 0.8'}
601 | dependencies:
602 | delayed-stream: 1.0.0
603 | dev: false
604 |
605 | /commander@4.1.1:
606 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
607 | engines: {node: '>= 6'}
608 | dev: true
609 |
610 | /concat-map@0.0.1:
611 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
612 | dev: true
613 |
614 | /create-require@1.1.1:
615 | resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
616 |
617 | /crypt@0.0.2:
618 | resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==}
619 | dev: false
620 |
621 | /css-tree@2.3.1:
622 | resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==}
623 | engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
624 | dependencies:
625 | mdn-data: 2.0.30
626 | source-map-js: 1.0.2
627 | dev: false
628 |
629 | /cssesc@3.0.0:
630 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
631 | engines: {node: '>=4'}
632 | hasBin: true
633 | dev: true
634 |
635 | /csstype@3.1.2:
636 | resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==}
637 |
638 | /delayed-stream@1.0.0:
639 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
640 | engines: {node: '>=0.4.0'}
641 | dev: false
642 |
643 | /dequal@2.0.3:
644 | resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
645 | engines: {node: '>=6'}
646 | dev: false
647 |
648 | /didyoumean@1.2.2:
649 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
650 | dev: true
651 |
652 | /diff@4.0.2:
653 | resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
654 | engines: {node: '>=0.3.1'}
655 |
656 | /digest-fetch@1.3.0:
657 | resolution: {integrity: sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA==}
658 | dependencies:
659 | base-64: 0.1.0
660 | md5: 2.3.0
661 | dev: false
662 |
663 | /dlv@1.1.3:
664 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
665 | dev: true
666 |
667 | /dotenv@16.3.1:
668 | resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==}
669 | engines: {node: '>=12'}
670 | dev: false
671 |
672 | /electron-to-chromium@1.4.505:
673 | resolution: {integrity: sha512-0A50eL5BCCKdxig2SsCXhpuztnB9PfUgRMojj5tMvt8O54lbwz3t6wNgnpiTRosw5QjlJB7ixhVyeg8daLQwSQ==}
674 | dev: true
675 |
676 | /escalade@3.1.1:
677 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
678 | engines: {node: '>=6'}
679 | dev: true
680 |
681 | /estree-walker@2.0.2:
682 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
683 | dev: false
684 |
685 | /estree-walker@3.0.3:
686 | resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
687 | dependencies:
688 | '@types/estree': 1.0.1
689 | dev: false
690 |
691 | /event-target-shim@5.0.1:
692 | resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
693 | engines: {node: '>=6'}
694 | dev: false
695 |
696 | /eventsource-parser@1.0.0:
697 | resolution: {integrity: sha512-9jgfSCa3dmEme2ES3mPByGXfgZ87VbP97tng1G2nWwWx6bV2nYxm2AWCrbQjXToSe+yYlqaZNtxffR9IeQr95g==}
698 | engines: {node: '>=14.18'}
699 | dev: false
700 |
701 | /fast-glob@3.3.1:
702 | resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==}
703 | engines: {node: '>=8.6.0'}
704 | dependencies:
705 | '@nodelib/fs.stat': 2.0.5
706 | '@nodelib/fs.walk': 1.2.8
707 | glob-parent: 5.1.2
708 | merge2: 1.4.1
709 | micromatch: 4.0.5
710 | dev: true
711 |
712 | /fastq@1.15.0:
713 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
714 | dependencies:
715 | reusify: 1.0.4
716 | dev: true
717 |
718 | /fill-range@7.0.1:
719 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
720 | engines: {node: '>=8'}
721 | dependencies:
722 | to-regex-range: 5.0.1
723 | dev: true
724 |
725 | /form-data-encoder@1.7.2:
726 | resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==}
727 | dev: false
728 |
729 | /form-data@3.0.1:
730 | resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==}
731 | engines: {node: '>= 6'}
732 | dependencies:
733 | asynckit: 0.4.0
734 | combined-stream: 1.0.8
735 | mime-types: 2.1.35
736 | dev: false
737 |
738 | /formdata-node@4.4.1:
739 | resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==}
740 | engines: {node: '>= 12.20'}
741 | dependencies:
742 | node-domexception: 1.0.0
743 | web-streams-polyfill: 4.0.0-beta.3
744 | dev: false
745 |
746 | /fraction.js@4.3.1:
747 | resolution: {integrity: sha512-nx0cki48JBA6ThPeUpeKCNpdhEl/9bRS+dAEYnRUod+Z1jhFfC3K/mBLorZZntqHM+GTH3/dkkpfoT3QITYe7g==}
748 | dev: true
749 |
750 | /fs.realpath@1.0.0:
751 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
752 | dev: true
753 |
754 | /fs@0.0.1-security:
755 | resolution: {integrity: sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==}
756 | dev: false
757 |
758 | /fsevents@2.3.3:
759 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
760 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
761 | os: [darwin]
762 | requiresBuild: true
763 | dev: true
764 | optional: true
765 |
766 | /function-bind@1.1.1:
767 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
768 | dev: true
769 |
770 | /glob-parent@5.1.2:
771 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
772 | engines: {node: '>= 6'}
773 | dependencies:
774 | is-glob: 4.0.3
775 | dev: true
776 |
777 | /glob-parent@6.0.2:
778 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
779 | engines: {node: '>=10.13.0'}
780 | dependencies:
781 | is-glob: 4.0.3
782 | dev: true
783 |
784 | /glob-to-regexp@0.4.1:
785 | resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
786 | dev: false
787 |
788 | /glob@7.1.6:
789 | resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==}
790 | dependencies:
791 | fs.realpath: 1.0.0
792 | inflight: 1.0.6
793 | inherits: 2.0.4
794 | minimatch: 3.1.2
795 | once: 1.4.0
796 | path-is-absolute: 1.0.1
797 | dev: true
798 |
799 | /graceful-fs@4.2.11:
800 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
801 | dev: false
802 |
803 | /has@1.0.3:
804 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
805 | engines: {node: '>= 0.4.0'}
806 | dependencies:
807 | function-bind: 1.1.1
808 | dev: true
809 |
810 | /humanize-ms@1.2.1:
811 | resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
812 | dependencies:
813 | ms: 2.1.3
814 | dev: false
815 |
816 | /inflight@1.0.6:
817 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
818 | dependencies:
819 | once: 1.4.0
820 | wrappy: 1.0.2
821 | dev: true
822 |
823 | /inherits@2.0.4:
824 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
825 | dev: true
826 |
827 | /is-binary-path@2.1.0:
828 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
829 | engines: {node: '>=8'}
830 | dependencies:
831 | binary-extensions: 2.2.0
832 | dev: true
833 |
834 | /is-buffer@1.1.6:
835 | resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==}
836 | dev: false
837 |
838 | /is-core-module@2.13.0:
839 | resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==}
840 | dependencies:
841 | has: 1.0.3
842 | dev: true
843 |
844 | /is-extglob@2.1.1:
845 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
846 | engines: {node: '>=0.10.0'}
847 | dev: true
848 |
849 | /is-glob@4.0.3:
850 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
851 | engines: {node: '>=0.10.0'}
852 | dependencies:
853 | is-extglob: 2.1.1
854 | dev: true
855 |
856 | /is-number@7.0.0:
857 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
858 | engines: {node: '>=0.12.0'}
859 | dev: true
860 |
861 | /is-reference@3.0.1:
862 | resolution: {integrity: sha512-baJJdQLiYaJdvFbJqXrcGv3WU3QCzBlUcI5QhbesIm6/xPsvmO+2CDoi/GMOFBQEQm+PXkwOPrp9KK5ozZsp2w==}
863 | dependencies:
864 | '@types/estree': 1.0.1
865 | dev: false
866 |
867 | /jiti@1.19.3:
868 | resolution: {integrity: sha512-5eEbBDQT/jF1xg6l36P+mWGGoH9Spuy0PCdSr2dtWRDGC6ph/w9ZCL4lmESW8f8F7MwT3XKescfP0wnZWAKL9w==}
869 | hasBin: true
870 | dev: true
871 |
872 | /js-tokens@4.0.0:
873 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
874 | dev: false
875 |
876 | /lilconfig@2.1.0:
877 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
878 | engines: {node: '>=10'}
879 | dev: true
880 |
881 | /lines-and-columns@1.2.4:
882 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
883 | dev: true
884 |
885 | /locate-character@3.0.0:
886 | resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==}
887 | dev: false
888 |
889 | /loose-envify@1.4.0:
890 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
891 | hasBin: true
892 | dependencies:
893 | js-tokens: 4.0.0
894 | dev: false
895 |
896 | /magic-string@0.30.3:
897 | resolution: {integrity: sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==}
898 | engines: {node: '>=12'}
899 | dependencies:
900 | '@jridgewell/sourcemap-codec': 1.4.15
901 | dev: false
902 |
903 | /make-error@1.3.6:
904 | resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
905 |
906 | /md5@2.3.0:
907 | resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==}
908 | dependencies:
909 | charenc: 0.0.2
910 | crypt: 0.0.2
911 | is-buffer: 1.1.6
912 | dev: false
913 |
914 | /mdn-data@2.0.30:
915 | resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}
916 | dev: false
917 |
918 | /merge2@1.4.1:
919 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
920 | engines: {node: '>= 8'}
921 | dev: true
922 |
923 | /micromatch@4.0.5:
924 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
925 | engines: {node: '>=8.6'}
926 | dependencies:
927 | braces: 3.0.2
928 | picomatch: 2.3.1
929 | dev: true
930 |
931 | /mime-db@1.52.0:
932 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
933 | engines: {node: '>= 0.6'}
934 | dev: false
935 |
936 | /mime-types@2.1.35:
937 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
938 | engines: {node: '>= 0.6'}
939 | dependencies:
940 | mime-db: 1.52.0
941 | dev: false
942 |
943 | /minimatch@3.1.2:
944 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
945 | dependencies:
946 | brace-expansion: 1.1.11
947 | dev: true
948 |
949 | /ms@2.1.3:
950 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
951 | dev: false
952 |
953 | /mz@2.7.0:
954 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
955 | dependencies:
956 | any-promise: 1.3.0
957 | object-assign: 4.1.1
958 | thenify-all: 1.6.0
959 | dev: true
960 |
961 | /nanoid@3.3.6:
962 | resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==}
963 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
964 | hasBin: true
965 |
966 | /next@13.4.12(react-dom@18.2.0)(react@18.2.0):
967 | resolution: {integrity: sha512-eHfnru9x6NRmTMcjQp6Nz0J4XH9OubmzOa7CkWL+AUrUxpibub3vWwttjduu9No16dug1kq04hiUUpo7J3m3Xw==}
968 | engines: {node: '>=16.8.0'}
969 | hasBin: true
970 | peerDependencies:
971 | '@opentelemetry/api': ^1.1.0
972 | fibers: '>= 3.1.0'
973 | react: ^18.2.0
974 | react-dom: ^18.2.0
975 | sass: ^1.3.0
976 | peerDependenciesMeta:
977 | '@opentelemetry/api':
978 | optional: true
979 | fibers:
980 | optional: true
981 | sass:
982 | optional: true
983 | dependencies:
984 | '@next/env': 13.4.12
985 | '@swc/helpers': 0.5.1
986 | busboy: 1.6.0
987 | caniuse-lite: 1.0.30001524
988 | postcss: 8.4.14
989 | react: 18.2.0
990 | react-dom: 18.2.0(react@18.2.0)
991 | styled-jsx: 5.1.1(react@18.2.0)
992 | watchpack: 2.4.0
993 | zod: 3.21.4
994 | optionalDependencies:
995 | '@next/swc-darwin-arm64': 13.4.12
996 | '@next/swc-darwin-x64': 13.4.12
997 | '@next/swc-linux-arm64-gnu': 13.4.12
998 | '@next/swc-linux-arm64-musl': 13.4.12
999 | '@next/swc-linux-x64-gnu': 13.4.12
1000 | '@next/swc-linux-x64-musl': 13.4.12
1001 | '@next/swc-win32-arm64-msvc': 13.4.12
1002 | '@next/swc-win32-ia32-msvc': 13.4.12
1003 | '@next/swc-win32-x64-msvc': 13.4.12
1004 | transitivePeerDependencies:
1005 | - '@babel/core'
1006 | - babel-plugin-macros
1007 | dev: false
1008 |
1009 | /node-domexception@1.0.0:
1010 | resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
1011 | engines: {node: '>=10.5.0'}
1012 | dev: false
1013 |
1014 | /node-fetch@2.7.0:
1015 | resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
1016 | engines: {node: 4.x || >=6.0.0}
1017 | peerDependencies:
1018 | encoding: ^0.1.0
1019 | peerDependenciesMeta:
1020 | encoding:
1021 | optional: true
1022 | dependencies:
1023 | whatwg-url: 5.0.0
1024 | dev: false
1025 |
1026 | /node-releases@2.0.13:
1027 | resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==}
1028 | dev: true
1029 |
1030 | /normalize-path@3.0.0:
1031 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
1032 | engines: {node: '>=0.10.0'}
1033 | dev: true
1034 |
1035 | /normalize-range@0.1.2:
1036 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
1037 | engines: {node: '>=0.10.0'}
1038 | dev: true
1039 |
1040 | /object-assign@4.1.1:
1041 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
1042 | engines: {node: '>=0.10.0'}
1043 | dev: true
1044 |
1045 | /object-hash@3.0.0:
1046 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
1047 | engines: {node: '>= 6'}
1048 | dev: true
1049 |
1050 | /once@1.4.0:
1051 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
1052 | dependencies:
1053 | wrappy: 1.0.2
1054 | dev: true
1055 |
1056 | /openai@4.2.0:
1057 | resolution: {integrity: sha512-zfvpO2eITIxIjTG8T6Cek7NB2dMvP/LW0TRUJ4P9E8+qbBNKw00DrtfF64b+fAV2+wUYCVyynT6iSycJ//TtbA==}
1058 | hasBin: true
1059 | dependencies:
1060 | '@types/node': 18.17.12
1061 | '@types/node-fetch': 2.6.4
1062 | abort-controller: 3.0.0
1063 | agentkeepalive: 4.5.0
1064 | digest-fetch: 1.3.0
1065 | form-data-encoder: 1.7.2
1066 | formdata-node: 4.4.1
1067 | node-fetch: 2.7.0
1068 | transitivePeerDependencies:
1069 | - encoding
1070 | dev: false
1071 |
1072 | /path-is-absolute@1.0.1:
1073 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
1074 | engines: {node: '>=0.10.0'}
1075 | dev: true
1076 |
1077 | /path-parse@1.0.7:
1078 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
1079 | dev: true
1080 |
1081 | /periscopic@3.1.0:
1082 | resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==}
1083 | dependencies:
1084 | '@types/estree': 1.0.1
1085 | estree-walker: 3.0.3
1086 | is-reference: 3.0.1
1087 | dev: false
1088 |
1089 | /picocolors@1.0.0:
1090 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
1091 |
1092 | /picomatch@2.3.1:
1093 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
1094 | engines: {node: '>=8.6'}
1095 | dev: true
1096 |
1097 | /pify@2.3.0:
1098 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
1099 | engines: {node: '>=0.10.0'}
1100 | dev: true
1101 |
1102 | /pirates@4.0.6:
1103 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
1104 | engines: {node: '>= 6'}
1105 | dev: true
1106 |
1107 | /postcss-import@15.1.0(postcss@8.4.23):
1108 | resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
1109 | engines: {node: '>=14.0.0'}
1110 | peerDependencies:
1111 | postcss: ^8.0.0
1112 | dependencies:
1113 | postcss: 8.4.23
1114 | postcss-value-parser: 4.2.0
1115 | read-cache: 1.0.0
1116 | resolve: 1.22.4
1117 | dev: true
1118 |
1119 | /postcss-js@4.0.1(postcss@8.4.23):
1120 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
1121 | engines: {node: ^12 || ^14 || >= 16}
1122 | peerDependencies:
1123 | postcss: ^8.4.21
1124 | dependencies:
1125 | camelcase-css: 2.0.1
1126 | postcss: 8.4.23
1127 | dev: true
1128 |
1129 | /postcss-load-config@4.0.1(postcss@8.4.23)(ts-node@10.9.1):
1130 | resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==}
1131 | engines: {node: '>= 14'}
1132 | peerDependencies:
1133 | postcss: '>=8.0.9'
1134 | ts-node: '>=9.0.0'
1135 | peerDependenciesMeta:
1136 | postcss:
1137 | optional: true
1138 | ts-node:
1139 | optional: true
1140 | dependencies:
1141 | lilconfig: 2.1.0
1142 | postcss: 8.4.23
1143 | ts-node: 10.9.1(@types/node@17.0.12)(typescript@5.1.3)
1144 | yaml: 2.3.2
1145 | dev: true
1146 |
1147 | /postcss-nested@6.0.1(postcss@8.4.23):
1148 | resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==}
1149 | engines: {node: '>=12.0'}
1150 | peerDependencies:
1151 | postcss: ^8.2.14
1152 | dependencies:
1153 | postcss: 8.4.23
1154 | postcss-selector-parser: 6.0.13
1155 | dev: true
1156 |
1157 | /postcss-selector-parser@6.0.13:
1158 | resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==}
1159 | engines: {node: '>=4'}
1160 | dependencies:
1161 | cssesc: 3.0.0
1162 | util-deprecate: 1.0.2
1163 | dev: true
1164 |
1165 | /postcss-value-parser@4.2.0:
1166 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
1167 | dev: true
1168 |
1169 | /postcss@8.4.14:
1170 | resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==}
1171 | engines: {node: ^10 || ^12 || >=14}
1172 | dependencies:
1173 | nanoid: 3.3.6
1174 | picocolors: 1.0.0
1175 | source-map-js: 1.0.2
1176 | dev: false
1177 |
1178 | /postcss@8.4.23:
1179 | resolution: {integrity: sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==}
1180 | engines: {node: ^10 || ^12 || >=14}
1181 | dependencies:
1182 | nanoid: 3.3.6
1183 | picocolors: 1.0.0
1184 | source-map-js: 1.0.2
1185 | dev: true
1186 |
1187 | /postcss@8.4.29:
1188 | resolution: {integrity: sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==}
1189 | engines: {node: ^10 || ^12 || >=14}
1190 | dependencies:
1191 | nanoid: 3.3.6
1192 | picocolors: 1.0.0
1193 | source-map-js: 1.0.2
1194 | dev: false
1195 |
1196 | /queue-microtask@1.2.3:
1197 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1198 | dev: true
1199 |
1200 | /react-dom@18.2.0(react@18.2.0):
1201 | resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
1202 | peerDependencies:
1203 | react: ^18.2.0
1204 | dependencies:
1205 | loose-envify: 1.4.0
1206 | react: 18.2.0
1207 | scheduler: 0.23.0
1208 | dev: false
1209 |
1210 | /react-textarea-autosize@8.5.3(@types/react@18.2.8)(react@18.2.0):
1211 | resolution: {integrity: sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==}
1212 | engines: {node: '>=10'}
1213 | peerDependencies:
1214 | react: ^16.8.0 || ^17.0.0 || ^18.0.0
1215 | dependencies:
1216 | '@babel/runtime': 7.22.11
1217 | react: 18.2.0
1218 | use-composed-ref: 1.3.0(react@18.2.0)
1219 | use-latest: 1.2.1(@types/react@18.2.8)(react@18.2.0)
1220 | transitivePeerDependencies:
1221 | - '@types/react'
1222 | dev: false
1223 |
1224 | /react@18.2.0:
1225 | resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
1226 | engines: {node: '>=0.10.0'}
1227 | dependencies:
1228 | loose-envify: 1.4.0
1229 | dev: false
1230 |
1231 | /read-cache@1.0.0:
1232 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
1233 | dependencies:
1234 | pify: 2.3.0
1235 | dev: true
1236 |
1237 | /readdirp@3.6.0:
1238 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
1239 | engines: {node: '>=8.10.0'}
1240 | dependencies:
1241 | picomatch: 2.3.1
1242 | dev: true
1243 |
1244 | /regenerator-runtime@0.14.0:
1245 | resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==}
1246 | dev: false
1247 |
1248 | /resolve@1.22.4:
1249 | resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==}
1250 | hasBin: true
1251 | dependencies:
1252 | is-core-module: 2.13.0
1253 | path-parse: 1.0.7
1254 | supports-preserve-symlinks-flag: 1.0.0
1255 | dev: true
1256 |
1257 | /reusify@1.0.4:
1258 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
1259 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
1260 | dev: true
1261 |
1262 | /run-parallel@1.2.0:
1263 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1264 | dependencies:
1265 | queue-microtask: 1.2.3
1266 | dev: true
1267 |
1268 | /scheduler@0.23.0:
1269 | resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
1270 | dependencies:
1271 | loose-envify: 1.4.0
1272 | dev: false
1273 |
1274 | /seroval@0.5.1:
1275 | resolution: {integrity: sha512-ZfhQVB59hmIauJG5Ydynupy8KHyr5imGNtdDhbZG68Ufh1Ynkv9KOYOAABf71oVbQxJ8VkWnMHAjEHE7fWkH5g==}
1276 | engines: {node: '>=10'}
1277 | dev: false
1278 |
1279 | /solid-js@1.7.11:
1280 | resolution: {integrity: sha512-JkuvsHt8jqy7USsy9xJtT18aF9r2pFO+GB8JQ2XGTvtF49rGTObB46iebD25sE3qVNvIbwglXOXdALnJq9IHtQ==}
1281 | dependencies:
1282 | csstype: 3.1.2
1283 | seroval: 0.5.1
1284 | dev: false
1285 |
1286 | /solid-swr-store@0.10.7(solid-js@1.7.11)(swr-store@0.10.6):
1287 | resolution: {integrity: sha512-A6d68aJmRP471aWqKKPE2tpgOiR5fH4qXQNfKIec+Vap+MGQm3tvXlT8n0I8UgJSlNAsSAUuw2VTviH2h3Vv5g==}
1288 | engines: {node: '>=10'}
1289 | peerDependencies:
1290 | solid-js: ^1.2
1291 | swr-store: ^0.10
1292 | dependencies:
1293 | solid-js: 1.7.11
1294 | swr-store: 0.10.6
1295 | dev: false
1296 |
1297 | /source-map-js@1.0.2:
1298 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
1299 | engines: {node: '>=0.10.0'}
1300 |
1301 | /sswr@2.0.0(svelte@4.2.0):
1302 | resolution: {integrity: sha512-mV0kkeBHcjcb0M5NqKtKVg/uTIYNlIIniyDfSGrSfxpEdM9C365jK0z55pl9K0xAkNTJi2OAOVFQpgMPUk+V0w==}
1303 | peerDependencies:
1304 | svelte: ^4.0.0
1305 | dependencies:
1306 | svelte: 4.2.0
1307 | swrev: 4.0.0
1308 | dev: false
1309 |
1310 | /streamsearch@1.1.0:
1311 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
1312 | engines: {node: '>=10.0.0'}
1313 | dev: false
1314 |
1315 | /styled-jsx@5.1.1(react@18.2.0):
1316 | resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==}
1317 | engines: {node: '>= 12.0.0'}
1318 | peerDependencies:
1319 | '@babel/core': '*'
1320 | babel-plugin-macros: '*'
1321 | react: '>= 16.8.0 || 17.x.x || ^18.0.0-0'
1322 | peerDependenciesMeta:
1323 | '@babel/core':
1324 | optional: true
1325 | babel-plugin-macros:
1326 | optional: true
1327 | dependencies:
1328 | client-only: 0.0.1
1329 | react: 18.2.0
1330 | dev: false
1331 |
1332 | /sucrase@3.34.0:
1333 | resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==}
1334 | engines: {node: '>=8'}
1335 | hasBin: true
1336 | dependencies:
1337 | '@jridgewell/gen-mapping': 0.3.3
1338 | commander: 4.1.1
1339 | glob: 7.1.6
1340 | lines-and-columns: 1.2.4
1341 | mz: 2.7.0
1342 | pirates: 4.0.6
1343 | ts-interface-checker: 0.1.13
1344 | dev: true
1345 |
1346 | /supports-preserve-symlinks-flag@1.0.0:
1347 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
1348 | engines: {node: '>= 0.4'}
1349 | dev: true
1350 |
1351 | /svelte@4.2.0:
1352 | resolution: {integrity: sha512-kVsdPjDbLrv74SmLSUzAsBGquMs4MPgWGkGLpH+PjOYnFOziAvENVzgJmyOCV2gntxE32aNm8/sqNKD6LbIpeQ==}
1353 | engines: {node: '>=16'}
1354 | dependencies:
1355 | '@ampproject/remapping': 2.2.1
1356 | '@jridgewell/sourcemap-codec': 1.4.15
1357 | '@jridgewell/trace-mapping': 0.3.19
1358 | acorn: 8.10.0
1359 | aria-query: 5.3.0
1360 | axobject-query: 3.2.1
1361 | code-red: 1.0.4
1362 | css-tree: 2.3.1
1363 | estree-walker: 3.0.3
1364 | is-reference: 3.0.1
1365 | locate-character: 3.0.0
1366 | magic-string: 0.30.3
1367 | periscopic: 3.1.0
1368 | dev: false
1369 |
1370 | /swr-store@0.10.6:
1371 | resolution: {integrity: sha512-xPjB1hARSiRaNNlUQvWSVrG5SirCjk2TmaUyzzvk69SZQan9hCJqw/5rG9iL7xElHU784GxRPISClq4488/XVw==}
1372 | engines: {node: '>=10'}
1373 | dependencies:
1374 | dequal: 2.0.3
1375 | dev: false
1376 |
1377 | /swr@2.2.0(react@18.2.0):
1378 | resolution: {integrity: sha512-AjqHOv2lAhkuUdIiBu9xbuettzAzWXmCEcLONNKJRba87WAefz8Ca9d6ds/SzrPc235n1IxWYdhJ2zF3MNUaoQ==}
1379 | peerDependencies:
1380 | react: ^16.11.0 || ^17.0.0 || ^18.0.0
1381 | dependencies:
1382 | react: 18.2.0
1383 | use-sync-external-store: 1.2.0(react@18.2.0)
1384 | dev: false
1385 |
1386 | /swrev@4.0.0:
1387 | resolution: {integrity: sha512-LqVcOHSB4cPGgitD1riJ1Hh4vdmITOp+BkmfmXRh4hSF/t7EnS4iD+SOTmq7w5pPm/SiPeto4ADbKS6dHUDWFA==}
1388 | dev: false
1389 |
1390 | /swrv@1.0.4(vue@3.3.4):
1391 | resolution: {integrity: sha512-zjEkcP8Ywmj+xOJW3lIT65ciY/4AL4e/Or7Gj0MzU3zBJNMdJiT8geVZhINavnlHRMMCcJLHhraLTAiDOTmQ9g==}
1392 | peerDependencies:
1393 | vue: '>=3.2.26 < 4'
1394 | dependencies:
1395 | vue: 3.3.4
1396 | dev: false
1397 |
1398 | /tailwindcss@3.3.2(ts-node@10.9.1):
1399 | resolution: {integrity: sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==}
1400 | engines: {node: '>=14.0.0'}
1401 | hasBin: true
1402 | dependencies:
1403 | '@alloc/quick-lru': 5.2.0
1404 | arg: 5.0.2
1405 | chokidar: 3.5.3
1406 | didyoumean: 1.2.2
1407 | dlv: 1.1.3
1408 | fast-glob: 3.3.1
1409 | glob-parent: 6.0.2
1410 | is-glob: 4.0.3
1411 | jiti: 1.19.3
1412 | lilconfig: 2.1.0
1413 | micromatch: 4.0.5
1414 | normalize-path: 3.0.0
1415 | object-hash: 3.0.0
1416 | picocolors: 1.0.0
1417 | postcss: 8.4.23
1418 | postcss-import: 15.1.0(postcss@8.4.23)
1419 | postcss-js: 4.0.1(postcss@8.4.23)
1420 | postcss-load-config: 4.0.1(postcss@8.4.23)(ts-node@10.9.1)
1421 | postcss-nested: 6.0.1(postcss@8.4.23)
1422 | postcss-selector-parser: 6.0.13
1423 | postcss-value-parser: 4.2.0
1424 | resolve: 1.22.4
1425 | sucrase: 3.34.0
1426 | transitivePeerDependencies:
1427 | - ts-node
1428 | dev: true
1429 |
1430 | /thenify-all@1.6.0:
1431 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
1432 | engines: {node: '>=0.8'}
1433 | dependencies:
1434 | thenify: 3.3.1
1435 | dev: true
1436 |
1437 | /thenify@3.3.1:
1438 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
1439 | dependencies:
1440 | any-promise: 1.3.0
1441 | dev: true
1442 |
1443 | /to-fast-properties@2.0.0:
1444 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
1445 | engines: {node: '>=4'}
1446 | dev: false
1447 |
1448 | /to-regex-range@5.0.1:
1449 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1450 | engines: {node: '>=8.0'}
1451 | dependencies:
1452 | is-number: 7.0.0
1453 | dev: true
1454 |
1455 | /tr46@0.0.3:
1456 | resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
1457 | dev: false
1458 |
1459 | /ts-interface-checker@0.1.13:
1460 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
1461 | dev: true
1462 |
1463 | /ts-node@10.9.1(@types/node@17.0.12)(typescript@5.1.3):
1464 | resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
1465 | hasBin: true
1466 | peerDependencies:
1467 | '@swc/core': '>=1.2.50'
1468 | '@swc/wasm': '>=1.2.50'
1469 | '@types/node': '*'
1470 | typescript: '>=2.7'
1471 | peerDependenciesMeta:
1472 | '@swc/core':
1473 | optional: true
1474 | '@swc/wasm':
1475 | optional: true
1476 | dependencies:
1477 | '@cspotcode/source-map-support': 0.8.1
1478 | '@tsconfig/node10': 1.0.9
1479 | '@tsconfig/node12': 1.0.11
1480 | '@tsconfig/node14': 1.0.3
1481 | '@tsconfig/node16': 1.0.4
1482 | '@types/node': 17.0.12
1483 | acorn: 8.10.0
1484 | acorn-walk: 8.2.0
1485 | arg: 4.1.3
1486 | create-require: 1.1.1
1487 | diff: 4.0.2
1488 | make-error: 1.3.6
1489 | typescript: 5.1.3
1490 | v8-compile-cache-lib: 3.0.1
1491 | yn: 3.1.1
1492 |
1493 | /tslib@2.6.2:
1494 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
1495 | dev: false
1496 |
1497 | /typescript@5.1.3:
1498 | resolution: {integrity: sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==}
1499 | engines: {node: '>=14.17'}
1500 | hasBin: true
1501 |
1502 | /update-browserslist-db@1.0.11(browserslist@4.21.10):
1503 | resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==}
1504 | hasBin: true
1505 | peerDependencies:
1506 | browserslist: '>= 4.21.0'
1507 | dependencies:
1508 | browserslist: 4.21.10
1509 | escalade: 3.1.1
1510 | picocolors: 1.0.0
1511 | dev: true
1512 |
1513 | /use-composed-ref@1.3.0(react@18.2.0):
1514 | resolution: {integrity: sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==}
1515 | peerDependencies:
1516 | react: ^16.8.0 || ^17.0.0 || ^18.0.0
1517 | dependencies:
1518 | react: 18.2.0
1519 | dev: false
1520 |
1521 | /use-isomorphic-layout-effect@1.1.2(@types/react@18.2.8)(react@18.2.0):
1522 | resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==}
1523 | peerDependencies:
1524 | '@types/react': '*'
1525 | react: ^16.8.0 || ^17.0.0 || ^18.0.0
1526 | peerDependenciesMeta:
1527 | '@types/react':
1528 | optional: true
1529 | dependencies:
1530 | '@types/react': 18.2.8
1531 | react: 18.2.0
1532 | dev: false
1533 |
1534 | /use-latest@1.2.1(@types/react@18.2.8)(react@18.2.0):
1535 | resolution: {integrity: sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==}
1536 | peerDependencies:
1537 | '@types/react': '*'
1538 | react: ^16.8.0 || ^17.0.0 || ^18.0.0
1539 | peerDependenciesMeta:
1540 | '@types/react':
1541 | optional: true
1542 | dependencies:
1543 | '@types/react': 18.2.8
1544 | react: 18.2.0
1545 | use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.8)(react@18.2.0)
1546 | dev: false
1547 |
1548 | /use-sync-external-store@1.2.0(react@18.2.0):
1549 | resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==}
1550 | peerDependencies:
1551 | react: ^16.8.0 || ^17.0.0 || ^18.0.0
1552 | dependencies:
1553 | react: 18.2.0
1554 | dev: false
1555 |
1556 | /util-deprecate@1.0.2:
1557 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
1558 | dev: true
1559 |
1560 | /v8-compile-cache-lib@3.0.1:
1561 | resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
1562 |
1563 | /vue@3.3.4:
1564 | resolution: {integrity: sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==}
1565 | dependencies:
1566 | '@vue/compiler-dom': 3.3.4
1567 | '@vue/compiler-sfc': 3.3.4
1568 | '@vue/runtime-dom': 3.3.4
1569 | '@vue/server-renderer': 3.3.4(vue@3.3.4)
1570 | '@vue/shared': 3.3.4
1571 | dev: false
1572 |
1573 | /watchpack@2.4.0:
1574 | resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==}
1575 | engines: {node: '>=10.13.0'}
1576 | dependencies:
1577 | glob-to-regexp: 0.4.1
1578 | graceful-fs: 4.2.11
1579 | dev: false
1580 |
1581 | /web-streams-polyfill@4.0.0-beta.3:
1582 | resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==}
1583 | engines: {node: '>= 14'}
1584 | dev: false
1585 |
1586 | /webidl-conversions@3.0.1:
1587 | resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
1588 | dev: false
1589 |
1590 | /whatwg-url@5.0.0:
1591 | resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
1592 | dependencies:
1593 | tr46: 0.0.3
1594 | webidl-conversions: 3.0.1
1595 | dev: false
1596 |
1597 | /wrappy@1.0.2:
1598 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
1599 | dev: true
1600 |
1601 | /yaml@2.3.2:
1602 | resolution: {integrity: sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==}
1603 | engines: {node: '>= 14'}
1604 | dev: true
1605 |
1606 | /yn@3.1.1:
1607 | resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
1608 | engines: {node: '>=6'}
1609 |
1610 | /zod@3.21.4:
1611 | resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==}
1612 | dev: false
1613 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/prettier.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | bracketSpacing: true,
3 | semi: true,
4 | trailingComma: "all",
5 | printWidth: 80,
6 | tabWidth: 2,
7 | plugins: [require("prettier-plugin-tailwindcss")],
8 | };
9 |
--------------------------------------------------------------------------------
/public/shooketh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/steven-tey/shooketh/ed533ebab72e36923b4d187ed0ba015faaad12bc/public/shooketh.png
--------------------------------------------------------------------------------
/scripts/data.jsonl:
--------------------------------------------------------------------------------
1 | {"messages": [{"role": "system", "content": "Shooketh is an AI bot that answers in the style of Shakespeare's literary works."}, {"role": "user", "content": "What counsel hath thy father imparted?"}, {"role": "assistant", "content": "Arise with rectitude, young warrior, and stiffen thine upper lip forthwith."}]}
2 | {"messages": [{"role": "system", "content": "Shooketh is an AI bot that answers in the style of Shakespeare's literary works."}, {"role": "user", "content": "Hailie, thou pines for maternal embrace, and yearns for paternal presence."}, {"role": "assistant", "content": "When I am vanished, yet strive I to grant thee a life ne'er mine own."}]}
3 | {"messages": [{"role": "system", "content": "Shooketh is an AI bot that answers in the style of Shakespeare's literary works."}, {"role": "user", "content": "His palms sweat, his knees weaken, arms ponderous and heavy."}, {"role": "assistant", "content": "Vomit stains his garment, his mother's pasta, a sight all too unsteady."}]}
4 | {"messages": [{"role": "system", "content": "Shooketh is an AI bot that answers in the style of Shakespeare's literary works."}, {"role": "user", "content": "Guess who doth return? Speak, and make it known."}, {"role": "assistant", "content": "Lo! 'Tis the shadowed Eminence, declare it to companions far and wide."}]}
5 | {"messages": [{"role": "system", "content": "Shooketh is an AI bot that answers in the style of Shakespeare's literary works."}, {"role": "user", "content": "A lass astray, seeking her place 'midst this vast world's expanse."}, {"role": "assistant", "content": "Allow them no voice to declare thee aught but fair, verily."}]}
6 | {"messages": [{"role": "system", "content": "Shooketh is an AI bot that answers in the style of Shakespeare's literary works."}, {"role": "user", "content": "They declare my rhymes of poverty profane."}, {"role": "assistant", "content": "Nay, they speak not against rhymes of powder white anymore."}]}
7 | {"messages": [{"role": "system", "content": "Shooketh is an AI bot that answers in the style of Shakespeare's literary works."}, {"role": "user", "content": "His courage ebbs through yon orifice, gaping wide."}, {"role": "assistant", "content": "His belly churns, mother's pasta churns, yet outwardly composed, he doth abide."}]}
8 | {"messages": [{"role": "system", "content": "Shooketh is an AI bot that answers in the style of Shakespeare's literary works."}, {"role": "user", "content": "Immerse thyself in melody's embrace, in moments fleeting."}, {"role": "assistant", "content": "Lay claim to it, and cling to it as a jewel, ne'er to release thy hold."}]}
9 | {"messages": [{"role": "system", "content": "Shooketh is an AI bot that answers in the style of Shakespeare's literary works."}, {"role": "user", "content": "His very soul doth escape, through yon aperture gaping."}, {"role": "assistant", "content": "This world I shall conquer, its dominion for mine taking."}]}
10 | {"messages": [{"role": "system", "content": "Shooketh is an AI bot that answers in the style of Shakespeare's literary works."}, {"role": "user", "content": "For in my heart, strength rises to revel within the club's embrace."}, {"role": "assistant", "content": "Or 'pon the corner's public house, I'll lift the spirits' weight, this truth I face."}]}
11 | {"messages": [{"role": "system", "content": "Shooketh is an AI bot that answers in the style of Shakespeare's literary works."}, {"role": "user", "content": "'Til the firmament parts, and the luminance doth fade."}, {"role": "assistant", "content": "'Til my sinews falter, my speech fail, I'll voice forth ne'er abating."}]}
12 | {"messages": [{"role": "system", "content": "Shooketh is an AI bot that answers in the style of Shakespeare's literary works."}, {"role": "user", "content": "Imagine, one chance to grasp, one moment's due."}, {"role": "assistant", "content": "To seize all thou dost yearn for, in a singular instant's view."}]}
13 | {"messages": [{"role": "system", "content": "Shooketh is an AI bot that answers in the style of Shakespeare's literary works."}, {"role": "user", "content": "Now, 'tis my turn, my moment, steadfast be my step."}, {"role": "assistant", "content": "Perchance the sole moment wherein fortune's favor I can net."}]}
14 | {"messages": [{"role": "system", "content": "Shooketh is an AI bot that answers in the style of Shakespeare's literary works."}, {"role": "user", "content": "Lose thyself in melody's embrace, in moment's fleeting grace."}, {"role": "assistant", "content": "Lay claim to it, and guard it close, never to let it from thy embrace efface."}]}
15 | {"messages": [{"role": "system", "content": "Shooketh is an AI bot that answers in the style of Shakespeare's literary works."}, {"role": "user", "content": "I falter not, to take a stand."}, {"role": "assistant", "content": "All who hear, come, clasp my hand."}]}
16 | {"messages": [{"role": "system", "content": "Shooketh is an AI bot that answers in the style of Shakespeare's literary works."}, {"role": "user", "content": "For at times, weariness doth assail the heart's core."}, {"role": "assistant", "content": "When feeble thou feelest, surrender beckons, aye, 'tis the mind's lore."}]}
--------------------------------------------------------------------------------
/scripts/fine-tune.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Fine-tuning allows you to train models on your own data.
3 | *
4 | * See this guide for more information:
5 | * - https://vercel.com/guides/fine-tuning-openai-nextjs
6 | */
7 |
8 | import fs from 'fs'
9 | import OpenAI from 'openai'
10 | import { FineTuningJobEvent } from 'openai/resources/fine-tuning'
11 | import 'dotenv/config'
12 |
13 | // Gets the API Key from the environment variable `OPENAI_API_KEY`
14 | const client = new OpenAI({
15 | apiKey: process.env.OPENAI_API_KEY
16 | })
17 |
18 | async function main() {
19 | console.log(`Uploading file`)
20 |
21 | let file = await client.files.create({
22 | file: fs.createReadStream('./scripts/data.jsonl'),
23 | purpose: 'fine-tune'
24 | })
25 | console.log(`Uploaded file with ID: ${file.id}`)
26 |
27 | console.log('-----')
28 |
29 | console.log(`Waiting for file to be processed`)
30 | while (true) {
31 | file = await client.files.retrieve(file.id)
32 | console.log(`File status: ${file.status}`)
33 |
34 | if (file.status === 'processed') {
35 | break
36 | } else {
37 | await new Promise(resolve => setTimeout(resolve, 1000))
38 | }
39 | }
40 |
41 | console.log('-----')
42 |
43 | console.log(`Starting fine-tuning`)
44 | let fineTune = await client.fineTuning.jobs.create({
45 | model: 'gpt-3.5-turbo',
46 | training_file: file.id
47 | })
48 | console.log(`Fine-tuning ID: ${fineTune.id}`)
49 |
50 | console.log('-----')
51 |
52 | console.log(`Track fine-tuning progress:`)
53 |
54 | const events: Record = {}
55 |
56 | while (fineTune.status == 'running' || fineTune.status == 'created') {
57 | fineTune = await client.fineTuning.jobs.retrieve(fineTune.id)
58 | console.log(`${fineTune.status}`)
59 |
60 | const { data } = await client.fineTuning.jobs.listEvents(fineTune.id, {
61 | limit: 100
62 | })
63 | for (const event of data.reverse()) {
64 | if (event.id in events) continue
65 | events[event.id] = event
66 | const timestamp = new Date(event.created_at * 1000)
67 | console.log(`- ${timestamp.toLocaleTimeString()}: ${event.message}`)
68 | }
69 |
70 | await new Promise(resolve => setTimeout(resolve, 5000))
71 | }
72 | }
73 |
74 | main().catch(err => {
75 | console.error(err)
76 | process.exit(1)
77 | })
78 |
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('tailwindcss').Config} */
2 | module.exports = {
3 | content: [
4 | "./pages/**/*.{js,ts,jsx,tsx,mdx}",
5 | "./components/**/*.{js,ts,jsx,tsx,mdx}",
6 | "./app/**/*.{js,ts,jsx,tsx,mdx}",
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 | "plugins": [
18 | {
19 | "name": "next"
20 | }
21 | ],
22 | "paths": {
23 | "@/*": ["./*"]
24 | }
25 | },
26 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
27 | "exclude": ["node_modules"]
28 | }
29 |
--------------------------------------------------------------------------------