remove: telegram bot support

This commit is contained in:
Marcus Schiesser
2023-10-24 14:59:54 +07:00
parent 55b01effae
commit dca5f1163f
13 changed files with 3 additions and 836 deletions
-1
View File
@@ -1,2 +1 @@
public/serviceWorker.js
app/client/platforms/telegram.ts
-95
View File
@@ -1,95 +0,0 @@
import telegramifyMarkdown from "telegramify-markdown";
const timeout: number = 10;
export enum ParseMode {
"MarkdownV2" = "MarkdownV2",
"HTML" = "HTML",
}
export interface PollUpdate {
update_id: number;
my_chat_member: {
chat: {
id: number;
};
};
message: {
chat: {
id: number;
};
text: string;
};
}
interface TelegramResponse {
ok: boolean;
result: PollUpdate[];
error_code?: number;
}
export interface PollResponse {
ok: boolean;
newOffset?: number;
description?: string;
error_code?: number;
}
export type PollUpdater = (update: PollUpdate) => void;
export class TelegramAPI {
sendMessage(
token: string,
chatId: number,
text: string,
parse_mode?: ParseMode,
): void {
if (parse_mode === ParseMode.MarkdownV2) {
// XXX: need to escape > and | symbols as telegramifyMarkdown doesn't do it
const clean = (text: string) => text.replace(/([>|])/g, "\\$1");
text = clean(telegramifyMarkdown(text));
}
const data = {
chat_id: chatId,
text: text,
parse_mode: parse_mode,
};
console.log("[Request] telegram payload: ", data);
fetch(`https://api.telegram.org/bot${token}/sendMessage`, {
method: "POST",
body: JSON.stringify(data),
headers: {
"Content-Type": "application/json",
},
}).catch(console.error);
}
async poll(
token: string,
updater: PollUpdater,
offset?: number,
): Promise<PollResponse> {
let url: string = `https://api.telegram.org/bot${token}/getUpdates?timeout=${timeout}`;
if (offset) url += "&offset=" + offset;
try {
const response = await fetch(url);
const data: TelegramResponse = await response.json();
if (!data.ok) {
return data;
}
const updates = data.result;
let newOffset: number | undefined;
if (updates.length > 0) {
newOffset = updates[updates.length - 1].update_id + 1;
}
updates.forEach((data) => updater(data));
return { ok: true, newOffset };
} catch (err: any) {
return { ok: false, description: err.message };
}
}
}
@@ -1,166 +0,0 @@
import { DEFAULT_DEPLOYMENT, Deployment } from "@/app/store/deployment";
import { useWorkerStore } from "@/app/store/workers";
import { Ban, Zap } from "lucide-react";
import { useEffect, useState } from "react";
import Locale from "../../../locales";
import { Button } from "../../ui/button";
import { Card, CardContent } from "../../ui/card";
import {
DialogContent,
DialogFooter,
DialogHeader,
DialogTitle,
} from "../../ui/dialog";
import { Input } from "../../ui/input";
import { Separator } from "../../ui/separator";
import { useBot } from "../use-bot";
import { Loading } from "@/app/components/ui/loading";
enum Status {
Stopped = "STOPPED",
Starting = "STARTING",
Stopping = "STOPPING",
Running = "RUNNING",
InvalidToken = "INVALID_TOKEN",
Unknown = "UNKNOWN",
}
export default function DeployBotDialogContent() {
const { bot, updateBot } = useBot();
const workerStore = useWorkerStore();
const [status, setStatus] = useState(Status.Stopped);
const deployment = bot.deployment || DEFAULT_DEPLOYMENT;
const worker = deployment.worker_id
? workerStore.get(deployment.worker_id)
: null;
const updateConfig = (updater: (config: Deployment) => void) => {
const config = { ...deployment };
updater(config);
updateBot((bot) => {
bot.deployment = config;
});
};
const onChangeInput = (e: React.ChangeEvent<HTMLInputElement>) => {
updateConfig((config) => (config.token = e.currentTarget.value));
};
const startBot = () => {
const worker = new Worker(
new URL("../../../workers/telegram.ts", import.meta.url),
);
const id = workerStore.create(worker);
worker.postMessage({
command: "start",
data: {
token: deployment.token,
bot: bot,
},
});
updateConfig((config) => (config.worker_id = id));
};
const stopBot = () => {
if (worker) {
worker.postMessage({ command: "stop" });
workerStore.delete(deployment.worker_id!);
updateConfig((config) => (config.worker_id = null));
}
};
const renderStatus = (status: Status | string) => {
switch (status) {
case Status.Stopped:
return "Bot not running.";
case Status.Starting:
case Status.Stopping:
return (
<div className="text-primary">
<Loading />
</div>
);
case Status.Running:
return "Bot running.";
case Status.InvalidToken:
status = "Invalid Telegram bot token. Please check.";
default:
return <span className="text-destructive">{status}</span>;
}
};
useEffect(() => {
// set status from worker and setup message callback
// from worker
if (worker) {
worker.onmessage = function (event) {
// Handle the received message here
const status: Status = event.data.status;
if (status === Status.Unknown) {
setStatus(event.data.error ?? Status.Unknown);
} else {
setStatus(status);
}
};
// if worker already exists, ask it of its last status, if we don't receive a message
// we assume that the worker is already stopped (which is ok as the default status is 'stopped')
worker.postMessage({ command: "get_status" });
}
}, [worker]);
return (
<DialogContent className="max-w-3xl">
<DialogHeader>
<DialogTitle>{Locale.Deploy.Config.Title}</DialogTitle>
</DialogHeader>
<Separator />
<Card>
<CardContent className="flex items-center justify-between p-6 gap-4">
<div className="w-1/2">
<div className="font-bold">{Locale.Deploy.Config.Token.Title}</div>
<div className="text-sm">
{Locale.Deploy.Config.Token.Hint}&nbsp;
<a
href="https://t.me/BotFather"
target="_blank"
className="text-primary"
>
https://t.me/BotFather
</a>
</div>
</div>
<Input
className="flex-1"
type="text"
value={bot.deployment?.token}
placeholder={Locale.Deploy.Config.Token.Placeholder}
onInput={onChangeInput}
/>
</CardContent>
</Card>
<DialogFooter className="items-center">
<div>{renderStatus(status)}</div>
<Button
disabled={
status === Status.Running ||
status === Status.Starting ||
status === Status.Stopping
}
onClick={startBot}
>
<Zap className="mr-2 w-4 h-4" />
{Locale.Deploy.Config.Start}
</Button>
<Button
variant="destructive"
disabled={status !== Status.Running}
onClick={stopBot}
>
<Ban className="mr-2 w-4 h-4" />
{Locale.Deploy.Config.Stop}
</Button>
</DialogFooter>
</DialogContent>
);
}
-11
View File
@@ -4,7 +4,6 @@ import {
MoreHorizontal,
Share2,
XCircle,
Zap,
} from "lucide-react";
import { useState } from "react";
import Locale from "../../../locales";
@@ -22,7 +21,6 @@ import {
import { useBot } from "../use-bot";
import DeleteBotDialogContent from "./delete-bot-dialog";
import EditBotDialogContent from "./edit-bot-dialog";
import DeployBotDialogContent from "./deploy-bot-dialog";
import ShareBotDialogContent from "./share-bot-dialog";
export default function BotOptions() {
@@ -64,15 +62,6 @@ export default function BotOptions() {
<span>{Locale.Bot.Item.Delete}</span>
</DropdownMenuItem>
</AlertDialogTrigger>
<DialogTrigger asChild>
<DropdownMenuItem
disabled={isReadOnly && !isShareble}
onClick={() => setDialogContent(<DeployBotDialogContent />)}
>
<Zap className="mr-2 w-4 h-4" />
<span>{Locale.Bot.Item.Deploy}</span>
</DropdownMenuItem>
</DialogTrigger>
<DialogTrigger asChild>
<DropdownMenuItem
disabled={isReadOnly}
-13
View File
@@ -99,18 +99,6 @@ const en = {
Error: "Oops, something went wrong. Please try again later.",
},
},
Deploy: {
Config: {
Title: "Deploy Bot To Telegram",
Start: "Start Bot",
Stop: "Stop Bot",
Token: {
Title: "Telegram Bot token",
Hint: "Enter your Telegram Bot token, get it from",
Placeholder: "Telegram Bot token",
},
},
},
Bot: {
Name: "Bot",
Page: {
@@ -121,7 +109,6 @@ const en = {
Edit: "Edit",
Delete: "Delete",
DeleteConfirm: "Confirm to delete?",
Deploy: "Telegram",
Share: "Share",
},
EditModal: {
-3
View File
@@ -2,7 +2,6 @@ import { nanoid } from "nanoid";
import { create } from "zustand";
import { persist } from "zustand/middleware";
import { LLMConfig } from "../client/platforms/llm";
import { Deployment } from "./deployment";
import { ChatSession, ChatMessage } from "./session";
import { createDemoBots, createEmptyBot } from "@/app/bots/bot.data";
@@ -20,7 +19,6 @@ export type Bot = {
readOnly: boolean;
botHello: string | null;
datasource?: string;
deployment?: Deployment;
share?: Share;
createdAt?: number;
session: ChatSession;
@@ -98,7 +96,6 @@ export const useBotStore = create<BotStore>()(
};
if (options?.reset) {
bots[id].share = undefined;
bots[id].deployment = undefined;
}
set(() => ({ bots }));
return bots[id];
-9
View File
@@ -1,9 +0,0 @@
export type Deployment = {
worker_id: number | null;
token: string;
};
export const DEFAULT_DEPLOYMENT: Deployment = {
worker_id: null,
token: "",
};
+2 -7
View File
@@ -105,7 +105,7 @@ export async function callSession(
onUpdateMessages: (messages: ChatMessage[]) => void;
},
uploadedFile?: FileWrap,
): Promise<ChatMessage | undefined> {
): Promise<void> {
const modelConfig = bot.modelConfig;
let userMessage: ChatMessage;
@@ -128,7 +128,7 @@ export async function callSession(
// updating the session will trigger a re-render, so it will display the messages
session.messages = session.messages.concat([userMessage, botMessage]);
callbacks.onUpdateMessages(session.messages);
return botMessage;
return;
}
const botMessage: ChatMessage = createMessage({
@@ -171,7 +171,6 @@ export async function callSession(
}
// make request
let result;
const controller = new AbortController();
ChatControllerPool.addController(bot.id, controller);
const api = new LLMApi();
@@ -197,8 +196,6 @@ export async function callSession(
}
callbacks.onUpdateMessages(session.messages.concat());
ChatControllerPool.remove(bot.id);
// TODO: check send memory message to telegram
result = botMessage;
},
onError(error) {
const isAborted = error.message.includes("aborted");
@@ -215,8 +212,6 @@ export async function callSession(
ChatControllerPool.remove(bot.id);
console.error("[Chat] failed ", error);
result = botMessage;
},
});
return result;
}
-35
View File
@@ -1,35 +0,0 @@
import { create } from "zustand";
const DEFAULT_WORKER_STATE = {
workers: {} as Record<number, Worker>,
globalWorkerId: 0,
};
type WorkerState = typeof DEFAULT_WORKER_STATE;
type WorkerStore = WorkerState & {
create: (worker: Worker) => number;
delete: (id: number) => void;
get: (id: number) => Worker | null;
};
export const useWorkerStore = create<WorkerStore>((set, get) => ({
...DEFAULT_WORKER_STATE,
create(worker: Worker) {
set(() => ({ globalWorkerId: get().globalWorkerId + 1 }));
const id = get().globalWorkerId;
const workers = get().workers;
workers[id] = worker;
set(() => ({ workers }));
return id;
},
delete(id) {
const workers = get().workers;
if (workers[id]) {
delete workers[id];
set(() => ({ workers }));
}
},
get(id) {
return get().workers[id] ?? null;
},
}));
-170
View File
@@ -1,170 +0,0 @@
import {
ParseMode,
PollUpdate,
TelegramAPI,
} from "../client/platforms/telegram";
import {
ChatMessage,
ChatSession,
callSession,
createEmptySession,
} from "../store";
import { Bot } from "../store/bot";
interface State {
running: boolean;
lastStatus: Status;
startData: StartCommandData;
chats: Record<number, ChatSession>;
}
interface Status {
status: string;
error?: string;
}
interface StartCommandData {
token: string;
openaiToken: string;
bot: Bot;
}
interface Command {
command: string;
data?: StartCommandData;
}
const ctx: State = self as any;
ctx.running = false;
ctx.chats = {};
const telegram = new TelegramAPI();
function handleBotCommands(
chatId: number,
message: string,
): string | undefined {
const commandResponses: any = {
"/start": ctx.startData.bot.botHello || "Hello!",
"/help":
"/clear - clear context\n/start - show welcome message\n/help - show this message",
"/clear": () => {
resetChat(chatId);
return "Context cleared";
},
};
if (Object.keys(commandResponses).includes(message)) {
let response = commandResponses[message];
if (typeof response === "function") {
response = response();
}
return response;
}
}
async function handleUpdate(update: PollUpdate): Promise<void> {
const message = update.message;
if (!message) {
if (update.my_chat_member) {
telegram.sendMessage(
ctx.startData.token,
update.my_chat_member.chat.id,
"Sorry I can't talk in a group. Please add me to a private chat.",
);
} else {
console.error("Unknown update type", update);
}
return;
}
const cmdMessage = handleBotCommands(message.chat.id, message.text);
if (cmdMessage) {
telegram.sendMessage(ctx.startData.token, message.chat.id, cmdMessage);
return;
}
const aiMessage = await handleAI(message.chat.id, message.text);
if (aiMessage) {
telegram.sendMessage(
ctx.startData.token,
message.chat.id,
aiMessage.content,
ParseMode.MarkdownV2,
);
return;
}
}
async function handleAI(
chatId: number,
text: string,
): Promise<ChatMessage | undefined> {
const session = getChatSession(chatId);
return await callSession(ctx.startData.bot, session, text, {
onUpdateMessages: (newMessages) => {
session.messages = newMessages;
},
});
}
function setStatus(status: Status): void {
ctx.lastStatus = status;
self.postMessage(status);
}
function getChatSession(chatId: number): ChatSession {
if (!ctx.chats[chatId]) {
resetChat(chatId);
}
return ctx.chats[chatId];
}
function resetChat(chatId: number): void {
ctx.chats[chatId] = createEmptySession();
}
async function start(data: StartCommandData): Promise<void> {
ctx.startData = data;
let offset: number | undefined;
setStatus({ status: "STARTING" });
ctx.running = true;
for (let i = 0; ; i++) {
const result = await telegram.poll(data.token, handleUpdate, offset);
if (!ctx.running) {
setStatus({ status: "STOPPED" });
break;
}
if (!result.ok) {
if (result.error_code === 404) {
setStatus({ status: "INVALID_TOKEN" });
} else {
setStatus({ status: "UNKNOWN", error: result.description });
}
break;
}
if (result.ok && i == 0) {
setStatus({ status: "RUNNING" });
}
offset = result.newOffset;
}
self.close();
}
function stop(): void {
setStatus({ status: "STOPPING" });
ctx.running = false;
}
self.onmessage = async function (event: MessageEvent): Promise<void> {
// get the command from the main thread
const command: Command = event.data;
if (command.command === "start") {
start(command.data!);
} else if (command.command === "get_status") {
self.postMessage(ctx.lastStatus);
} else if (command.command === "stop") {
stop();
} else {
console.error("Unknown command: " + command.command);
}
};
-1
View File
@@ -63,7 +63,6 @@
"tailwind-merge": "^1.14.0",
"tailwindcss": "3.3.3",
"tailwindcss-animate": "^1.0.7",
"telegramify-markdown": "^1.1.0",
"unified": "^10.1.2",
"unist-util-remove": "^4.0.0",
"use-debounce": "^9.0.4",
+1 -324
View File
@@ -155,9 +155,6 @@ dependencies:
tailwindcss-animate:
specifier: ^1.0.7
version: 1.0.7(tailwindcss@3.3.3)
telegramify-markdown:
specifier: ^1.1.0
version: 1.1.0
unified:
specifier: ^10.1.2
version: 10.1.2
@@ -1916,10 +1913,6 @@ packages:
dequal: 2.0.3
dev: true
/bail@1.0.5:
resolution: {integrity: sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==}
dev: false
/bail@2.0.2:
resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
dev: false
@@ -2031,10 +2024,6 @@ packages:
resolution: {integrity: sha512-N0ttd6TrFfuqKNi+pMgWJTb9qrdJu4JSpgPFLe/lrD19ugC6fZgF0pUewRowDwzdDnb9V41mFcdlYgl/PyKf4A==}
dev: false
/ccount@1.1.0:
resolution: {integrity: sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==}
dev: false
/ccount@2.0.1:
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
dev: false
@@ -2052,22 +2041,10 @@ packages:
engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
dev: true
/character-entities-legacy@1.1.4:
resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==}
dev: false
/character-entities@1.2.4:
resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==}
dev: false
/character-entities@2.0.2:
resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
dev: false
/character-reference-invalid@1.1.4:
resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==}
dev: false
/charenc@0.0.2:
resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==}
dev: false
@@ -2834,6 +2811,7 @@ packages:
/escape-string-regexp@4.0.0:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
dev: true
/escape-string-regexp@5.0.0:
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
@@ -3635,10 +3613,6 @@ packages:
engines: {node: '>=12.0.0'}
dev: false
/html-comment-regex@1.1.2:
resolution: {integrity: sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==}
dev: false
/human-signals@2.1.0:
resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
engines: {node: '>=10.17.0'}
@@ -3736,17 +3710,6 @@ packages:
loose-envify: 1.4.0
dev: false
/is-alphabetical@1.0.4:
resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==}
dev: false
/is-alphanumerical@1.0.4:
resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==}
dependencies:
is-alphabetical: 1.0.4
is-decimal: 1.0.4
dev: false
/is-array-buffer@3.0.2:
resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==}
dependencies:
@@ -3809,10 +3772,6 @@ packages:
has-tostringtag: 1.0.0
dev: true
/is-decimal@1.0.4:
resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==}
dev: false
/is-docker@2.2.1:
resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
engines: {node: '>=8'}
@@ -3858,10 +3817,6 @@ packages:
dependencies:
is-extglob: 2.1.1
/is-hexadecimal@1.0.4:
resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==}
dev: false
/is-inside-container@1.0.0:
resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
engines: {node: '>=14.16'}
@@ -3895,11 +3850,6 @@ packages:
engines: {node: '>=8'}
dev: true
/is-plain-obj@2.1.0:
resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
engines: {node: '>=8'}
dev: false
/is-plain-obj@4.1.0:
resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
engines: {node: '>=12'}
@@ -4241,10 +4191,6 @@ packages:
wrap-ansi: 6.2.0
dev: true
/longest-streak@2.0.4:
resolution: {integrity: sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==}
dev: false
/longest-streak@3.1.0:
resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
dev: false
@@ -4302,12 +4248,6 @@ packages:
xmlbuilder: 10.1.1
dev: false
/markdown-table@2.0.0:
resolution: {integrity: sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==}
dependencies:
repeat-string: 1.6.1
dev: false
/markdown-table@3.0.3:
resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==}
dev: false
@@ -4339,14 +4279,6 @@ packages:
unist-util-visit: 4.1.2
dev: false
/mdast-util-find-and-replace@1.1.1:
resolution: {integrity: sha512-9cKl33Y21lyckGzpSmEQnIDjEfeeWelN5s1kUW1LwdB0Fkuq2u+4GdqcGEygYxJE8GVqCl0741bYXHgamfWAZA==}
dependencies:
escape-string-regexp: 4.0.0
unist-util-is: 4.1.0
unist-util-visit-parents: 3.1.1
dev: false
/mdast-util-find-and-replace@2.2.2:
resolution: {integrity: sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==}
dependencies:
@@ -4356,18 +4288,6 @@ packages:
unist-util-visit-parents: 5.1.3
dev: false
/mdast-util-from-markdown@0.8.5:
resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==}
dependencies:
'@types/mdast': 3.0.13
mdast-util-to-string: 2.0.0
micromark: 2.11.4
parse-entities: 2.0.0
unist-util-stringify-position: 2.0.3
transitivePeerDependencies:
- supports-color
dev: false
/mdast-util-from-markdown@1.3.1:
resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==}
dependencies:
@@ -4387,16 +4307,6 @@ packages:
- supports-color
dev: false
/mdast-util-gfm-autolink-literal@0.1.3:
resolution: {integrity: sha512-GjmLjWrXg1wqMIO9+ZsRik/s7PLwTaeCHVB7vRxUwLntZc8mzmTsLVr6HW1yLokcnhfURsn5zmSVdi3/xWWu1A==}
dependencies:
ccount: 1.1.0
mdast-util-find-and-replace: 1.1.1
micromark: 2.11.4
transitivePeerDependencies:
- supports-color
dev: false
/mdast-util-gfm-autolink-literal@1.0.3:
resolution: {integrity: sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==}
dependencies:
@@ -4414,12 +4324,6 @@ packages:
micromark-util-normalize-identifier: 1.1.0
dev: false
/mdast-util-gfm-strikethrough@0.2.3:
resolution: {integrity: sha512-5OQLXpt6qdbttcDG/UxYY7Yjj3e8P7X16LzvpX8pIQPYJ/C2Z1qFGMmcw+1PZMUM3Z8wt8NRfYTvCni93mgsgA==}
dependencies:
mdast-util-to-markdown: 0.6.5
dev: false
/mdast-util-gfm-strikethrough@1.0.3:
resolution: {integrity: sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==}
dependencies:
@@ -4427,13 +4331,6 @@ packages:
mdast-util-to-markdown: 1.5.0
dev: false
/mdast-util-gfm-table@0.1.6:
resolution: {integrity: sha512-j4yDxQ66AJSBwGkbpFEp9uG/LS1tZV3P33fN1gkyRB2LoRL+RR3f76m0HPHaby6F4Z5xr9Fv1URmATlRRUIpRQ==}
dependencies:
markdown-table: 2.0.0
mdast-util-to-markdown: 0.6.5
dev: false
/mdast-util-gfm-table@1.0.7:
resolution: {integrity: sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==}
dependencies:
@@ -4445,12 +4342,6 @@ packages:
- supports-color
dev: false
/mdast-util-gfm-task-list-item@0.1.6:
resolution: {integrity: sha512-/d51FFIfPsSmCIRNp7E6pozM9z1GYPIkSy1urQ8s/o4TC22BZ7DqfHFWiqBD23bc7J3vV1Fc9O4QIHBlfuit8A==}
dependencies:
mdast-util-to-markdown: 0.6.5
dev: false
/mdast-util-gfm-task-list-item@1.0.2:
resolution: {integrity: sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==}
dependencies:
@@ -4458,18 +4349,6 @@ packages:
mdast-util-to-markdown: 1.5.0
dev: false
/mdast-util-gfm@0.1.2:
resolution: {integrity: sha512-NNkhDx/qYcuOWB7xHUGWZYVXvjPFFd6afg6/e2g+SV4r9q5XUcCbV4Wfa3DLYIiD+xAEZc6K4MGaE/m0KDcPwQ==}
dependencies:
mdast-util-gfm-autolink-literal: 0.1.3
mdast-util-gfm-strikethrough: 0.2.3
mdast-util-gfm-table: 0.1.6
mdast-util-gfm-task-list-item: 0.1.6
mdast-util-to-markdown: 0.6.5
transitivePeerDependencies:
- supports-color
dev: false
/mdast-util-gfm@2.0.2:
resolution: {integrity: sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==}
dependencies:
@@ -4519,17 +4398,6 @@ packages:
unist-util-visit: 4.1.2
dev: false
/mdast-util-to-markdown@0.6.5:
resolution: {integrity: sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==}
dependencies:
'@types/unist': 2.0.8
longest-streak: 2.0.4
mdast-util-to-string: 2.0.0
parse-entities: 2.0.0
repeat-string: 1.6.1
zwitch: 1.0.5
dev: false
/mdast-util-to-markdown@1.5.0:
resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==}
dependencies:
@@ -4543,10 +4411,6 @@ packages:
zwitch: 2.0.4
dev: false
/mdast-util-to-string@2.0.0:
resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==}
dev: false
/mdast-util-to-string@3.2.0:
resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==}
dependencies:
@@ -4613,14 +4477,6 @@ packages:
uvu: 0.5.6
dev: false
/micromark-extension-gfm-autolink-literal@0.5.7:
resolution: {integrity: sha512-ePiDGH0/lhcngCe8FtH4ARFoxKTUelMp4L7Gg2pujYD5CSMb9PbblnyL+AAMud/SNMyusbS2XDSiPIRcQoNFAw==}
dependencies:
micromark: 2.11.4
transitivePeerDependencies:
- supports-color
dev: false
/micromark-extension-gfm-autolink-literal@1.0.5:
resolution: {integrity: sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==}
dependencies:
@@ -4643,14 +4499,6 @@ packages:
uvu: 0.5.6
dev: false
/micromark-extension-gfm-strikethrough@0.6.5:
resolution: {integrity: sha512-PpOKlgokpQRwUesRwWEp+fHjGGkZEejj83k9gU5iXCbDG+XBA92BqnRKYJdfqfkrRcZRgGuPuXb7DaK/DmxOhw==}
dependencies:
micromark: 2.11.4
transitivePeerDependencies:
- supports-color
dev: false
/micromark-extension-gfm-strikethrough@1.0.7:
resolution: {integrity: sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==}
dependencies:
@@ -4662,14 +4510,6 @@ packages:
uvu: 0.5.6
dev: false
/micromark-extension-gfm-table@0.4.3:
resolution: {integrity: sha512-hVGvESPq0fk6ALWtomcwmgLvH8ZSVpcPjzi0AjPclB9FsVRgMtGZkUcpE0zgjOCFAznKepF4z3hX8z6e3HODdA==}
dependencies:
micromark: 2.11.4
transitivePeerDependencies:
- supports-color
dev: false
/micromark-extension-gfm-table@1.0.7:
resolution: {integrity: sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==}
dependencies:
@@ -4680,24 +4520,12 @@ packages:
uvu: 0.5.6
dev: false
/micromark-extension-gfm-tagfilter@0.3.0:
resolution: {integrity: sha512-9GU0xBatryXifL//FJH+tAZ6i240xQuFrSL7mYi8f4oZSbc+NvXjkrHemeYP0+L4ZUT+Ptz3b95zhUZnMtoi/Q==}
dev: false
/micromark-extension-gfm-tagfilter@1.0.2:
resolution: {integrity: sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==}
dependencies:
micromark-util-types: 1.1.0
dev: false
/micromark-extension-gfm-task-list-item@0.3.3:
resolution: {integrity: sha512-0zvM5iSLKrc/NQl84pZSjGo66aTGd57C1idmlWmE87lkMcXrTxg1uXa/nXomxJytoje9trP0NDLvw4bZ/Z/XCQ==}
dependencies:
micromark: 2.11.4
transitivePeerDependencies:
- supports-color
dev: false
/micromark-extension-gfm-task-list-item@1.0.5:
resolution: {integrity: sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==}
dependencies:
@@ -4708,19 +4536,6 @@ packages:
uvu: 0.5.6
dev: false
/micromark-extension-gfm@0.3.3:
resolution: {integrity: sha512-oVN4zv5/tAIA+l3GbMi7lWeYpJ14oQyJ3uEim20ktYFAcfX1x3LNlFGGlmrZHt7u9YlKExmyJdDGaTt6cMSR/A==}
dependencies:
micromark: 2.11.4
micromark-extension-gfm-autolink-literal: 0.5.7
micromark-extension-gfm-strikethrough: 0.6.5
micromark-extension-gfm-table: 0.4.3
micromark-extension-gfm-tagfilter: 0.3.0
micromark-extension-gfm-task-list-item: 0.3.3
transitivePeerDependencies:
- supports-color
dev: false
/micromark-extension-gfm@2.0.3:
resolution: {integrity: sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==}
dependencies:
@@ -4876,15 +4691,6 @@ packages:
resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==}
dev: false
/micromark@2.11.4:
resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==}
dependencies:
debug: 4.3.4
parse-entities: 2.0.0
transitivePeerDependencies:
- supports-color
dev: false
/micromark@3.2.0:
resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==}
dependencies:
@@ -5366,17 +5172,6 @@ packages:
callsites: 3.1.0
dev: true
/parse-entities@2.0.0:
resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==}
dependencies:
character-entities: 1.2.4
character-entities-legacy: 1.1.4
character-reference-invalid: 1.1.4
is-alphanumerical: 1.0.4
is-decimal: 1.0.4
is-hexadecimal: 1.0.4
dev: false
/parse5@6.0.1:
resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==}
dev: false
@@ -5852,15 +5647,6 @@ packages:
unified: 10.1.2
dev: false
/remark-gfm@1.0.0:
resolution: {integrity: sha512-KfexHJCiqvrdBZVbQ6RopMZGwaXz6wFJEfByIuEwGf0arvITHjiKKZ1dpXujjH9KZdm1//XJQwgfnJ3lmXaDPA==}
dependencies:
mdast-util-gfm: 0.1.2
micromark-extension-gfm: 0.3.3
transitivePeerDependencies:
- supports-color
dev: false
/remark-gfm@3.0.1:
resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==}
dependencies:
@@ -5891,14 +5677,6 @@ packages:
- supports-color
dev: false
/remark-parse@9.0.0:
resolution: {integrity: sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==}
dependencies:
mdast-util-from-markdown: 0.8.5
transitivePeerDependencies:
- supports-color
dev: false
/remark-rehype@10.1.0:
resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==}
dependencies:
@@ -5908,13 +5686,6 @@ packages:
unified: 10.1.2
dev: false
/remark-remove-comments@0.2.0:
resolution: {integrity: sha512-faGaTeqp0bvDgE0uTofa90EBHD4HXeHN+EUaPDR9datgFvaPkYcLxakaJud9LnomFPkOhx0A9NMYFk/lln/etQ==}
dependencies:
html-comment-regex: 1.1.2
unist-util-visit: 2.0.3
dev: false
/remark-stringify@10.0.3:
resolution: {integrity: sha512-koyOzCMYoUHudypbj4XpnAKFbkddRMYZHwghnxd7ue5210WzGw6kOBwauJTRUMq16jsovXx8dYNvSSWP89kZ3A==}
dependencies:
@@ -5923,21 +5694,10 @@ packages:
unified: 10.1.2
dev: false
/remark-stringify@9.0.1:
resolution: {integrity: sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==}
dependencies:
mdast-util-to-markdown: 0.6.5
dev: false
/remove-accents@0.4.2:
resolution: {integrity: sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==}
dev: false
/repeat-string@1.6.1:
resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==}
engines: {node: '>=0.10'}
dev: false
/replicate@0.20.1:
resolution: {integrity: sha512-QVyI1rowGsSfNuDrRmumYPdCHa/fN/RkI3NHpcK0i5hSSiWK69URAyheAC/0MIAiS3oUs4kD56PB9zEI4oHENw==}
engines: {git: '>=2.11.0', node: '>=18.0.0', npm: '>=7.19.0', yarn: '>=1.7.0'}
@@ -6381,22 +6141,6 @@ packages:
engines: {node: '>=6'}
dev: true
/telegramify-markdown@1.1.0:
resolution: {integrity: sha512-GQKKjGAafuqJC+7Gv87gk3qkQv2EeXk+z173FBL7vP5Z9Zai2JEBlo9xOcRacbXV6zHDfHwoI/rP/GkuPulPAw==}
dependencies:
mdast-util-gfm-table: 1.0.7
mdast-util-to-markdown: 0.6.5
remark-gfm: 1.0.0
remark-parse: 9.0.0
remark-remove-comments: 0.2.0
remark-stringify: 9.0.1
unified: 9.2.2
unist-util-remove: 2.1.0
unist-util-visit: 2.0.3
transitivePeerDependencies:
- supports-color
dev: false
/text-table@0.2.0:
resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
dev: true
@@ -6452,10 +6196,6 @@ packages:
resolution: {integrity: sha512-5UR5Biq4VlVOtzqkm2AZlgvSlDJtME46uV0br0gENbwN4l5+mMKT4b9gJKqWtuL2zAIqajGJGuvbCbcAJUZqBg==}
dev: false
/trough@1.0.5:
resolution: {integrity: sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==}
dev: false
/trough@2.1.0:
resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==}
dev: false
@@ -6575,18 +6315,6 @@ packages:
vfile: 5.3.7
dev: false
/unified@9.2.2:
resolution: {integrity: sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==}
dependencies:
'@types/unist': 2.0.8
bail: 1.0.5
extend: 3.0.2
is-buffer: 2.0.5
is-plain-obj: 2.1.0
trough: 1.0.5
vfile: 4.2.1
dev: false
/unist-util-find-after@4.0.1:
resolution: {integrity: sha512-QO/PuPMm2ERxC6vFXEPtmAutOopy5PknD+Oq64gGwxKtk4xwo9Z97t9Av1obPmGU0IyTa6EKYUfTrK2QJS3Ozw==}
dependencies:
@@ -6598,10 +6326,6 @@ packages:
resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==}
dev: false
/unist-util-is@4.1.0:
resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==}
dev: false
/unist-util-is@5.2.1:
resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==}
dependencies:
@@ -6627,12 +6351,6 @@ packages:
unist-util-visit: 4.1.2
dev: false
/unist-util-remove@2.1.0:
resolution: {integrity: sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==}
dependencies:
unist-util-is: 4.1.0
dev: false
/unist-util-remove@4.0.0:
resolution: {integrity: sha512-b4gokeGId57UVRX/eVKej5gXqGlc9+trkORhFJpu9raqZkZhU0zm8Doi05+HaiBsMEIJowL+2WtQ5ItjsngPXg==}
dependencies:
@@ -6641,25 +6359,12 @@ packages:
unist-util-visit-parents: 6.0.1
dev: false
/unist-util-stringify-position@2.0.3:
resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==}
dependencies:
'@types/unist': 2.0.8
dev: false
/unist-util-stringify-position@3.0.3:
resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==}
dependencies:
'@types/unist': 2.0.8
dev: false
/unist-util-visit-parents@3.1.1:
resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==}
dependencies:
'@types/unist': 2.0.8
unist-util-is: 4.1.0
dev: false
/unist-util-visit-parents@5.1.3:
resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==}
dependencies:
@@ -6674,14 +6379,6 @@ packages:
unist-util-is: 6.0.0
dev: false
/unist-util-visit@2.0.3:
resolution: {integrity: sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==}
dependencies:
'@types/unist': 2.0.8
unist-util-is: 4.1.0
unist-util-visit-parents: 3.1.1
dev: false
/unist-util-visit@4.1.2:
resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==}
dependencies:
@@ -6799,13 +6496,6 @@ packages:
vfile: 5.3.7
dev: false
/vfile-message@2.0.4:
resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==}
dependencies:
'@types/unist': 2.0.8
unist-util-stringify-position: 2.0.3
dev: false
/vfile-message@3.1.4:
resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==}
dependencies:
@@ -6813,15 +6503,6 @@ packages:
unist-util-stringify-position: 3.0.3
dev: false
/vfile@4.2.1:
resolution: {integrity: sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==}
dependencies:
'@types/unist': 2.0.8
is-buffer: 2.0.5
unist-util-stringify-position: 2.0.3
vfile-message: 2.0.4
dev: false
/vfile@5.3.7:
resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==}
dependencies:
@@ -7007,10 +6688,6 @@ packages:
use-sync-external-store: 1.2.0(react@18.2.0)
dev: false
/zwitch@1.0.5:
resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==}
dev: false
/zwitch@2.0.4:
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
dev: false
-1
View File
@@ -1 +0,0 @@
declare module "telegramify-markdown";