diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index b8b8649..006d54a 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -45,7 +45,6 @@ jobs:
with:
wranglerVersion: '* -w'
packageManager: pnpm
- workingDirectory: 'packages/bolt'
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
command: pages deploy
diff --git a/README.md b/README.md
index d93d679..424b535 100644
--- a/README.md
+++ b/README.md
@@ -1,55 +1,84 @@
-# Bolt Monorepo
+# Bolt
-Welcome to the Bolt monorepo! This repository contains the codebase for Bolt, an AI assistant developed by StackBlitz.
+Bolt is an AI assistant developed by StackBlitz. This package contains the UI interface for Bolt as well as the server components, built using [Remix Run](https://remix.run/).
-## Repository Structure
+## Prerequisites
-Currently, this monorepo contains a single package:
-
-- [`bolt`](packages/bolt): The main package containing the UI interface for Bolt as well as the server components.
-
-As the project grows, additional packages may be added to this workspace.
-
-## Getting Started
-
-### Prerequisites
+Before you begin, ensure you have the following installed:
- Node.js (v20.15.1)
- pnpm (v9.4.0)
-### Installation
+## Setup
-1. Clone the repository:
+1. Clone the repository (if you haven't already):
```bash
git clone https://github.com/stackblitz/bolt.git
-cd bolt
```
2. Install dependencies:
```bash
-pnpm i
+pnpm install
```
-3. Optionally, init git hooks:
+3. Create a `.env.local` file in the root directory and add your Anthropic API key:
-```bash
-pnpmx husky
+```
+ANTHROPIC_API_KEY=XXX
```
-### Development
+Optionally, you an set the debug level or disable authentication:
-To start developing the Bolt UI:
-
-1. Navigate to the bolt package:
-
-```bash
-cd packages/bolt
+```
+VITE_LOG_LEVEL=debug
+VITE_DISABLE_AUTH=1
```
-2. Start the development server:
+If you want to run authentication against a local StackBlitz instance, add:
+
+```
+VITE_CLIENT_ORIGIN=https://local.stackblitz.com:3000
+```
+
+**Important**: Never commit your `.env.local` file to version control. It's already included in .gitignore.
+
+## Available Scripts
+
+- `pnpm run dev`: Starts the development server.
+- `pnpm run build`: Builds the project.
+- `pnpm run start`: Runs the built application locally using Wrangler Pages. This script uses `bindings.sh` to set up necessary bindings so you don't have to duplicate environment variables.
+- `pnpm run preview`: Builds the project and then starts it locally, useful for testing the production build. Note, HTTP streaming currently doesn't work as expected with `wrangler pages dev`.
+- `pnpm test:` Runs the test suite using Vitest.
+- `pnpm run typecheck`: Runs TypeScript type checking.
+- `pnpm run typegen`: Generates TypeScript types using Wrangler.
+- `pnpm run deploy`: Builds the project and deploys it to Cloudflare Pages.
+
+## Development
+
+To start the development server:
```bash
pnpm run dev
```
+
+This will start the Remix Vite development server.
+
+## Testing
+
+Run the test suite with:
+
+```bash
+pnpm test
+```
+
+## Deployment
+
+To deploy the application to Cloudflare Pages:
+
+```bash
+pnpm run deploy
+```
+
+Make sure you have the necessary permissions and Wrangler is correctly configured for your Cloudflare account.
diff --git a/packages/bolt/app/components/chat/Artifact.tsx b/app/components/chat/Artifact.tsx
similarity index 100%
rename from packages/bolt/app/components/chat/Artifact.tsx
rename to app/components/chat/Artifact.tsx
diff --git a/packages/bolt/app/components/chat/AssistantMessage.tsx b/app/components/chat/AssistantMessage.tsx
similarity index 100%
rename from packages/bolt/app/components/chat/AssistantMessage.tsx
rename to app/components/chat/AssistantMessage.tsx
diff --git a/packages/bolt/app/components/chat/BaseChat.module.scss b/app/components/chat/BaseChat.module.scss
similarity index 100%
rename from packages/bolt/app/components/chat/BaseChat.module.scss
rename to app/components/chat/BaseChat.module.scss
diff --git a/packages/bolt/app/components/chat/BaseChat.tsx b/app/components/chat/BaseChat.tsx
similarity index 100%
rename from packages/bolt/app/components/chat/BaseChat.tsx
rename to app/components/chat/BaseChat.tsx
diff --git a/packages/bolt/app/components/chat/Chat.client.tsx b/app/components/chat/Chat.client.tsx
similarity index 94%
rename from packages/bolt/app/components/chat/Chat.client.tsx
rename to app/components/chat/Chat.client.tsx
index e421a08..dff7598 100644
--- a/packages/bolt/app/components/chat/Chat.client.tsx
+++ b/app/components/chat/Chat.client.tsx
@@ -4,7 +4,6 @@ import { useChat } from 'ai/react';
import { useAnimate } from 'framer-motion';
import { memo, useEffect, useRef, useState } from 'react';
import { cssTransition, toast, ToastContainer } from 'react-toastify';
-import { AnalyticsAction, AnalyticsTrackEvent, sendAnalyticsEvent } from '~/lib/analytics';
import { useMessageParser, usePromptEnhancer, useShortcuts, useSnapScroll } from '~/lib/hooks';
import { useChatHistory } from '~/lib/persistence';
import { chatStore } from '~/lib/stores/chat';
@@ -195,18 +194,6 @@ export const ChatImpl = memo(({ initialMessages, storeMessageHistory }: ChatProp
resetEnhancer();
textareaRef.current?.blur();
-
- const event = messages.length === 0 ? AnalyticsTrackEvent.ChatCreated : AnalyticsTrackEvent.MessageSent;
-
- sendAnalyticsEvent({
- action: AnalyticsAction.Track,
- payload: {
- event,
- properties: {
- message: _input,
- },
- },
- });
};
const [messageRef, scrollRef] = useSnapScroll();
diff --git a/packages/bolt/app/components/chat/CodeBlock.module.scss b/app/components/chat/CodeBlock.module.scss
similarity index 100%
rename from packages/bolt/app/components/chat/CodeBlock.module.scss
rename to app/components/chat/CodeBlock.module.scss
diff --git a/packages/bolt/app/components/chat/CodeBlock.tsx b/app/components/chat/CodeBlock.tsx
similarity index 100%
rename from packages/bolt/app/components/chat/CodeBlock.tsx
rename to app/components/chat/CodeBlock.tsx
diff --git a/packages/bolt/app/components/chat/Markdown.module.scss b/app/components/chat/Markdown.module.scss
similarity index 100%
rename from packages/bolt/app/components/chat/Markdown.module.scss
rename to app/components/chat/Markdown.module.scss
diff --git a/packages/bolt/app/components/chat/Markdown.tsx b/app/components/chat/Markdown.tsx
similarity index 100%
rename from packages/bolt/app/components/chat/Markdown.tsx
rename to app/components/chat/Markdown.tsx
diff --git a/packages/bolt/app/components/chat/Messages.client.tsx b/app/components/chat/Messages.client.tsx
similarity index 100%
rename from packages/bolt/app/components/chat/Messages.client.tsx
rename to app/components/chat/Messages.client.tsx
diff --git a/packages/bolt/app/components/chat/SendButton.client.tsx b/app/components/chat/SendButton.client.tsx
similarity index 100%
rename from packages/bolt/app/components/chat/SendButton.client.tsx
rename to app/components/chat/SendButton.client.tsx
diff --git a/packages/bolt/app/components/chat/UserMessage.tsx b/app/components/chat/UserMessage.tsx
similarity index 100%
rename from packages/bolt/app/components/chat/UserMessage.tsx
rename to app/components/chat/UserMessage.tsx
diff --git a/packages/bolt/app/components/editor/codemirror/BinaryContent.tsx b/app/components/editor/codemirror/BinaryContent.tsx
similarity index 100%
rename from packages/bolt/app/components/editor/codemirror/BinaryContent.tsx
rename to app/components/editor/codemirror/BinaryContent.tsx
diff --git a/packages/bolt/app/components/editor/codemirror/CodeMirrorEditor.tsx b/app/components/editor/codemirror/CodeMirrorEditor.tsx
similarity index 100%
rename from packages/bolt/app/components/editor/codemirror/CodeMirrorEditor.tsx
rename to app/components/editor/codemirror/CodeMirrorEditor.tsx
diff --git a/packages/bolt/app/components/editor/codemirror/cm-theme.ts b/app/components/editor/codemirror/cm-theme.ts
similarity index 100%
rename from packages/bolt/app/components/editor/codemirror/cm-theme.ts
rename to app/components/editor/codemirror/cm-theme.ts
diff --git a/packages/bolt/app/components/editor/codemirror/indent.ts b/app/components/editor/codemirror/indent.ts
similarity index 100%
rename from packages/bolt/app/components/editor/codemirror/indent.ts
rename to app/components/editor/codemirror/indent.ts
diff --git a/packages/bolt/app/components/editor/codemirror/languages.ts b/app/components/editor/codemirror/languages.ts
similarity index 100%
rename from packages/bolt/app/components/editor/codemirror/languages.ts
rename to app/components/editor/codemirror/languages.ts
diff --git a/packages/bolt/app/components/header/Header.tsx b/app/components/header/Header.tsx
similarity index 100%
rename from packages/bolt/app/components/header/Header.tsx
rename to app/components/header/Header.tsx
diff --git a/packages/bolt/app/components/header/HeaderActionButtons.client.tsx b/app/components/header/HeaderActionButtons.client.tsx
similarity index 94%
rename from packages/bolt/app/components/header/HeaderActionButtons.client.tsx
rename to app/components/header/HeaderActionButtons.client.tsx
index 80ed06e..6f8e843 100644
--- a/packages/bolt/app/components/header/HeaderActionButtons.client.tsx
+++ b/app/components/header/HeaderActionButtons.client.tsx
@@ -2,7 +2,6 @@ import { useStore } from '@nanostores/react';
import { chatStore } from '~/lib/stores/chat';
import { workbenchStore } from '~/lib/stores/workbench';
import { classNames } from '~/utils/classNames';
-import { OpenStackBlitz } from './OpenStackBlitz.client';
interface HeaderActionButtonsProps {}
@@ -40,9 +39,6 @@ export function HeaderActionButtons({}: HeaderActionButtonsProps) {
-
-
-
);
}
diff --git a/packages/bolt/app/components/sidebar/HistoryItem.tsx b/app/components/sidebar/HistoryItem.tsx
similarity index 100%
rename from packages/bolt/app/components/sidebar/HistoryItem.tsx
rename to app/components/sidebar/HistoryItem.tsx
diff --git a/packages/bolt/app/components/sidebar/Menu.client.tsx b/app/components/sidebar/Menu.client.tsx
similarity index 100%
rename from packages/bolt/app/components/sidebar/Menu.client.tsx
rename to app/components/sidebar/Menu.client.tsx
diff --git a/packages/bolt/app/components/sidebar/date-binning.ts b/app/components/sidebar/date-binning.ts
similarity index 100%
rename from packages/bolt/app/components/sidebar/date-binning.ts
rename to app/components/sidebar/date-binning.ts
diff --git a/packages/bolt/app/components/ui/Dialog.tsx b/app/components/ui/Dialog.tsx
similarity index 100%
rename from packages/bolt/app/components/ui/Dialog.tsx
rename to app/components/ui/Dialog.tsx
diff --git a/packages/bolt/app/components/ui/IconButton.tsx b/app/components/ui/IconButton.tsx
similarity index 100%
rename from packages/bolt/app/components/ui/IconButton.tsx
rename to app/components/ui/IconButton.tsx
diff --git a/packages/bolt/app/components/ui/LoadingDots.tsx b/app/components/ui/LoadingDots.tsx
similarity index 100%
rename from packages/bolt/app/components/ui/LoadingDots.tsx
rename to app/components/ui/LoadingDots.tsx
diff --git a/packages/bolt/app/components/ui/PanelHeader.tsx b/app/components/ui/PanelHeader.tsx
similarity index 100%
rename from packages/bolt/app/components/ui/PanelHeader.tsx
rename to app/components/ui/PanelHeader.tsx
diff --git a/packages/bolt/app/components/ui/PanelHeaderButton.tsx b/app/components/ui/PanelHeaderButton.tsx
similarity index 100%
rename from packages/bolt/app/components/ui/PanelHeaderButton.tsx
rename to app/components/ui/PanelHeaderButton.tsx
diff --git a/packages/bolt/app/components/ui/Slider.tsx b/app/components/ui/Slider.tsx
similarity index 100%
rename from packages/bolt/app/components/ui/Slider.tsx
rename to app/components/ui/Slider.tsx
diff --git a/packages/bolt/app/components/ui/ThemeSwitch.tsx b/app/components/ui/ThemeSwitch.tsx
similarity index 100%
rename from packages/bolt/app/components/ui/ThemeSwitch.tsx
rename to app/components/ui/ThemeSwitch.tsx
diff --git a/packages/bolt/app/components/workbench/EditorPanel.tsx b/app/components/workbench/EditorPanel.tsx
similarity index 100%
rename from packages/bolt/app/components/workbench/EditorPanel.tsx
rename to app/components/workbench/EditorPanel.tsx
diff --git a/packages/bolt/app/components/workbench/FileBreadcrumb.tsx b/app/components/workbench/FileBreadcrumb.tsx
similarity index 100%
rename from packages/bolt/app/components/workbench/FileBreadcrumb.tsx
rename to app/components/workbench/FileBreadcrumb.tsx
diff --git a/packages/bolt/app/components/workbench/FileTree.tsx b/app/components/workbench/FileTree.tsx
similarity index 100%
rename from packages/bolt/app/components/workbench/FileTree.tsx
rename to app/components/workbench/FileTree.tsx
diff --git a/packages/bolt/app/components/workbench/PortDropdown.tsx b/app/components/workbench/PortDropdown.tsx
similarity index 100%
rename from packages/bolt/app/components/workbench/PortDropdown.tsx
rename to app/components/workbench/PortDropdown.tsx
diff --git a/packages/bolt/app/components/workbench/Preview.tsx b/app/components/workbench/Preview.tsx
similarity index 100%
rename from packages/bolt/app/components/workbench/Preview.tsx
rename to app/components/workbench/Preview.tsx
diff --git a/packages/bolt/app/components/workbench/Workbench.client.tsx b/app/components/workbench/Workbench.client.tsx
similarity index 100%
rename from packages/bolt/app/components/workbench/Workbench.client.tsx
rename to app/components/workbench/Workbench.client.tsx
diff --git a/packages/bolt/app/components/workbench/terminal/Terminal.tsx b/app/components/workbench/terminal/Terminal.tsx
similarity index 100%
rename from packages/bolt/app/components/workbench/terminal/Terminal.tsx
rename to app/components/workbench/terminal/Terminal.tsx
diff --git a/packages/bolt/app/components/workbench/terminal/theme.ts b/app/components/workbench/terminal/theme.ts
similarity index 100%
rename from packages/bolt/app/components/workbench/terminal/theme.ts
rename to app/components/workbench/terminal/theme.ts
diff --git a/packages/bolt/app/entry.client.tsx b/app/entry.client.tsx
similarity index 100%
rename from packages/bolt/app/entry.client.tsx
rename to app/entry.client.tsx
diff --git a/packages/bolt/app/entry.server.tsx b/app/entry.server.tsx
similarity index 100%
rename from packages/bolt/app/entry.server.tsx
rename to app/entry.server.tsx
diff --git a/packages/bolt/app/lib/.server/auth.ts b/app/lib/.server/auth.ts
similarity index 100%
rename from packages/bolt/app/lib/.server/auth.ts
rename to app/lib/.server/auth.ts
diff --git a/packages/bolt/app/lib/.server/llm/api-key.ts b/app/lib/.server/llm/api-key.ts
similarity index 100%
rename from packages/bolt/app/lib/.server/llm/api-key.ts
rename to app/lib/.server/llm/api-key.ts
diff --git a/packages/bolt/app/lib/.server/llm/constants.ts b/app/lib/.server/llm/constants.ts
similarity index 100%
rename from packages/bolt/app/lib/.server/llm/constants.ts
rename to app/lib/.server/llm/constants.ts
diff --git a/packages/bolt/app/lib/.server/llm/model.ts b/app/lib/.server/llm/model.ts
similarity index 100%
rename from packages/bolt/app/lib/.server/llm/model.ts
rename to app/lib/.server/llm/model.ts
diff --git a/packages/bolt/app/lib/.server/llm/prompts.ts b/app/lib/.server/llm/prompts.ts
similarity index 100%
rename from packages/bolt/app/lib/.server/llm/prompts.ts
rename to app/lib/.server/llm/prompts.ts
diff --git a/packages/bolt/app/lib/.server/llm/stream-text.ts b/app/lib/.server/llm/stream-text.ts
similarity index 100%
rename from packages/bolt/app/lib/.server/llm/stream-text.ts
rename to app/lib/.server/llm/stream-text.ts
diff --git a/packages/bolt/app/lib/.server/llm/switchable-stream.ts b/app/lib/.server/llm/switchable-stream.ts
similarity index 100%
rename from packages/bolt/app/lib/.server/llm/switchable-stream.ts
rename to app/lib/.server/llm/switchable-stream.ts
diff --git a/packages/bolt/app/lib/.server/sessions.ts b/app/lib/.server/sessions.ts
similarity index 100%
rename from packages/bolt/app/lib/.server/sessions.ts
rename to app/lib/.server/sessions.ts
diff --git a/app/lib/analytics.ts b/app/lib/analytics.ts
new file mode 100644
index 0000000..7be24d3
--- /dev/null
+++ b/app/lib/analytics.ts
@@ -0,0 +1,38 @@
+import { CLIENT_ORIGIN } from '~/lib/constants';
+import { request as doRequest } from '~/lib/fetch';
+
+export interface Identity {
+ userId?: string | null;
+ guestId?: string | null;
+ segmentWriteKey?: string | null;
+ avatar?: string;
+}
+
+const MESSAGE_PREFIX = 'Bolt';
+
+export enum AnalyticsTrackEvent {
+ MessageSent = `${MESSAGE_PREFIX} Message Sent`,
+ MessageComplete = `${MESSAGE_PREFIX} Message Complete`,
+ ChatCreated = `${MESSAGE_PREFIX} Chat Created`,
+}
+
+export async function identifyUser(access: string): Promise {
+ const response = await doRequest(`${CLIENT_ORIGIN}/api/identify`, {
+ method: 'GET',
+ headers: { authorization: `Bearer ${access}` },
+ });
+
+ const body = await response.json();
+
+ if (!response.ok) {
+ return undefined;
+ }
+
+ // convert numerical identity values to strings
+ const stringified = Object.entries(body).map(([key, value]) => [
+ key,
+ typeof value === 'number' ? value.toString() : value,
+ ]);
+
+ return Object.fromEntries(stringified) as Identity;
+}
diff --git a/packages/bolt/app/lib/auth.ts b/app/lib/auth.ts
similarity index 100%
rename from packages/bolt/app/lib/auth.ts
rename to app/lib/auth.ts
diff --git a/packages/bolt/app/lib/constants.ts b/app/lib/constants.ts
similarity index 100%
rename from packages/bolt/app/lib/constants.ts
rename to app/lib/constants.ts
diff --git a/packages/bolt/app/lib/crypto.ts b/app/lib/crypto.ts
similarity index 100%
rename from packages/bolt/app/lib/crypto.ts
rename to app/lib/crypto.ts
diff --git a/packages/bolt/app/lib/fetch.ts b/app/lib/fetch.ts
similarity index 100%
rename from packages/bolt/app/lib/fetch.ts
rename to app/lib/fetch.ts
diff --git a/packages/bolt/app/lib/hooks/index.ts b/app/lib/hooks/index.ts
similarity index 100%
rename from packages/bolt/app/lib/hooks/index.ts
rename to app/lib/hooks/index.ts
diff --git a/packages/bolt/app/lib/hooks/useMessageParser.ts b/app/lib/hooks/useMessageParser.ts
similarity index 100%
rename from packages/bolt/app/lib/hooks/useMessageParser.ts
rename to app/lib/hooks/useMessageParser.ts
diff --git a/packages/bolt/app/lib/hooks/usePromptEnhancer.ts b/app/lib/hooks/usePromptEnhancer.ts
similarity index 100%
rename from packages/bolt/app/lib/hooks/usePromptEnhancer.ts
rename to app/lib/hooks/usePromptEnhancer.ts
diff --git a/packages/bolt/app/lib/hooks/useShortcuts.ts b/app/lib/hooks/useShortcuts.ts
similarity index 100%
rename from packages/bolt/app/lib/hooks/useShortcuts.ts
rename to app/lib/hooks/useShortcuts.ts
diff --git a/packages/bolt/app/lib/hooks/useSnapScroll.ts b/app/lib/hooks/useSnapScroll.ts
similarity index 100%
rename from packages/bolt/app/lib/hooks/useSnapScroll.ts
rename to app/lib/hooks/useSnapScroll.ts
diff --git a/packages/bolt/app/lib/persistence/ChatDescription.client.tsx b/app/lib/persistence/ChatDescription.client.tsx
similarity index 100%
rename from packages/bolt/app/lib/persistence/ChatDescription.client.tsx
rename to app/lib/persistence/ChatDescription.client.tsx
diff --git a/packages/bolt/app/lib/persistence/db.ts b/app/lib/persistence/db.ts
similarity index 100%
rename from packages/bolt/app/lib/persistence/db.ts
rename to app/lib/persistence/db.ts
diff --git a/packages/bolt/app/lib/persistence/index.ts b/app/lib/persistence/index.ts
similarity index 100%
rename from packages/bolt/app/lib/persistence/index.ts
rename to app/lib/persistence/index.ts
diff --git a/packages/bolt/app/lib/persistence/useChatHistory.ts b/app/lib/persistence/useChatHistory.ts
similarity index 90%
rename from packages/bolt/app/lib/persistence/useChatHistory.ts
rename to app/lib/persistence/useChatHistory.ts
index 9d6d324..e562753 100644
--- a/packages/bolt/app/lib/persistence/useChatHistory.ts
+++ b/app/lib/persistence/useChatHistory.ts
@@ -3,7 +3,6 @@ import { useState, useEffect } from 'react';
import { atom } from 'nanostores';
import type { Message } from 'ai';
import { toast } from 'react-toastify';
-import { AnalyticsAction, sendAnalyticsEvent } from '~/lib/analytics';
import { workbenchStore } from '~/lib/stores/workbench';
import { getMessages, getNextId, getUrlId, openDatabase, setMessages } from './db';
@@ -107,14 +106,4 @@ function navigateChat(nextId: string) {
url.pathname = `/chat/${nextId}`;
window.history.replaceState({}, '', url);
-
- // since the `replaceState` call doesn't trigger a page reload, we need to manually log this event
- sendAnalyticsEvent({
- action: AnalyticsAction.Page,
- payload: {
- properties: {
- url: url.href,
- },
- },
- });
}
diff --git a/packages/bolt/app/lib/runtime/__snapshots__/message-parser.spec.ts.snap b/app/lib/runtime/__snapshots__/message-parser.spec.ts.snap
similarity index 100%
rename from packages/bolt/app/lib/runtime/__snapshots__/message-parser.spec.ts.snap
rename to app/lib/runtime/__snapshots__/message-parser.spec.ts.snap
diff --git a/packages/bolt/app/lib/runtime/action-runner.ts b/app/lib/runtime/action-runner.ts
similarity index 100%
rename from packages/bolt/app/lib/runtime/action-runner.ts
rename to app/lib/runtime/action-runner.ts
diff --git a/packages/bolt/app/lib/runtime/message-parser.spec.ts b/app/lib/runtime/message-parser.spec.ts
similarity index 100%
rename from packages/bolt/app/lib/runtime/message-parser.spec.ts
rename to app/lib/runtime/message-parser.spec.ts
diff --git a/packages/bolt/app/lib/runtime/message-parser.ts b/app/lib/runtime/message-parser.ts
similarity index 100%
rename from packages/bolt/app/lib/runtime/message-parser.ts
rename to app/lib/runtime/message-parser.ts
diff --git a/packages/bolt/app/lib/stores/chat.ts b/app/lib/stores/chat.ts
similarity index 100%
rename from packages/bolt/app/lib/stores/chat.ts
rename to app/lib/stores/chat.ts
diff --git a/packages/bolt/app/lib/stores/editor.ts b/app/lib/stores/editor.ts
similarity index 100%
rename from packages/bolt/app/lib/stores/editor.ts
rename to app/lib/stores/editor.ts
diff --git a/packages/bolt/app/lib/stores/files.ts b/app/lib/stores/files.ts
similarity index 100%
rename from packages/bolt/app/lib/stores/files.ts
rename to app/lib/stores/files.ts
diff --git a/packages/bolt/app/lib/stores/previews.ts b/app/lib/stores/previews.ts
similarity index 100%
rename from packages/bolt/app/lib/stores/previews.ts
rename to app/lib/stores/previews.ts
diff --git a/packages/bolt/app/lib/stores/settings.ts b/app/lib/stores/settings.ts
similarity index 100%
rename from packages/bolt/app/lib/stores/settings.ts
rename to app/lib/stores/settings.ts
diff --git a/packages/bolt/app/lib/stores/terminal.ts b/app/lib/stores/terminal.ts
similarity index 100%
rename from packages/bolt/app/lib/stores/terminal.ts
rename to app/lib/stores/terminal.ts
diff --git a/packages/bolt/app/lib/stores/theme.ts b/app/lib/stores/theme.ts
similarity index 100%
rename from packages/bolt/app/lib/stores/theme.ts
rename to app/lib/stores/theme.ts
diff --git a/packages/bolt/app/lib/stores/workbench.ts b/app/lib/stores/workbench.ts
similarity index 100%
rename from packages/bolt/app/lib/stores/workbench.ts
rename to app/lib/stores/workbench.ts
diff --git a/packages/bolt/app/lib/webcontainer/auth.client.ts b/app/lib/webcontainer/auth.client.ts
similarity index 100%
rename from packages/bolt/app/lib/webcontainer/auth.client.ts
rename to app/lib/webcontainer/auth.client.ts
diff --git a/packages/bolt/app/lib/webcontainer/index.ts b/app/lib/webcontainer/index.ts
similarity index 100%
rename from packages/bolt/app/lib/webcontainer/index.ts
rename to app/lib/webcontainer/index.ts
diff --git a/packages/bolt/app/root.tsx b/app/root.tsx
similarity index 80%
rename from packages/bolt/app/root.tsx
rename to app/root.tsx
index e0f0fef..c122bf6 100644
--- a/packages/bolt/app/root.tsx
+++ b/app/root.tsx
@@ -1,9 +1,7 @@
import { useStore } from '@nanostores/react';
import type { LinksFunction } from '@remix-run/cloudflare';
-import { Links, Meta, Outlet, Scripts, ScrollRestoration, useLocation } from '@remix-run/react';
+import { Links, Meta, Outlet, Scripts, ScrollRestoration } from '@remix-run/react';
import tailwindReset from '@unocss/reset/tailwind-compat.css?url';
-import { useEffect } from 'react';
-import { sendAnalyticsEvent, AnalyticsAction } from './lib/analytics';
import { themeStore } from './lib/stores/theme';
import { stripIndents } from './utils/stripIndent';
@@ -55,20 +53,6 @@ const inlineThemeCode = stripIndents`
export function Layout({ children }: { children: React.ReactNode }) {
const theme = useStore(themeStore);
- const { pathname } = useLocation();
-
- // log page events when the window location changes
- useEffect(() => {
- sendAnalyticsEvent({
- action: AnalyticsAction.Page,
- payload: {
- properties: {
- url: window.location.href,
- },
- },
- });
- }, [pathname]);
-
return (
diff --git a/packages/bolt/app/routes/_index.tsx b/app/routes/_index.tsx
similarity index 100%
rename from packages/bolt/app/routes/_index.tsx
rename to app/routes/_index.tsx
diff --git a/packages/bolt/app/routes/api.chat.ts b/app/routes/api.chat.ts
similarity index 78%
rename from packages/bolt/app/routes/api.chat.ts
rename to app/routes/api.chat.ts
index 747d1e5..3b614c2 100644
--- a/packages/bolt/app/routes/api.chat.ts
+++ b/app/routes/api.chat.ts
@@ -4,14 +4,12 @@ import { MAX_RESPONSE_SEGMENTS, MAX_TOKENS } from '~/lib/.server/llm/constants';
import { CONTINUE_PROMPT } from '~/lib/.server/llm/prompts';
import { streamText, type Messages, type StreamingOptions } from '~/lib/.server/llm/stream-text';
import SwitchableStream from '~/lib/.server/llm/switchable-stream';
-import type { Session } from '~/lib/.server/sessions';
-import { AnalyticsAction, AnalyticsTrackEvent, sendEventInternal } from '~/lib/analytics';
export async function action(args: ActionFunctionArgs) {
return actionWithAuth(args, chatAction);
}
-async function chatAction({ context, request }: ActionFunctionArgs, session: Session) {
+async function chatAction({ context, request }: ActionFunctionArgs) {
const { messages } = await request.json<{ messages: Messages }>();
const stream = new SwitchableStream();
@@ -19,19 +17,8 @@ async function chatAction({ context, request }: ActionFunctionArgs, session: Ses
try {
const options: StreamingOptions = {
toolChoice: 'none',
- onFinish: async ({ text: content, finishReason, usage }) => {
+ onFinish: async ({ text: content, finishReason }) => {
if (finishReason !== 'length') {
- await sendEventInternal(session, {
- action: AnalyticsAction.Track,
- payload: {
- event: AnalyticsTrackEvent.MessageComplete,
- properties: {
- usage,
- finishReason,
- },
- },
- });
-
return stream.close();
}
diff --git a/packages/bolt/app/routes/api.enhancer.ts b/app/routes/api.enhancer.ts
similarity index 100%
rename from packages/bolt/app/routes/api.enhancer.ts
rename to app/routes/api.enhancer.ts
diff --git a/packages/bolt/app/routes/chat.$id.tsx b/app/routes/chat.$id.tsx
similarity index 100%
rename from packages/bolt/app/routes/chat.$id.tsx
rename to app/routes/chat.$id.tsx
diff --git a/packages/bolt/app/routes/login.tsx b/app/routes/login.tsx
similarity index 100%
rename from packages/bolt/app/routes/login.tsx
rename to app/routes/login.tsx
diff --git a/packages/bolt/app/routes/logout.tsx b/app/routes/logout.tsx
similarity index 100%
rename from packages/bolt/app/routes/logout.tsx
rename to app/routes/logout.tsx
diff --git a/packages/bolt/app/styles/animations.scss b/app/styles/animations.scss
similarity index 100%
rename from packages/bolt/app/styles/animations.scss
rename to app/styles/animations.scss
diff --git a/packages/bolt/app/styles/components/code.scss b/app/styles/components/code.scss
similarity index 100%
rename from packages/bolt/app/styles/components/code.scss
rename to app/styles/components/code.scss
diff --git a/packages/bolt/app/styles/components/editor.scss b/app/styles/components/editor.scss
similarity index 100%
rename from packages/bolt/app/styles/components/editor.scss
rename to app/styles/components/editor.scss
diff --git a/packages/bolt/app/styles/components/resize-handle.scss b/app/styles/components/resize-handle.scss
similarity index 100%
rename from packages/bolt/app/styles/components/resize-handle.scss
rename to app/styles/components/resize-handle.scss
diff --git a/packages/bolt/app/styles/components/terminal.scss b/app/styles/components/terminal.scss
similarity index 100%
rename from packages/bolt/app/styles/components/terminal.scss
rename to app/styles/components/terminal.scss
diff --git a/packages/bolt/app/styles/components/toast.scss b/app/styles/components/toast.scss
similarity index 100%
rename from packages/bolt/app/styles/components/toast.scss
rename to app/styles/components/toast.scss
diff --git a/packages/bolt/app/styles/index.scss b/app/styles/index.scss
similarity index 100%
rename from packages/bolt/app/styles/index.scss
rename to app/styles/index.scss
diff --git a/packages/bolt/app/styles/variables.scss b/app/styles/variables.scss
similarity index 100%
rename from packages/bolt/app/styles/variables.scss
rename to app/styles/variables.scss
diff --git a/packages/bolt/app/styles/z-index.scss b/app/styles/z-index.scss
similarity index 100%
rename from packages/bolt/app/styles/z-index.scss
rename to app/styles/z-index.scss
diff --git a/packages/bolt/app/types/actions.ts b/app/types/actions.ts
similarity index 100%
rename from packages/bolt/app/types/actions.ts
rename to app/types/actions.ts
diff --git a/packages/bolt/app/types/artifact.ts b/app/types/artifact.ts
similarity index 100%
rename from packages/bolt/app/types/artifact.ts
rename to app/types/artifact.ts
diff --git a/packages/bolt/app/types/terminal.ts b/app/types/terminal.ts
similarity index 100%
rename from packages/bolt/app/types/terminal.ts
rename to app/types/terminal.ts
diff --git a/packages/bolt/app/types/theme.ts b/app/types/theme.ts
similarity index 100%
rename from packages/bolt/app/types/theme.ts
rename to app/types/theme.ts
diff --git a/packages/bolt/app/utils/buffer.ts b/app/utils/buffer.ts
similarity index 100%
rename from packages/bolt/app/utils/buffer.ts
rename to app/utils/buffer.ts
diff --git a/packages/bolt/app/utils/classNames.ts b/app/utils/classNames.ts
similarity index 100%
rename from packages/bolt/app/utils/classNames.ts
rename to app/utils/classNames.ts
diff --git a/packages/bolt/app/utils/constants.ts b/app/utils/constants.ts
similarity index 100%
rename from packages/bolt/app/utils/constants.ts
rename to app/utils/constants.ts
diff --git a/packages/bolt/app/utils/debounce.ts b/app/utils/debounce.ts
similarity index 100%
rename from packages/bolt/app/utils/debounce.ts
rename to app/utils/debounce.ts
diff --git a/packages/bolt/app/utils/diff.ts b/app/utils/diff.ts
similarity index 100%
rename from packages/bolt/app/utils/diff.ts
rename to app/utils/diff.ts
diff --git a/packages/bolt/app/utils/easings.ts b/app/utils/easings.ts
similarity index 100%
rename from packages/bolt/app/utils/easings.ts
rename to app/utils/easings.ts
diff --git a/packages/bolt/app/utils/logger.ts b/app/utils/logger.ts
similarity index 100%
rename from packages/bolt/app/utils/logger.ts
rename to app/utils/logger.ts
diff --git a/packages/bolt/app/utils/markdown.ts b/app/utils/markdown.ts
similarity index 100%
rename from packages/bolt/app/utils/markdown.ts
rename to app/utils/markdown.ts
diff --git a/packages/bolt/app/utils/mobile.ts b/app/utils/mobile.ts
similarity index 100%
rename from packages/bolt/app/utils/mobile.ts
rename to app/utils/mobile.ts
diff --git a/packages/bolt/app/utils/promises.ts b/app/utils/promises.ts
similarity index 100%
rename from packages/bolt/app/utils/promises.ts
rename to app/utils/promises.ts
diff --git a/packages/bolt/app/utils/react.ts b/app/utils/react.ts
similarity index 100%
rename from packages/bolt/app/utils/react.ts
rename to app/utils/react.ts
diff --git a/packages/bolt/app/utils/shell.ts b/app/utils/shell.ts
similarity index 100%
rename from packages/bolt/app/utils/shell.ts
rename to app/utils/shell.ts
diff --git a/packages/bolt/app/utils/stripIndent.ts b/app/utils/stripIndent.ts
similarity index 100%
rename from packages/bolt/app/utils/stripIndent.ts
rename to app/utils/stripIndent.ts
diff --git a/packages/bolt/app/utils/terminal.ts b/app/utils/terminal.ts
similarity index 100%
rename from packages/bolt/app/utils/terminal.ts
rename to app/utils/terminal.ts
diff --git a/packages/bolt/app/utils/unreachable.ts b/app/utils/unreachable.ts
similarity index 100%
rename from packages/bolt/app/utils/unreachable.ts
rename to app/utils/unreachable.ts
diff --git a/packages/bolt/bindings.sh b/bindings.sh
similarity index 100%
rename from packages/bolt/bindings.sh
rename to bindings.sh
diff --git a/eslint.config.mjs b/eslint.config.mjs
index 8f51a0e..95df41e 100644
--- a/eslint.config.mjs
+++ b/eslint.config.mjs
@@ -28,7 +28,7 @@ export default [
},
{
files: [...tsFileExtensions, ...jsFileExtensions, '**/*.tsx'],
- ignores: ['packages/bolt/functions/*'],
+ ignores: ['functions/*'],
rules: {
'no-restricted-imports': [
'error',
diff --git a/packages/bolt/functions/[[path]].ts b/functions/[[path]].ts
similarity index 100%
rename from packages/bolt/functions/[[path]].ts
rename to functions/[[path]].ts
diff --git a/packages/bolt/icons/chat.svg b/icons/chat.svg
similarity index 100%
rename from packages/bolt/icons/chat.svg
rename to icons/chat.svg
diff --git a/packages/bolt/icons/logo-text.svg b/icons/logo-text.svg
similarity index 100%
rename from packages/bolt/icons/logo-text.svg
rename to icons/logo-text.svg
diff --git a/packages/bolt/icons/logo.svg b/icons/logo.svg
similarity index 100%
rename from packages/bolt/icons/logo.svg
rename to icons/logo.svg
diff --git a/packages/bolt/icons/stars.svg b/icons/stars.svg
similarity index 100%
rename from packages/bolt/icons/stars.svg
rename to icons/stars.svg
diff --git a/packages/bolt/load-context.ts b/load-context.ts
similarity index 100%
rename from packages/bolt/load-context.ts
rename to load-context.ts
diff --git a/package.json b/package.json
index f57cf9e..ccc0775 100644
--- a/package.json
+++ b/package.json
@@ -1,29 +1,98 @@
{
+ "name": "bolt",
+ "description": "StackBlitz AI Agent",
"private": true,
"license": "MIT",
"packageManager": "pnpm@9.4.0",
+ "sideEffects": false,
+ "type": "module",
"scripts": {
- "playground:dev": "pnpm run --filter=playground dev",
+ "deploy": "npm run build && wrangler pages deploy",
+ "build": "remix vite:build",
+ "dev": "remix vite:dev",
+ "test": "vitest --run",
+ "test:watch": "vitest",
"lint": "eslint --cache --cache-location ./node_modules/.cache/eslint .",
"lint:fix": "npm run lint -- --fix",
- "build": "pnpm run -r build",
- "test": "pnpm run -r test",
- "typecheck": "pnpm run -r typecheck"
- },
- "commitlint": {
- "extends": [
- "@commitlint/config-conventional"
- ]
+ "start": "bindings=$(./bindings.sh) && wrangler pages dev ./build/client $bindings",
+ "typecheck": "tsc",
+ "typegen": "wrangler types",
+ "preview": "pnpm run build && pnpm run start"
},
"engines": {
- "node": "20.15.1",
- "pnpm": "9.4.0"
+ "node": ">=18.18.0"
+ },
+ "dependencies": {
+ "@ai-sdk/anthropic": "^0.0.39",
+ "@codemirror/autocomplete": "^6.17.0",
+ "@codemirror/commands": "^6.6.0",
+ "@codemirror/lang-cpp": "^6.0.2",
+ "@codemirror/lang-css": "^6.2.1",
+ "@codemirror/lang-html": "^6.4.9",
+ "@codemirror/lang-javascript": "^6.2.2",
+ "@codemirror/lang-json": "^6.0.1",
+ "@codemirror/lang-markdown": "^6.2.5",
+ "@codemirror/lang-python": "^6.1.6",
+ "@codemirror/lang-sass": "^6.0.2",
+ "@codemirror/lang-wast": "^6.0.2",
+ "@codemirror/language": "^6.10.2",
+ "@codemirror/search": "^6.5.6",
+ "@codemirror/state": "^6.4.1",
+ "@codemirror/view": "^6.28.4",
+ "@iconify-json/ph": "^1.1.13",
+ "@iconify-json/svg-spinners": "^1.1.2",
+ "@lezer/highlight": "^1.2.0",
+ "@nanostores/react": "^0.7.2",
+ "@radix-ui/react-dialog": "^1.1.1",
+ "@radix-ui/react-dropdown-menu": "^2.1.1",
+ "@remix-run/cloudflare": "^2.10.2",
+ "@remix-run/cloudflare-pages": "^2.10.2",
+ "@remix-run/react": "^2.10.2",
+ "@uiw/codemirror-theme-vscode": "^4.23.0",
+ "@unocss/reset": "^0.61.0",
+ "@webcontainer/api": "^1.3.0-internal.2",
+ "@xterm/addon-fit": "^0.10.0",
+ "@xterm/addon-web-links": "^0.11.0",
+ "@xterm/xterm": "^5.5.0",
+ "ai": "^3.3.4",
+ "date-fns": "^3.6.0",
+ "diff": "^5.2.0",
+ "framer-motion": "^11.2.12",
+ "isbot": "^4.1.0",
+ "istextorbinary": "^9.5.0",
+ "jose": "^5.6.3",
+ "nanostores": "^0.10.3",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "react-hotkeys-hook": "^4.5.0",
+ "react-markdown": "^9.0.1",
+ "react-resizable-panels": "^2.0.20",
+ "react-toastify": "^10.0.5",
+ "rehype-raw": "^7.0.0",
+ "rehype-sanitize": "^6.0.0",
+ "remark-gfm": "^4.0.0",
+ "remix-utils": "^7.6.0",
+ "shiki": "^1.9.1",
+ "unist-util-visit": "^5.0.0"
},
"devDependencies": {
+ "@cloudflare/workers-types": "^4.20240620.0",
+ "@remix-run/dev": "^2.10.0",
+ "@types/diff": "^5.2.1",
+ "@types/react": "^18.2.20",
+ "@types/react-dom": "^18.2.7",
+ "fast-glob": "^3.3.2",
+ "node-fetch": "^3.3.2",
+ "typescript": "^5.5.2",
+ "unified": "^11.0.5",
+ "unocss": "^0.61.3",
+ "vite": "^5.3.1",
+ "vite-plugin-node-polyfills": "^0.22.0",
+ "vite-plugin-optimize-css-modules": "^1.1.0",
+ "vite-tsconfig-paths": "^4.3.2",
+ "wrangler": "^3.63.2",
+ "zod": "^3.23.8",
"@blitz/eslint-plugin": "0.1.0",
- "@commitlint/config-conventional": "^19.2.2",
- "commitlint": "^19.3.0",
- "husky": "^9.0.11",
"is-ci": "^3.0.1",
"prettier": "^3.3.2",
"vitest": "^2.0.1"
diff --git a/packages/bolt/.gitignore b/packages/bolt/.gitignore
deleted file mode 100644
index 925370f..0000000
--- a/packages/bolt/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-node_modules
-
-/.cache
-/build
-.env*
-*.vars
-.wrangler
-_worker.bundle
diff --git a/packages/bolt/README.md b/packages/bolt/README.md
deleted file mode 100644
index 60ba608..0000000
--- a/packages/bolt/README.md
+++ /dev/null
@@ -1,85 +0,0 @@
-# Bolt
-
-Bolt is an AI assistant developed by StackBlitz. This package contains the UI interface for Bolt as well as the server components, built using [Remix Run](https://remix.run/).
-
-## Prerequisites
-
-Before you begin, ensure you have the following installed:
-
-- Node.js (v20.15.1)
-- pnpm (v9.4.0)
-
-## Setup
-
-1. Clone the repository (if you haven't already):
-
-```bash
-git clone https://github.com/stackblitz/bolt.git
-cd bolt
-```
-
-2. Install dependencies:
-
-```bash
-pnpm install
-```
-
-3. Create a `.env.local` file in the current `packages/bolt` directory and add your Anthropic API key:
-
-```
-ANTHROPIC_API_KEY=XXX
-```
-
-Optionally, you an set the debug level or disable authentication:
-
-```
-VITE_LOG_LEVEL=debug
-VITE_DISABLE_AUTH=1
-```
-
-If you want to run authentication against a local StackBlitz instance, add:
-
-```
-VITE_CLIENT_ORIGIN=https://local.stackblitz.com:3000
-```
-
-**Important**: Never commit your `.env.local` file to version control. It's already included in .gitignore.
-
-## Available Scripts
-
-- `pnpm run dev`: Starts the development server.
-- `pnpm run build`: Builds the project.
-- `pnpm run start`: Runs the built application locally using Wrangler Pages. This script uses `bindings.sh` to set up necessary bindings so you don't have to duplicate environment variables.
-- `pnpm run preview`: Builds the project and then starts it locally, useful for testing the production build. Note, HTTP streaming currently doesn't work as expected with `wrangler pages dev`.
-- `pnpm test:` Runs the test suite using Vitest.
-- `pnpm run typecheck`: Runs TypeScript type checking.
-- `pnpm run typegen`: Generates TypeScript types using Wrangler.
-- `pnpm run deploy`: Builds the project and deploys it to Cloudflare Pages.
-
-## Development
-
-To start the development server:
-
-```bash
-pnpm run dev
-```
-
-This will start the Remix Vite development server.
-
-## Testing
-
-Run the test suite with:
-
-```bash
-pnpm test
-```
-
-## Deployment
-
-To deploy the application to Cloudflare Pages:
-
-```bash
-pnpm run deploy
-```
-
-Make sure you have the necessary permissions and Wrangler is correctly configured for your Cloudflare account.
diff --git a/packages/bolt/app/components/header/OpenStackBlitz.client.tsx b/packages/bolt/app/components/header/OpenStackBlitz.client.tsx
deleted file mode 100644
index 92c5ba3..0000000
--- a/packages/bolt/app/components/header/OpenStackBlitz.client.tsx
+++ /dev/null
@@ -1,102 +0,0 @@
-import { useStore } from '@nanostores/react';
-import sdk from '@stackblitz/sdk';
-import path from 'path';
-import { memo, useCallback, useEffect, useState } from 'react';
-import type { FileMap } from '~/lib/stores/files';
-import { workbenchStore, type ArtifactState } from '~/lib/stores/workbench';
-import { classNames } from '~/utils/classNames';
-import { WORK_DIR } from '~/utils/constants';
-
-// extract relative path and content from file, wrapped in array for flatMap use
-const extractContent = ([file, value]: [string, FileMap[string]]) => {
- // ignore directory entries
- if (!value || value.type !== 'file') {
- return [];
- }
-
- const relative = path.relative(WORK_DIR, file);
- const parts = relative.split(path.sep);
-
- // ignore hidden files
- if (parts.some((part) => part.startsWith('.'))) {
- return [];
- }
-
- return [[relative, value.content]];
-};
-
-// subscribe to changes in first artifact's runner actions
-const useFirstArtifact = (): [boolean, ArtifactState | undefined] => {
- const [hasLoaded, setHasLoaded] = useState(false);
-
- // react to artifact changes
- useStore(workbenchStore.artifacts);
-
- const { firstArtifact } = workbenchStore;
-
- useEffect(() => {
- if (firstArtifact) {
- return firstArtifact.runner.actions.subscribe((_) => setHasLoaded(workbenchStore.filesCount > 0));
- }
-
- return undefined;
- }, [firstArtifact]);
-
- return [hasLoaded, firstArtifact];
-};
-
-export const OpenStackBlitz = memo(() => {
- const [artifactLoaded, artifact] = useFirstArtifact();
-
- const disabled = !artifactLoaded;
-
- const handleClick = useCallback(() => {
- if (!artifact) {
- return;
- }
-
- // extract relative path and content from files map
- const workbenchFiles = workbenchStore.files.get();
- const files = Object.fromEntries(Object.entries(workbenchFiles).flatMap(extractContent));
-
- // we use the first artifact's title for the StackBlitz project
- const { title } = artifact;
-
- sdk.openProject({
- title,
- template: 'node',
- files,
- });
- }, [artifact]);
-
- return (
-
-
-
-
-
-
Open in StackBlitz
-
-
- );
-});
diff --git a/packages/bolt/app/lib/analytics.ts b/packages/bolt/app/lib/analytics.ts
deleted file mode 100644
index 883ebde..0000000
--- a/packages/bolt/app/lib/analytics.ts
+++ /dev/null
@@ -1,105 +0,0 @@
-import { Analytics, type IdentifyParams, type PageParams, type TrackParams } from '@segment/analytics-node';
-import { CLIENT_ORIGIN } from '~/lib/constants';
-import { request as doRequest } from '~/lib/fetch';
-import { logger } from '~/utils/logger';
-
-export interface Identity {
- userId?: string | null;
- guestId?: string | null;
- segmentWriteKey?: string | null;
- avatar?: string;
-}
-
-const MESSAGE_PREFIX = 'Bolt';
-
-export enum AnalyticsTrackEvent {
- MessageSent = `${MESSAGE_PREFIX} Message Sent`,
- MessageComplete = `${MESSAGE_PREFIX} Message Complete`,
- ChatCreated = `${MESSAGE_PREFIX} Chat Created`,
-}
-
-export enum AnalyticsAction {
- Identify = 'identify',
- Page = 'page',
- Track = 'track',
-}
-
-// we can omit the user ID since it's retrieved from the user's session
-type OmitUserId = Omit;
-
-export type AnalyticsEvent =
- | { action: AnalyticsAction.Identify; payload: OmitUserId }
- | { action: AnalyticsAction.Page; payload: OmitUserId }
- | { action: AnalyticsAction.Track; payload: OmitUserId };
-
-export async function identifyUser(access: string): Promise {
- const response = await doRequest(`${CLIENT_ORIGIN}/api/identify`, {
- method: 'GET',
- headers: { authorization: `Bearer ${access}` },
- });
-
- const body = await response.json();
-
- if (!response.ok) {
- return undefined;
- }
-
- // convert numerical identity values to strings
- const stringified = Object.entries(body).map(([key, value]) => [
- key,
- typeof value === 'number' ? value.toString() : value,
- ]);
-
- return Object.fromEntries(stringified) as Identity;
-}
-
-// send an analytics event from the client
-export async function sendAnalyticsEvent(event: AnalyticsEvent) {
- // don't send analytics events when in dev mode
- if (import.meta.env.DEV) {
- return;
- }
-
- const request = await fetch('/api/analytics', {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- },
- body: JSON.stringify(event),
- });
-
- if (!request.ok) {
- logger.error(`Error handling Segment Analytics action: ${event.action}`);
- }
-}
-
-// send an analytics event from the server
-export async function sendEventInternal(identity: Identity, { action, payload }: AnalyticsEvent) {
- const { userId, segmentWriteKey: writeKey } = identity;
-
- if (!userId || !writeKey) {
- logger.warn('Missing user ID or write key when logging analytics');
- return { success: false as const, error: 'missing-data' };
- }
-
- const analytics = new Analytics({ flushAt: 1, writeKey }).on('error', logger.error);
-
- try {
- await new Promise((resolve, reject) => {
- if (action === AnalyticsAction.Identify) {
- analytics.identify({ ...payload, userId }, resolve);
- } else if (action === AnalyticsAction.Page) {
- analytics.page({ ...payload, userId }, resolve);
- } else if (action === AnalyticsAction.Track) {
- analytics.track({ ...payload, userId }, resolve);
- } else {
- reject();
- }
- });
- } catch {
- logger.error(`Error handling Segment Analytics action: ${action}`);
- return { success: false as const, error: 'invalid-action' };
- }
-
- return { success: true as const };
-}
diff --git a/packages/bolt/app/routes/api.analytics.ts b/packages/bolt/app/routes/api.analytics.ts
deleted file mode 100644
index da61715..0000000
--- a/packages/bolt/app/routes/api.analytics.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import { json, type ActionFunctionArgs } from '@remix-run/cloudflare';
-import { actionWithAuth } from '~/lib/.server/auth';
-import type { Session } from '~/lib/.server/sessions';
-import { sendEventInternal, type AnalyticsEvent } from '~/lib/analytics';
-
-async function analyticsAction({ request }: ActionFunctionArgs, session: Session) {
- const event: AnalyticsEvent = await request.json();
- const { success, error } = await sendEventInternal(session, event);
-
- if (!success) {
- return json({ error }, { status: 500 });
- }
-
- return json({ success }, { status: 200 });
-}
-
-export async function action(args: ActionFunctionArgs) {
- return actionWithAuth(args, analyticsAction);
-}
diff --git a/packages/bolt/package.json b/packages/bolt/package.json
deleted file mode 100644
index 9a80d54..0000000
--- a/packages/bolt/package.json
+++ /dev/null
@@ -1,94 +0,0 @@
-{
- "name": "bolt",
- "description": "StackBlitz AI Agent",
- "private": true,
- "sideEffects": false,
- "type": "module",
- "scripts": {
- "deploy": "npm run build && wrangler pages deploy",
- "build": "remix vite:build",
- "dev": "remix vite:dev",
- "test": "vitest --run",
- "test:watch": "vitest",
- "start": "bindings=$(./bindings.sh) && wrangler pages dev ./build/client $bindings",
- "typecheck": "tsc",
- "typegen": "wrangler types",
- "preview": "pnpm run build && pnpm run start"
- },
- "dependencies": {
- "@ai-sdk/anthropic": "^0.0.39",
- "@codemirror/autocomplete": "^6.17.0",
- "@codemirror/commands": "^6.6.0",
- "@codemirror/lang-cpp": "^6.0.2",
- "@codemirror/lang-css": "^6.2.1",
- "@codemirror/lang-html": "^6.4.9",
- "@codemirror/lang-javascript": "^6.2.2",
- "@codemirror/lang-json": "^6.0.1",
- "@codemirror/lang-markdown": "^6.2.5",
- "@codemirror/lang-python": "^6.1.6",
- "@codemirror/lang-sass": "^6.0.2",
- "@codemirror/lang-wast": "^6.0.2",
- "@codemirror/language": "^6.10.2",
- "@codemirror/search": "^6.5.6",
- "@codemirror/state": "^6.4.1",
- "@codemirror/view": "^6.28.4",
- "@iconify-json/ph": "^1.1.13",
- "@iconify-json/svg-spinners": "^1.1.2",
- "@lezer/highlight": "^1.2.0",
- "@nanostores/react": "^0.7.2",
- "@radix-ui/react-dialog": "^1.1.1",
- "@radix-ui/react-dropdown-menu": "^2.1.1",
- "@remix-run/cloudflare": "^2.10.2",
- "@remix-run/cloudflare-pages": "^2.10.2",
- "@remix-run/react": "^2.10.2",
- "@segment/analytics-node": "^2.1.2",
- "@stackblitz/sdk": "^1.11.0",
- "@uiw/codemirror-theme-vscode": "^4.23.0",
- "@unocss/reset": "^0.61.0",
- "@webcontainer/api": "^1.3.0-internal.2",
- "@xterm/addon-fit": "^0.10.0",
- "@xterm/addon-web-links": "^0.11.0",
- "@xterm/xterm": "^5.5.0",
- "ai": "^3.3.4",
- "date-fns": "^3.6.0",
- "diff": "^5.2.0",
- "framer-motion": "^11.2.12",
- "isbot": "^4.1.0",
- "istextorbinary": "^9.5.0",
- "jose": "^5.6.3",
- "nanostores": "^0.10.3",
- "react": "^18.2.0",
- "react-dom": "^18.2.0",
- "react-hotkeys-hook": "^4.5.0",
- "react-markdown": "^9.0.1",
- "react-resizable-panels": "^2.0.20",
- "react-toastify": "^10.0.5",
- "rehype-raw": "^7.0.0",
- "rehype-sanitize": "^6.0.0",
- "remark-gfm": "^4.0.0",
- "remix-utils": "^7.6.0",
- "shiki": "^1.9.1",
- "unist-util-visit": "^5.0.0"
- },
- "devDependencies": {
- "@cloudflare/workers-types": "^4.20240620.0",
- "@remix-run/dev": "^2.10.0",
- "@types/diff": "^5.2.1",
- "@types/react": "^18.2.20",
- "@types/react-dom": "^18.2.7",
- "fast-glob": "^3.3.2",
- "node-fetch": "^3.3.2",
- "typescript": "^5.5.2",
- "unified": "^11.0.5",
- "unocss": "^0.61.3",
- "vite": "^5.3.1",
- "vite-plugin-node-polyfills": "^0.22.0",
- "vite-plugin-optimize-css-modules": "^1.1.0",
- "vite-tsconfig-paths": "^4.3.2",
- "wrangler": "^3.63.2",
- "zod": "^3.23.8"
- },
- "engines": {
- "node": ">=18.18.0"
- }
-}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 0084701..6ef296a 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -10,30 +10,6 @@ overrides:
importers:
.:
- devDependencies:
- '@blitz/eslint-plugin':
- specifier: 0.1.0
- version: 0.1.0(@types/eslint@8.56.10)(prettier@3.3.2)(typescript@5.5.2)
- '@commitlint/config-conventional':
- specifier: ^19.2.2
- version: 19.2.2
- commitlint:
- specifier: ^19.3.0
- version: 19.3.0(@types/node@20.14.9)(typescript@5.5.2)
- husky:
- specifier: ^9.0.11
- version: 9.0.11
- is-ci:
- specifier: ^3.0.1
- version: 3.0.1
- prettier:
- specifier: ^3.3.2
- version: 3.3.2
- vitest:
- specifier: ^2.0.1
- version: 2.0.1(@types/node@20.14.9)(sass@1.77.6)
-
- packages/bolt:
dependencies:
'@ai-sdk/anthropic':
specifier: ^0.0.39
@@ -110,18 +86,12 @@ importers:
'@remix-run/react':
specifier: ^2.10.2
version: 2.10.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.2)
- '@segment/analytics-node':
- specifier: ^2.1.2
- version: 2.1.2
- '@stackblitz/sdk':
- specifier: ^1.11.0
- version: 1.11.0
'@uiw/codemirror-theme-vscode':
specifier: ^4.23.0
version: 4.23.0(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.28.4)
'@unocss/reset':
specifier: ^0.61.0
- version: 0.61.0
+ version: 0.61.3
'@webcontainer/api':
specifier: ^1.3.0-internal.2
version: 1.3.0-internal.2
@@ -195,6 +165,9 @@ importers:
specifier: ^5.0.0
version: 5.0.0
devDependencies:
+ '@blitz/eslint-plugin':
+ specifier: 0.1.0
+ version: 0.1.0(@types/eslint@8.56.10)(prettier@3.3.2)(typescript@5.5.2)
'@cloudflare/workers-types':
specifier: ^4.20240620.0
version: 4.20240620.0
@@ -213,9 +186,15 @@ importers:
fast-glob:
specifier: ^3.3.2
version: 3.3.2
+ is-ci:
+ specifier: ^3.0.1
+ version: 3.0.1
node-fetch:
specifier: ^3.3.2
version: 3.3.2
+ prettier:
+ specifier: ^3.3.2
+ version: 3.3.2
typescript:
specifier: ^5.5.2
version: 5.5.2
@@ -237,6 +216,9 @@ importers:
vite-tsconfig-paths:
specifier: ^4.3.2
version: 4.3.2(typescript@5.5.2)(vite@5.3.1(@types/node@20.14.9)(sass@1.77.6))
+ vitest:
+ specifier: ^2.0.1
+ version: 2.0.1(@types/node@20.14.9)(sass@1.77.6)
wrangler:
specifier: ^3.63.2
version: 3.63.2(@cloudflare/workers-types@4.20240620.0)
@@ -579,75 +561,6 @@ packages:
'@codemirror/view@6.28.4':
resolution: {integrity: sha512-QScv95fiviSQ/CaVGflxAvvvDy/9wi0RFyDl4LkHHWiMr/UPebyuTspmYSeN5Nx6eujcPYwsQzA6ZIZucKZVHQ==}
- '@commitlint/cli@19.3.0':
- resolution: {integrity: sha512-LgYWOwuDR7BSTQ9OLZ12m7F/qhNY+NpAyPBgo4YNMkACE7lGuUnuQq1yi9hz1KA4+3VqpOYl8H1rY/LYK43v7g==}
- engines: {node: '>=v18'}
- hasBin: true
-
- '@commitlint/config-conventional@19.2.2':
- resolution: {integrity: sha512-mLXjsxUVLYEGgzbxbxicGPggDuyWNkf25Ht23owXIH+zV2pv1eJuzLK3t1gDY5Gp6pxdE60jZnWUY5cvgL3ufw==}
- engines: {node: '>=v18'}
-
- '@commitlint/config-validator@19.0.3':
- resolution: {integrity: sha512-2D3r4PKjoo59zBc2auodrSCaUnCSALCx54yveOFwwP/i2kfEAQrygwOleFWswLqK0UL/F9r07MFi5ev2ohyM4Q==}
- engines: {node: '>=v18'}
-
- '@commitlint/ensure@19.0.3':
- resolution: {integrity: sha512-SZEpa/VvBLoT+EFZVb91YWbmaZ/9rPH3ESrINOl0HD2kMYsjvl0tF7nMHh0EpTcv4+gTtZBAe1y/SS6/OhfZzQ==}
- engines: {node: '>=v18'}
-
- '@commitlint/execute-rule@19.0.0':
- resolution: {integrity: sha512-mtsdpY1qyWgAO/iOK0L6gSGeR7GFcdW7tIjcNFxcWkfLDF5qVbPHKuGATFqRMsxcO8OUKNj0+3WOHB7EHm4Jdw==}
- engines: {node: '>=v18'}
-
- '@commitlint/format@19.3.0':
- resolution: {integrity: sha512-luguk5/aF68HiF4H23ACAfk8qS8AHxl4LLN5oxPc24H+2+JRPsNr1OS3Gaea0CrH7PKhArBMKBz5RX9sA5NtTg==}
- engines: {node: '>=v18'}
-
- '@commitlint/is-ignored@19.2.2':
- resolution: {integrity: sha512-eNX54oXMVxncORywF4ZPFtJoBm3Tvp111tg1xf4zWXGfhBPKpfKG6R+G3G4v5CPlRROXpAOpQ3HMhA9n1Tck1g==}
- engines: {node: '>=v18'}
-
- '@commitlint/lint@19.2.2':
- resolution: {integrity: sha512-xrzMmz4JqwGyKQKTpFzlN0dx0TAiT7Ran1fqEBgEmEj+PU98crOFtysJgY+QdeSagx6EDRigQIXJVnfrI0ratA==}
- engines: {node: '>=v18'}
-
- '@commitlint/load@19.2.0':
- resolution: {integrity: sha512-XvxxLJTKqZojCxaBQ7u92qQLFMMZc4+p9qrIq/9kJDy8DOrEa7P1yx7Tjdc2u2JxIalqT4KOGraVgCE7eCYJyQ==}
- engines: {node: '>=v18'}
-
- '@commitlint/message@19.0.0':
- resolution: {integrity: sha512-c9czf6lU+9oF9gVVa2lmKaOARJvt4soRsVmbR7Njwp9FpbBgste5i7l/2l5o8MmbwGh4yE1snfnsy2qyA2r/Fw==}
- engines: {node: '>=v18'}
-
- '@commitlint/parse@19.0.3':
- resolution: {integrity: sha512-Il+tNyOb8VDxN3P6XoBBwWJtKKGzHlitEuXA5BP6ir/3loWlsSqDr5aecl6hZcC/spjq4pHqNh0qPlfeWu38QA==}
- engines: {node: '>=v18'}
-
- '@commitlint/read@19.2.1':
- resolution: {integrity: sha512-qETc4+PL0EUv7Q36lJbPG+NJiBOGg7SSC7B5BsPWOmei+Dyif80ErfWQ0qXoW9oCh7GTpTNRoaVhiI8RbhuaNw==}
- engines: {node: '>=v18'}
-
- '@commitlint/resolve-extends@19.1.0':
- resolution: {integrity: sha512-z2riI+8G3CET5CPgXJPlzftH+RiWYLMYv4C9tSLdLXdr6pBNimSKukYP9MS27ejmscqCTVA4almdLh0ODD2KYg==}
- engines: {node: '>=v18'}
-
- '@commitlint/rules@19.0.3':
- resolution: {integrity: sha512-TspKb9VB6svklxNCKKwxhELn7qhtY1rFF8ls58DcFd0F97XoG07xugPjjbVnLqmMkRjZDbDIwBKt9bddOfLaPw==}
- engines: {node: '>=v18'}
-
- '@commitlint/to-lines@19.0.0':
- resolution: {integrity: sha512-vkxWo+VQU5wFhiP9Ub9Sre0FYe019JxFikrALVoD5UGa8/t3yOJEpEhxC5xKiENKKhUkTpEItMTRAjHw2SCpZw==}
- engines: {node: '>=v18'}
-
- '@commitlint/top-level@19.0.0':
- resolution: {integrity: sha512-KKjShd6u1aMGNkCkaX4aG1jOGdn7f8ZI8TR1VEuNqUOjWTOdcDSsmglinglJ18JTjuBX5I1PtjrhQCRcixRVFQ==}
- engines: {node: '>=v18'}
-
- '@commitlint/types@19.0.3':
- resolution: {integrity: sha512-tpyc+7i6bPG9mvaBbtKUeghfyZSDgWquIDfMgqYtTbmZ9Y9VzEm2je9EYcQ0aoz5o7NvGS+rcDec93yO08MHYA==}
- engines: {node: '>=v18'}
-
'@cspotcode/source-map-support@0.8.1':
resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
engines: {node: '>=12'}
@@ -1197,14 +1110,6 @@ packages:
'@lezer/sass@1.0.6':
resolution: {integrity: sha512-w/RCO2dIzZH1To8p+xjs8cE+yfgGus8NZ/dXeWl/QzHyr+TeBs71qiE70KPImEwvTsmEjoWh0A5SxMzKd5BWBQ==}
- '@lukeed/csprng@1.1.0':
- resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==}
- engines: {node: '>=8'}
-
- '@lukeed/uuid@2.0.1':
- resolution: {integrity: sha512-qC72D4+CDdjGqJvkFMMEAtancHUQ7/d/tAiHf64z8MopFDmcrtbcJuerDtFceuAfQJ2pDSfCKCtbqoGBNnwg0w==}
- engines: {node: '>=8'}
-
'@mdx-js/mdx@2.3.0':
resolution: {integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==}
@@ -1752,25 +1657,12 @@ packages:
cpu: [x64]
os: [win32]
- '@segment/analytics-core@1.6.0':
- resolution: {integrity: sha512-bn9X++IScUfpT7aJGjKU/yJAu/Ko2sYD6HsKA70Z2560E89x30pqgqboVKY8kootvQnT4UKCJiUr5NDMgjmWdQ==}
-
- '@segment/analytics-generic-utils@1.2.0':
- resolution: {integrity: sha512-DfnW6mW3YQOLlDQQdR89k4EqfHb0g/3XvBXkovH1FstUN93eL1kfW9CsDcVQyH3bAC5ZsFyjA/o/1Q2j0QeoWw==}
-
- '@segment/analytics-node@2.1.2':
- resolution: {integrity: sha512-CIqWH5G0pB/LAFAZEZtntAxujiYIpdk0F+YGhfM6N/qt4/VLWjFcd4VZXVLW7xqaxig64UKWGQhe8bszXDRXXw==}
- engines: {node: '>=18'}
-
'@shikijs/core@1.9.1':
resolution: {integrity: sha512-EmUful2MQtY8KgCF1OkBtOuMcvaZEvmdubhW0UHCGXi21O9dRLeADVCj+k6ZS+de7Mz9d2qixOXJ+GLhcK3pXg==}
'@sinclair/typebox@0.27.8':
resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
- '@stackblitz/sdk@1.11.0':
- resolution: {integrity: sha512-DFQGANNkEZRzFk1/rDP6TcFdM82ycHE+zfl9C/M/jXlH68jiqHWHFMQURLELoD8koxvu/eW5uhg94NSAZlYrUQ==}
-
'@stylistic/eslint-plugin-js@2.3.0':
resolution: {integrity: sha512-lQwoiYb0Fs6Yc5QS3uT8+T9CPKK2Eoxc3H8EnYJgM26v/DgtW+1lvy2WNgyBflU+ThShZaHm3a6CdD9QeKx23w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -1786,9 +1678,6 @@ packages:
'@types/acorn@4.0.6':
resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==}
- '@types/conventional-commits-parser@5.0.0':
- resolution: {integrity: sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==}
-
'@types/cookie@0.6.0':
resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}
@@ -1978,9 +1867,6 @@ packages:
'@unocss/preset-wind@0.61.3':
resolution: {integrity: sha512-THdTNAYEtvLz/jhHNgkpLFxC+LNn4W2VqDmpmK/fVMgSlhOYJ8IoQlt8nwgBRbNkEksvgItq8gL/t5+2sHGHhA==}
- '@unocss/reset@0.61.0':
- resolution: {integrity: sha512-VqemtmzH8Rgu5yNomtv50gIcy4KZ2x1aP+7WZCds9x5ZdTSEjbfCOgUDI9rDrrGSipJkCmJ1yOhUPMC7ND6Hfw==}
-
'@unocss/reset@0.61.3':
resolution: {integrity: sha512-WegQ6Plmr/H0D9wuKCVjhUMzi/xAn55A0mJgUnKl1pJHTZetRdK29u0bnpVQzynmlh/Lh4YtD+X4r8DVkASgPw==}
@@ -2089,10 +1975,6 @@ packages:
'@zxing/text-encoding@0.9.0':
resolution: {integrity: sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==}
- JSONStream@1.3.5:
- resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
- hasBin: true
-
abort-controller@3.0.0:
resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
engines: {node: '>=6.5'}
@@ -2143,9 +2025,6 @@ packages:
ajv@6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
- ajv@8.16.0:
- resolution: {integrity: sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==}
-
ansi-regex@5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
@@ -2190,9 +2069,6 @@ packages:
array-flatten@1.1.1:
resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
- array-ify@1.0.0:
- resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==}
-
array-union@2.1.0:
resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
engines: {node: '>=8'}
@@ -2310,9 +2186,6 @@ packages:
buffer@5.7.1:
resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
- buffer@6.0.3:
- resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
-
builtin-status-codes@3.0.0:
resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==}
@@ -2414,10 +2287,6 @@ packages:
client-only@0.0.1:
resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
- cliui@8.0.1:
- resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
- engines: {node: '>=12'}
-
clone@1.0.4:
resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
engines: {node: '>=0.8'}
@@ -2448,18 +2317,10 @@ packages:
comma-separated-tokens@2.0.3:
resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
- commitlint@19.3.0:
- resolution: {integrity: sha512-B8eUVQCjz+1ZAjR3LC3+vzKg7c4/qN4QhSxkjp0u0v7Pi79t9CsnGAluvveKmFh56e885zgToPL5ax+l8BHTPg==}
- engines: {node: '>=v18'}
- hasBin: true
-
common-tags@1.8.2:
resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==}
engines: {node: '>=4.0.0'}
- compare-func@2.0.0:
- resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==}
-
compressible@2.0.18:
resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==}
engines: {node: '>= 0.6'}
@@ -2492,19 +2353,6 @@ packages:
resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
engines: {node: '>= 0.6'}
- conventional-changelog-angular@7.0.0:
- resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==}
- engines: {node: '>=16'}
-
- conventional-changelog-conventionalcommits@7.0.2:
- resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==}
- engines: {node: '>=16'}
-
- conventional-commits-parser@5.0.0:
- resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==}
- engines: {node: '>=16'}
- hasBin: true
-
convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
@@ -2526,23 +2374,6 @@ packages:
core-util-is@1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
- cosmiconfig-typescript-loader@5.0.0:
- resolution: {integrity: sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==}
- engines: {node: '>=v16'}
- peerDependencies:
- '@types/node': '*'
- cosmiconfig: '>=8.2'
- typescript: '>=4'
-
- cosmiconfig@9.0.0:
- resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==}
- engines: {node: '>=14'}
- peerDependencies:
- typescript: '>=4.9.5'
- peerDependenciesMeta:
- typescript:
- optional: true
-
create-ecdh@4.0.4:
resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==}
@@ -2581,10 +2412,6 @@ packages:
csstype@3.1.3:
resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
- dargs@8.1.0:
- resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==}
- engines: {node: '>=12'}
-
data-uri-to-buffer@2.0.2:
resolution: {integrity: sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==}
@@ -2701,18 +2528,10 @@ packages:
resolution: {integrity: sha512-ArzcM/II1wCCujdCNyQjXrAFwS4mrLh4C7DZWlaI8mdh7h3BfKdNd3bKXITfl2PT9FtfQqaGvhi1vPRQPimjGA==}
engines: {node: '>=10'}
- dot-prop@5.3.0:
- resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==}
- engines: {node: '>=8'}
-
dotenv@16.4.5:
resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==}
engines: {node: '>=12'}
- dset@3.1.3:
- resolution: {integrity: sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ==}
- engines: {node: '>=4'}
-
duplexer@0.1.2:
resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==}
@@ -2752,16 +2571,9 @@ packages:
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
engines: {node: '>=0.12'}
- env-paths@2.2.1:
- resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
- engines: {node: '>=6'}
-
err-code@2.0.3:
resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==}
- error-ex@1.3.2:
- resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
-
es-define-property@1.0.0:
resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==}
engines: {node: '>= 0.4'}
@@ -3004,10 +2816,6 @@ packages:
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
engines: {node: '>=10'}
- find-up@7.0.0:
- resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==}
- engines: {node: '>=18'}
-
flat-cache@4.0.1:
resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
engines: {node: '>=16'}
@@ -3082,10 +2890,6 @@ packages:
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
engines: {node: '>=6.9.0'}
- get-caller-file@2.0.5:
- resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
- engines: {node: 6.* || 8.* || >= 10.*}
-
get-func-name@2.0.2:
resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
@@ -3112,11 +2916,6 @@ packages:
resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
engines: {node: '>=16'}
- git-raw-commits@4.0.0:
- resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==}
- engines: {node: '>=16'}
- hasBin: true
-
glob-parent@5.1.2:
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
engines: {node: '>= 6'}
@@ -3133,10 +2932,6 @@ packages:
engines: {node: '>=16 || 14 >=14.18'}
hasBin: true
- global-directory@4.0.1:
- resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==}
- engines: {node: '>=18'}
-
globals@11.12.0:
resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
engines: {node: '>=4'}
@@ -3269,11 +3064,6 @@ packages:
resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
engines: {node: '>=16.17.0'}
- husky@9.0.11:
- resolution: {integrity: sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==}
- engines: {node: '>=18'}
- hasBin: true
-
iconv-lite@0.4.24:
resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
engines: {node: '>=0.10.0'}
@@ -3298,9 +3088,6 @@ packages:
resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
engines: {node: '>=6'}
- import-meta-resolve@4.1.0:
- resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==}
-
imurmurhash@0.1.4:
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
engines: {node: '>=0.8.19'}
@@ -3312,10 +3099,6 @@ packages:
inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
- ini@4.1.1:
- resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==}
- engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
-
inline-style-parser@0.1.1:
resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==}
@@ -3339,9 +3122,6 @@ packages:
resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==}
engines: {node: '>= 0.4'}
- is-arrayish@0.2.1:
- resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
-
is-binary-path@2.1.0:
resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
engines: {node: '>=8'}
@@ -3403,10 +3183,6 @@ packages:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
- is-obj@2.0.0:
- resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==}
- engines: {node: '>=8'}
-
is-path-inside@3.0.3:
resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
engines: {node: '>=8'}
@@ -3430,10 +3206,6 @@ packages:
resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- is-text-path@2.0.0:
- resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==}
- engines: {node: '>=8'}
-
is-typed-array@1.1.13:
resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==}
engines: {node: '>= 0.4'}
@@ -3494,9 +3266,6 @@ packages:
json-buffer@3.0.1:
resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
- json-parse-even-better-errors@2.3.1:
- resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
-
json-parse-even-better-errors@3.0.2:
resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
@@ -3504,9 +3273,6 @@ packages:
json-schema-traverse@0.4.1:
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
- json-schema-traverse@1.0.0:
- resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
-
json-schema@0.4.0:
resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==}
@@ -3530,10 +3296,6 @@ packages:
jsonfile@6.1.0:
resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
- jsonparse@1.3.1:
- resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
- engines: {'0': node >= 0.2.0}
-
keyv@4.5.4:
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
@@ -3552,9 +3314,6 @@ packages:
resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==}
engines: {node: '>=14'}
- lines-and-columns@1.2.4:
- resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
-
loader-utils@3.3.1:
resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==}
engines: {node: '>= 12.13.0'}
@@ -3570,40 +3329,15 @@ packages:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines: {node: '>=10'}
- locate-path@7.2.0:
- resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
lodash.camelcase@4.3.0:
resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==}
lodash.debounce@4.0.8:
resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
- lodash.isplainobject@4.0.6:
- resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
-
- lodash.kebabcase@4.1.1:
- resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==}
-
lodash.merge@4.6.2:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
- lodash.mergewith@4.6.2:
- resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==}
-
- lodash.snakecase@4.1.1:
- resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==}
-
- lodash.startcase@4.4.0:
- resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==}
-
- lodash.uniq@4.5.0:
- resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==}
-
- lodash.upperfirst@4.3.1:
- resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==}
-
lodash@4.17.21:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
@@ -3736,10 +3470,6 @@ packages:
resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
engines: {node: '>= 0.6'}
- meow@12.1.1:
- resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==}
- engines: {node: '>=16.10'}
-
merge-descriptors@1.0.1:
resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==}
@@ -4084,15 +3814,6 @@ packages:
node-fetch-native@1.6.4:
resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==}
- node-fetch@2.7.0:
- resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
- engines: {node: 4.x || >=6.0.0}
- peerDependencies:
- encoding: ^0.1.0
- peerDependenciesMeta:
- encoding:
- optional: true
-
node-fetch@3.3.2:
resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -4200,18 +3921,10 @@ packages:
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
engines: {node: '>=10'}
- p-limit@4.0.0:
- resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
p-locate@5.0.0:
resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
engines: {node: '>=10'}
- p-locate@6.0.0:
- resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
p-map@4.0.0:
resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==}
engines: {node: '>=10'}
@@ -4236,10 +3949,6 @@ packages:
parse-entities@4.0.1:
resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==}
- parse-json@5.2.0:
- resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
- engines: {node: '>=8'}
-
parse-ms@2.1.0:
resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==}
engines: {node: '>=6'}
@@ -4258,10 +3967,6 @@ packages:
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
engines: {node: '>=8'}
- path-exists@5.0.0:
- resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
path-key@3.1.1:
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
engines: {node: '>=8'}
@@ -4662,14 +4367,6 @@ packages:
zod:
optional: true
- require-directory@2.1.1:
- resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
- engines: {node: '>=0.10.0'}
-
- require-from-string@2.0.2:
- resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
- engines: {node: '>=0.10.0'}
-
require-like@0.1.2:
resolution: {integrity: sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==}
@@ -4677,10 +4374,6 @@ packages:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
- resolve-from@5.0.0:
- resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
- engines: {node: '>=8'}
-
resolve.exports@2.0.2:
resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==}
engines: {node: '>=10'}
@@ -4851,10 +4544,6 @@ packages:
spdx-license-ids@3.0.18:
resolution: {integrity: sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==}
- split2@4.2.0:
- resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
- engines: {node: '>= 10.x'}
-
ssri@10.0.6:
resolution: {integrity: sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
@@ -4994,10 +4683,6 @@ packages:
resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==}
engines: {node: '>=10'}
- text-extensions@2.4.0:
- resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==}
- engines: {node: '>=8'}
-
text-table@0.2.0:
resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
@@ -5008,9 +4693,6 @@ packages:
through2@2.0.5:
resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==}
- through@2.3.8:
- resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
-
timers-browserify@2.0.12:
resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==}
engines: {node: '>=0.6.0'}
@@ -5045,9 +4727,6 @@ packages:
resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
engines: {node: '>=6'}
- tr46@0.0.3:
- resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
-
trim-lines@3.0.1:
resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
@@ -5129,10 +4808,6 @@ packages:
unenv-nightly@1.10.0-1717606461.a117952:
resolution: {integrity: sha512-u3TfBX02WzbHTpaEfWEKwDijDSFAHcgXkayUZ+MVDrjhLFvgAJzFGTSTmwlEhwWi2exyRQey23ah9wELMM6etg==}
- unicorn-magic@0.1.0:
- resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==}
- engines: {node: '>=18'}
-
unified@10.1.2:
resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==}
@@ -5399,12 +5074,6 @@ packages:
resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==}
engines: {node: '>= 8'}
- webidl-conversions@3.0.1:
- resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
-
- whatwg-url@5.0.0:
- resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
-
which-typed-array@1.1.15:
resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==}
engines: {node: '>= 0.4'}
@@ -5485,10 +5154,6 @@ packages:
xxhash-wasm@1.0.2:
resolution: {integrity: sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==}
- y18n@5.0.8:
- resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
- engines: {node: '>=10'}
-
yallist@3.1.1:
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
@@ -5500,22 +5165,10 @@ packages:
engines: {node: '>= 14'}
hasBin: true
- yargs-parser@21.1.1:
- resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
- engines: {node: '>=12'}
-
- yargs@17.7.2:
- resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
- engines: {node: '>=12'}
-
yocto-queue@0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
- yocto-queue@1.0.0:
- resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==}
- engines: {node: '>=12.20'}
-
youch@3.3.3:
resolution: {integrity: sha512-qSFXUk3UZBLfggAW3dJKg0BMblG5biqSF8M34E06o5CSsZtH92u9Hqmj2RzGiHDi64fhe83+4tENFP2DB6t6ZA==}
@@ -6003,117 +5656,6 @@ snapshots:
style-mod: 4.1.2
w3c-keyname: 2.2.8
- '@commitlint/cli@19.3.0(@types/node@20.14.9)(typescript@5.5.2)':
- dependencies:
- '@commitlint/format': 19.3.0
- '@commitlint/lint': 19.2.2
- '@commitlint/load': 19.2.0(@types/node@20.14.9)(typescript@5.5.2)
- '@commitlint/read': 19.2.1
- '@commitlint/types': 19.0.3
- execa: 8.0.1
- yargs: 17.7.2
- transitivePeerDependencies:
- - '@types/node'
- - typescript
-
- '@commitlint/config-conventional@19.2.2':
- dependencies:
- '@commitlint/types': 19.0.3
- conventional-changelog-conventionalcommits: 7.0.2
-
- '@commitlint/config-validator@19.0.3':
- dependencies:
- '@commitlint/types': 19.0.3
- ajv: 8.16.0
-
- '@commitlint/ensure@19.0.3':
- dependencies:
- '@commitlint/types': 19.0.3
- lodash.camelcase: 4.3.0
- lodash.kebabcase: 4.1.1
- lodash.snakecase: 4.1.1
- lodash.startcase: 4.4.0
- lodash.upperfirst: 4.3.1
-
- '@commitlint/execute-rule@19.0.0': {}
-
- '@commitlint/format@19.3.0':
- dependencies:
- '@commitlint/types': 19.0.3
- chalk: 5.3.0
-
- '@commitlint/is-ignored@19.2.2':
- dependencies:
- '@commitlint/types': 19.0.3
- semver: 7.6.2
-
- '@commitlint/lint@19.2.2':
- dependencies:
- '@commitlint/is-ignored': 19.2.2
- '@commitlint/parse': 19.0.3
- '@commitlint/rules': 19.0.3
- '@commitlint/types': 19.0.3
-
- '@commitlint/load@19.2.0(@types/node@20.14.9)(typescript@5.5.2)':
- dependencies:
- '@commitlint/config-validator': 19.0.3
- '@commitlint/execute-rule': 19.0.0
- '@commitlint/resolve-extends': 19.1.0
- '@commitlint/types': 19.0.3
- chalk: 5.3.0
- cosmiconfig: 9.0.0(typescript@5.5.2)
- cosmiconfig-typescript-loader: 5.0.0(@types/node@20.14.9)(cosmiconfig@9.0.0(typescript@5.5.2))(typescript@5.5.2)
- lodash.isplainobject: 4.0.6
- lodash.merge: 4.6.2
- lodash.uniq: 4.5.0
- transitivePeerDependencies:
- - '@types/node'
- - typescript
-
- '@commitlint/message@19.0.0': {}
-
- '@commitlint/parse@19.0.3':
- dependencies:
- '@commitlint/types': 19.0.3
- conventional-changelog-angular: 7.0.0
- conventional-commits-parser: 5.0.0
-
- '@commitlint/read@19.2.1':
- dependencies:
- '@commitlint/top-level': 19.0.0
- '@commitlint/types': 19.0.3
- execa: 8.0.1
- git-raw-commits: 4.0.0
- minimist: 1.2.8
-
- '@commitlint/resolve-extends@19.1.0':
- dependencies:
- '@commitlint/config-validator': 19.0.3
- '@commitlint/types': 19.0.3
- global-directory: 4.0.1
- import-meta-resolve: 4.1.0
- lodash.mergewith: 4.6.2
- resolve-from: 5.0.0
-
- '@commitlint/rules@19.0.3':
- dependencies:
- '@commitlint/ensure': 19.0.3
- '@commitlint/message': 19.0.0
- '@commitlint/to-lines': 19.0.0
- '@commitlint/types': 19.0.3
- execa: 8.0.1
-
- '@commitlint/to-lines@19.0.0': {}
-
- '@commitlint/top-level@19.0.0':
- dependencies:
- find-up: 7.0.0
-
- '@commitlint/types@19.0.3':
- dependencies:
- '@types/conventional-commits-parser': 5.0.0
- chalk: 5.3.0
-
'@cspotcode/source-map-support@0.8.1':
dependencies:
'@jridgewell/trace-mapping': 0.3.9
@@ -6503,12 +6045,6 @@ snapshots:
'@lezer/highlight': 1.2.0
'@lezer/lr': 1.4.1
- '@lukeed/csprng@1.1.0': {}
-
- '@lukeed/uuid@2.0.1':
- dependencies:
- '@lukeed/csprng': 1.1.0
-
'@mdx-js/mdx@2.3.0':
dependencies:
'@types/estree-jsx': 1.0.5
@@ -7115,35 +6651,10 @@ snapshots:
'@rollup/rollup-win32-x64-msvc@4.18.0':
optional: true
- '@segment/analytics-core@1.6.0':
- dependencies:
- '@lukeed/uuid': 2.0.1
- '@segment/analytics-generic-utils': 1.2.0
- dset: 3.1.3
- tslib: 2.6.3
-
- '@segment/analytics-generic-utils@1.2.0':
- dependencies:
- tslib: 2.6.3
-
- '@segment/analytics-node@2.1.2':
- dependencies:
- '@lukeed/uuid': 2.0.1
- '@segment/analytics-core': 1.6.0
- '@segment/analytics-generic-utils': 1.2.0
- buffer: 6.0.3
- jose: 5.6.3
- node-fetch: 2.7.0
- tslib: 2.6.3
- transitivePeerDependencies:
- - encoding
-
'@shikijs/core@1.9.1': {}
'@sinclair/typebox@0.27.8': {}
- '@stackblitz/sdk@1.11.0': {}
-
'@stylistic/eslint-plugin-js@2.3.0(eslint@9.5.0)':
dependencies:
'@types/eslint': 8.56.10
@@ -7166,10 +6677,6 @@ snapshots:
dependencies:
'@types/estree': 1.0.5
- '@types/conventional-commits-parser@5.0.0':
- dependencies:
- '@types/node': 20.14.9
-
'@types/cookie@0.6.0': {}
'@types/debug@4.1.12':
@@ -7434,8 +6941,6 @@ snapshots:
'@unocss/preset-mini': 0.61.3
'@unocss/rule-utils': 0.61.3
- '@unocss/reset@0.61.0': {}
-
'@unocss/reset@0.61.3': {}
'@unocss/rule-utils@0.61.3':
@@ -7637,11 +7142,6 @@ snapshots:
'@zxing/text-encoding@0.9.0':
optional: true
- JSONStream@1.3.5:
- dependencies:
- jsonparse: 1.3.1
- through: 2.3.8
-
abort-controller@3.0.0:
dependencies:
event-target-shim: 5.0.1
@@ -7698,13 +7198,6 @@ snapshots:
json-schema-traverse: 0.4.1
uri-js: 4.4.1
- ajv@8.16.0:
- dependencies:
- fast-deep-equal: 3.1.3
- json-schema-traverse: 1.0.0
- require-from-string: 2.0.2
- uri-js: 4.4.1
-
ansi-regex@5.0.1: {}
ansi-regex@6.0.1: {}
@@ -7740,8 +7233,6 @@ snapshots:
array-flatten@1.1.1: {}
- array-ify@1.0.0: {}
-
array-union@2.1.0: {}
as-table@1.0.55:
@@ -7903,11 +7394,6 @@ snapshots:
base64-js: 1.5.1
ieee754: 1.2.1
- buffer@6.0.3:
- dependencies:
- base64-js: 1.5.1
- ieee754: 1.2.1
-
builtin-status-codes@3.0.0: {}
bytes@3.0.0:
@@ -8017,12 +7503,6 @@ snapshots:
client-only@0.0.1: {}
- cliui@8.0.1:
- dependencies:
- string-width: 4.2.3
- strip-ansi: 6.0.1
- wrap-ansi: 7.0.0
-
clone@1.0.4: {}
clsx@2.1.1: {}
@@ -8051,21 +7531,8 @@ snapshots:
comma-separated-tokens@2.0.3: {}
- commitlint@19.3.0(@types/node@20.14.9)(typescript@5.5.2):
- dependencies:
- '@commitlint/cli': 19.3.0(@types/node@20.14.9)(typescript@5.5.2)
- '@commitlint/types': 19.0.3
- transitivePeerDependencies:
- - '@types/node'
- - typescript
-
common-tags@1.8.2: {}
- compare-func@2.0.0:
- dependencies:
- array-ify: 1.0.0
- dot-prop: 5.3.0
-
compressible@2.0.18:
dependencies:
mime-db: 1.52.0
@@ -8100,21 +7567,6 @@ snapshots:
content-type@1.0.5: {}
- conventional-changelog-angular@7.0.0:
- dependencies:
- compare-func: 2.0.0
-
- conventional-changelog-conventionalcommits@7.0.2:
- dependencies:
- compare-func: 2.0.0
-
- conventional-commits-parser@5.0.0:
- dependencies:
- JSONStream: 1.3.5
- is-text-path: 2.0.0
- meow: 12.1.1
- split2: 4.2.0
-
convert-source-map@2.0.0: {}
cookie-signature@1.0.6: {}
@@ -8127,22 +7579,6 @@ snapshots:
core-util-is@1.0.3: {}
- cosmiconfig-typescript-loader@5.0.0(@types/node@20.14.9)(cosmiconfig@9.0.0(typescript@5.5.2))(typescript@5.5.2):
- dependencies:
- '@types/node': 20.14.9
- cosmiconfig: 9.0.0(typescript@5.5.2)
- jiti: 1.21.6
- typescript: 5.5.2
-
- cosmiconfig@9.0.0(typescript@5.5.2):
- dependencies:
- env-paths: 2.2.1
- import-fresh: 3.3.0
- js-yaml: 4.1.0
- parse-json: 5.2.0
- optionalDependencies:
- typescript: 5.5.2
-
create-ecdh@4.0.4:
dependencies:
bn.js: 4.12.0
@@ -8200,8 +7636,6 @@ snapshots:
csstype@3.1.3: {}
- dargs@8.1.0: {}
-
data-uri-to-buffer@2.0.2: {}
data-uri-to-buffer@3.0.1: {}
@@ -8287,14 +7721,8 @@ snapshots:
domain-browser@4.23.0: {}
- dot-prop@5.3.0:
- dependencies:
- is-obj: 2.0.0
-
dotenv@16.4.5: {}
- dset@3.1.3: {}
-
duplexer@0.1.2: {}
duplexify@3.7.1:
@@ -8336,14 +7764,8 @@ snapshots:
entities@4.5.0: {}
- env-paths@2.2.1: {}
-
err-code@2.0.3: {}
- error-ex@1.3.2:
- dependencies:
- is-arrayish: 0.2.1
-
es-define-property@1.0.0:
dependencies:
get-intrinsic: 1.2.4
@@ -8722,12 +8144,6 @@ snapshots:
locate-path: 6.0.0
path-exists: 4.0.0
- find-up@7.0.0:
- dependencies:
- locate-path: 7.2.0
- path-exists: 5.0.0
- unicorn-magic: 0.1.0
-
flat-cache@4.0.1:
dependencies:
flatted: 3.3.1
@@ -8788,8 +8204,6 @@ snapshots:
gensync@1.0.0-beta.2: {}
- get-caller-file@2.0.5: {}
-
get-func-name@2.0.2: {}
get-intrinsic@1.2.4:
@@ -8813,12 +8227,6 @@ snapshots:
get-stream@8.0.1: {}
- git-raw-commits@4.0.0:
- dependencies:
- dargs: 8.1.0
- meow: 12.1.1
- split2: 4.2.0
-
glob-parent@5.1.2:
dependencies:
is-glob: 4.0.3
@@ -8838,10 +8246,6 @@ snapshots:
package-json-from-dist: 1.0.0
path-scurry: 1.11.1
- global-directory@4.0.1:
- dependencies:
- ini: 4.1.1
-
globals@11.12.0: {}
globals@14.0.0: {}
@@ -9045,8 +8449,6 @@ snapshots:
human-signals@5.0.0: {}
- husky@9.0.11: {}
-
iconv-lite@0.4.24:
dependencies:
safer-buffer: 2.1.2
@@ -9067,16 +8469,12 @@ snapshots:
parent-module: 1.0.1
resolve-from: 4.0.0
- import-meta-resolve@4.1.0: {}
-
imurmurhash@0.1.4: {}
indent-string@4.0.0: {}
inherits@2.0.4: {}
- ini@4.1.1: {}
-
inline-style-parser@0.1.1: {}
inline-style-parser@0.2.3: {}
@@ -9099,8 +8497,6 @@ snapshots:
call-bind: 1.0.7
has-tostringtag: 1.0.2
- is-arrayish@0.2.1: {}
-
is-binary-path@2.1.0:
dependencies:
binary-extensions: 2.3.0
@@ -9146,8 +8542,6 @@ snapshots:
is-number@7.0.0: {}
- is-obj@2.0.0: {}
-
is-path-inside@3.0.3: {}
is-plain-obj@3.0.0: {}
@@ -9162,10 +8556,6 @@ snapshots:
is-stream@3.0.0: {}
- is-text-path@2.0.0:
- dependencies:
- text-extensions: 2.4.0
-
is-typed-array@1.1.13:
dependencies:
which-typed-array: 1.1.15
@@ -9210,14 +8600,10 @@ snapshots:
json-buffer@3.0.1: {}
- json-parse-even-better-errors@2.3.1: {}
-
json-parse-even-better-errors@3.0.2: {}
json-schema-traverse@0.4.1: {}
- json-schema-traverse@1.0.0: {}
-
json-schema@0.4.0: {}
json-stable-stringify-without-jsonify@1.0.1: {}
@@ -9243,8 +8629,6 @@ snapshots:
optionalDependencies:
graceful-fs: 4.2.11
- jsonparse@1.3.1: {}
-
keyv@4.5.4:
dependencies:
json-buffer: 3.0.1
@@ -9260,8 +8644,6 @@ snapshots:
lilconfig@3.1.2: {}
- lines-and-columns@1.2.4: {}
-
loader-utils@3.3.1: {}
local-pkg@0.5.0:
@@ -9275,30 +8657,12 @@ snapshots:
dependencies:
p-locate: 5.0.0
- locate-path@7.2.0:
- dependencies:
- p-locate: 6.0.0
-
lodash.camelcase@4.3.0: {}
lodash.debounce@4.0.8: {}
- lodash.isplainobject@4.0.6: {}
-
- lodash.kebabcase@4.1.1: {}
-
lodash.merge@4.6.2: {}
- lodash.mergewith@4.6.2: {}
-
- lodash.snakecase@4.1.1: {}
-
- lodash.startcase@4.4.0: {}
-
- lodash.uniq@4.5.0: {}
-
- lodash.upperfirst@4.3.1: {}
-
lodash@4.17.21: {}
log-symbols@4.1.0:
@@ -9610,8 +8974,6 @@ snapshots:
media-typer@0.3.0: {}
- meow@12.1.1: {}
-
merge-descriptors@1.0.1: {}
merge-stream@2.0.0: {}
@@ -10160,10 +9522,6 @@ snapshots:
node-fetch-native@1.6.4: {}
- node-fetch@2.7.0:
- dependencies:
- whatwg-url: 5.0.0
-
node-fetch@3.3.2:
dependencies:
data-uri-to-buffer: 4.0.1
@@ -10316,18 +9674,10 @@ snapshots:
dependencies:
yocto-queue: 0.1.0
- p-limit@4.0.0:
- dependencies:
- yocto-queue: 1.0.0
-
p-locate@5.0.0:
dependencies:
p-limit: 3.1.0
- p-locate@6.0.0:
- dependencies:
- p-limit: 4.0.0
-
p-map@4.0.0:
dependencies:
aggregate-error: 3.1.0
@@ -10362,13 +9712,6 @@ snapshots:
is-decimal: 2.0.1
is-hexadecimal: 2.0.1
- parse-json@5.2.0:
- dependencies:
- '@babel/code-frame': 7.24.7
- error-ex: 1.3.2
- json-parse-even-better-errors: 2.3.1
- lines-and-columns: 1.2.4
-
parse-ms@2.1.0: {}
parse5@7.1.2:
@@ -10381,8 +9724,6 @@ snapshots:
path-exists@4.0.0: {}
- path-exists@5.0.0: {}
-
path-key@3.1.1: {}
path-key@4.0.0: {}
@@ -10803,16 +10144,10 @@ snapshots:
react: 18.3.1
zod: 3.23.8
- require-directory@2.1.1: {}
-
- require-from-string@2.0.2: {}
-
require-like@0.1.2: {}
resolve-from@4.0.0: {}
- resolve-from@5.0.0: {}
-
resolve.exports@2.0.2: {}
resolve@1.22.8:
@@ -11014,8 +10349,6 @@ snapshots:
spdx-license-ids@3.0.18: {}
- split2@4.2.0: {}
-
ssri@10.0.6:
dependencies:
minipass: 7.1.2
@@ -11179,8 +10512,6 @@ snapshots:
mkdirp: 1.0.4
yallist: 4.0.0
- text-extensions@2.4.0: {}
-
text-table@0.2.0: {}
textextensions@6.11.0:
@@ -11192,8 +10523,6 @@ snapshots:
readable-stream: 2.3.8
xtend: 4.0.2
- through@2.3.8: {}
-
timers-browserify@2.0.12:
dependencies:
setimmediate: 1.0.5
@@ -11216,8 +10545,6 @@ snapshots:
totalist@3.0.1: {}
- tr46@0.0.3: {}
-
trim-lines@3.0.1: {}
trough@2.2.0: {}
@@ -11291,8 +10618,6 @@ snapshots:
pathe: 1.1.2
ufo: 1.5.3
- unicorn-magic@0.1.0: {}
-
unified@10.1.2:
dependencies:
'@types/unist': 2.0.10
@@ -11634,13 +10959,6 @@ snapshots:
web-streams-polyfill@3.3.3: {}
- webidl-conversions@3.0.1: {}
-
- whatwg-url@5.0.0:
- dependencies:
- tr46: 0.0.3
- webidl-conversions: 3.0.1
-
which-typed-array@1.1.15:
dependencies:
available-typed-arrays: 1.0.7
@@ -11720,30 +11038,14 @@ snapshots:
xxhash-wasm@1.0.2: {}
- y18n@5.0.8: {}
-
yallist@3.1.1: {}
yallist@4.0.0: {}
yaml@2.4.5: {}
- yargs-parser@21.1.1: {}
-
- yargs@17.7.2:
- dependencies:
- cliui: 8.0.1
- escalade: 3.1.2
- get-caller-file: 2.0.5
- require-directory: 2.1.1
- string-width: 4.2.3
- y18n: 5.0.8
- yargs-parser: 21.1.1
-
yocto-queue@0.1.0: {}
- yocto-queue@1.0.0: {}
-
youch@3.3.3:
dependencies:
cookie: 0.5.0
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
deleted file mode 100644
index 18ec407..0000000
--- a/pnpm-workspace.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-packages:
- - 'packages/*'
diff --git a/packages/bolt/public/favicon.svg b/public/favicon.svg
similarity index 100%
rename from packages/bolt/public/favicon.svg
rename to public/favicon.svg
diff --git a/packages/bolt/public/logo.svg b/public/logo.svg
similarity index 100%
rename from packages/bolt/public/logo.svg
rename to public/logo.svg
diff --git a/packages/bolt/tsconfig.json b/tsconfig.json
similarity index 100%
rename from packages/bolt/tsconfig.json
rename to tsconfig.json
diff --git a/packages/bolt/types/istextorbinary.d.ts b/types/istextorbinary.d.ts
similarity index 100%
rename from packages/bolt/types/istextorbinary.d.ts
rename to types/istextorbinary.d.ts
diff --git a/packages/bolt/uno.config.ts b/uno.config.ts
similarity index 100%
rename from packages/bolt/uno.config.ts
rename to uno.config.ts
diff --git a/packages/bolt/vite.config.ts b/vite.config.ts
similarity index 100%
rename from packages/bolt/vite.config.ts
rename to vite.config.ts
diff --git a/packages/bolt/worker-configuration.d.ts b/worker-configuration.d.ts
similarity index 100%
rename from packages/bolt/worker-configuration.d.ts
rename to worker-configuration.d.ts
diff --git a/packages/bolt/wrangler.toml b/wrangler.toml
similarity index 100%
rename from packages/bolt/wrangler.toml
rename to wrangler.toml