mirror of
https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web.git
synced 2025-05-23 22:20:23 +09:00
sync upstream code
This commit is contained in:
parent
94a50f92e1
commit
04d3c1f315
49
app/api/tools/ddg/route.ts
Normal file
49
app/api/tools/ddg/route.ts
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
import { prettyObject } from "@/app/utils/format";
|
||||||
|
import { NextRequest, NextResponse } from "next/server";
|
||||||
|
import { auth } from "../../auth";
|
||||||
|
|
||||||
|
import { search, SafeSearchType } from "duck-duck-scrape";
|
||||||
|
|
||||||
|
async function handle(req: NextRequest) {
|
||||||
|
if (req.method === "OPTIONS") {
|
||||||
|
return NextResponse.json({ body: "OK" }, { status: 200 });
|
||||||
|
}
|
||||||
|
|
||||||
|
let query = req.nextUrl.searchParams.get("query") ?? "";
|
||||||
|
let maxResults = req.nextUrl.searchParams.get(
|
||||||
|
"max_results",
|
||||||
|
) as unknown as number;
|
||||||
|
if (!maxResults) maxResults = 3;
|
||||||
|
console.log("[Tools Route] query ", query);
|
||||||
|
|
||||||
|
const authResult = auth(req);
|
||||||
|
if (authResult.error) {
|
||||||
|
return NextResponse.json(authResult, {
|
||||||
|
status: 401,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const searchResults = await search(query, {
|
||||||
|
safeSearch: SafeSearchType.OFF,
|
||||||
|
});
|
||||||
|
const result = searchResults.results
|
||||||
|
.slice(0, maxResults)
|
||||||
|
.map(({ title, description, url }) => ({
|
||||||
|
title,
|
||||||
|
content: description,
|
||||||
|
url,
|
||||||
|
}));
|
||||||
|
const res = new NextResponse(JSON.stringify(result));
|
||||||
|
res.headers.set("Content-Type", "application/json");
|
||||||
|
res.headers.set("Cache-Control", "no-cache");
|
||||||
|
return res;
|
||||||
|
} catch (e) {
|
||||||
|
console.error("[Tools] ", e);
|
||||||
|
return NextResponse.json(prettyObject(e));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const GET = handle;
|
||||||
|
|
||||||
|
export const runtime = "nodejs";
|
@ -2,6 +2,7 @@ import { getClientConfig } from "../config/client";
|
|||||||
import { ACCESS_CODE_PREFIX } from "../constant";
|
import { ACCESS_CODE_PREFIX } from "../constant";
|
||||||
import { ChatMessage, ModelType, useAccessStore } from "../store";
|
import { ChatMessage, ModelType, useAccessStore } from "../store";
|
||||||
import { ChatGPTApi } from "./platforms/openai";
|
import { ChatGPTApi } from "./platforms/openai";
|
||||||
|
import { DuckDuckGoSearch } from "./tools/ddg_search";
|
||||||
|
|
||||||
export const ROLES = ["system", "user", "assistant"] as const;
|
export const ROLES = ["system", "user", "assistant"] as const;
|
||||||
export type MessageRole = (typeof ROLES)[number];
|
export type MessageRole = (typeof ROLES)[number];
|
||||||
@ -12,6 +13,7 @@ export type ChatModel = ModelType;
|
|||||||
export interface RequestMessage {
|
export interface RequestMessage {
|
||||||
role: MessageRole;
|
role: MessageRole;
|
||||||
content: string;
|
content: string;
|
||||||
|
toolPrompt?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface LLMConfig {
|
export interface LLMConfig {
|
||||||
@ -70,11 +72,19 @@ interface ChatProvider {
|
|||||||
usage: () => void;
|
usage: () => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export abstract class ToolApi {
|
||||||
|
abstract call(input: string): Promise<string>;
|
||||||
|
abstract name: string;
|
||||||
|
abstract description: string;
|
||||||
|
}
|
||||||
|
|
||||||
export class ClientApi {
|
export class ClientApi {
|
||||||
public llm: LLMApi;
|
public llm: LLMApi;
|
||||||
|
public searchTool: ToolApi;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
this.llm = new ChatGPTApi();
|
this.llm = new ChatGPTApi();
|
||||||
|
this.searchTool = new DuckDuckGoSearch();
|
||||||
}
|
}
|
||||||
|
|
||||||
config() {}
|
config() {}
|
||||||
|
@ -44,7 +44,7 @@ export class ChatGPTApi implements LLMApi {
|
|||||||
async chat(options: ChatOptions) {
|
async chat(options: ChatOptions) {
|
||||||
const messages = options.messages.map((v) => ({
|
const messages = options.messages.map((v) => ({
|
||||||
role: v.role,
|
role: v.role,
|
||||||
content: v.content,
|
content: v.toolPrompt ?? v.content,
|
||||||
}));
|
}));
|
||||||
|
|
||||||
const modelConfig = {
|
const modelConfig = {
|
||||||
|
15
app/client/tools/ddg_search.ts
Normal file
15
app/client/tools/ddg_search.ts
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
import { ToolApi, getHeaders } from "../api";
|
||||||
|
|
||||||
|
export class DuckDuckGoSearch implements ToolApi {
|
||||||
|
name = "duckduckgo_search";
|
||||||
|
description =
|
||||||
|
"A wrapper around DuckDuckGo Search.Useful for when you need to answer questions about current events.Input should be a search query.";
|
||||||
|
|
||||||
|
async call(input: string): Promise<string> {
|
||||||
|
const res = await fetch(`/api/tools/ddg?query=${input}`, {
|
||||||
|
method: "GET",
|
||||||
|
headers: getHeaders(),
|
||||||
|
});
|
||||||
|
return await res.json();
|
||||||
|
}
|
||||||
|
}
|
@ -31,6 +31,8 @@ import AutoIcon from "../icons/auto.svg";
|
|||||||
import BottomIcon from "../icons/bottom.svg";
|
import BottomIcon from "../icons/bottom.svg";
|
||||||
import StopIcon from "../icons/pause.svg";
|
import StopIcon from "../icons/pause.svg";
|
||||||
import RobotIcon from "../icons/robot.svg";
|
import RobotIcon from "../icons/robot.svg";
|
||||||
|
import SearchCloseIcon from "../icons/search_close.svg";
|
||||||
|
import SearchOpenIcon from "../icons/search_open.svg";
|
||||||
|
|
||||||
import {
|
import {
|
||||||
ChatMessage,
|
ChatMessage,
|
||||||
@ -388,6 +390,14 @@ export function ChatActions(props: {
|
|||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const chatStore = useChatStore();
|
const chatStore = useChatStore();
|
||||||
|
|
||||||
|
// switch web search
|
||||||
|
const webSearch = chatStore.currentSession().webSearch;
|
||||||
|
function switchWebSearch() {
|
||||||
|
chatStore.updateCurrentSession((session) => {
|
||||||
|
session.webSearch = !session.webSearch;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// switch themes
|
// switch themes
|
||||||
const theme = config.theme;
|
const theme = config.theme;
|
||||||
function nextTheme() {
|
function nextTheme() {
|
||||||
@ -489,6 +499,16 @@ export function ChatActions(props: {
|
|||||||
text={currentModel}
|
text={currentModel}
|
||||||
icon={<RobotIcon />}
|
icon={<RobotIcon />}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<ChatAction
|
||||||
|
onClick={switchWebSearch}
|
||||||
|
text={
|
||||||
|
webSearch
|
||||||
|
? Locale.Chat.InputActions.CloseWebSearch
|
||||||
|
: Locale.Chat.InputActions.OpenWebSearch
|
||||||
|
}
|
||||||
|
icon={webSearch ? <SearchOpenIcon /> : <SearchCloseIcon />}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
1
app/icons/search_close.svg
Normal file
1
app/icons/search_close.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1683102619308" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7254" width="16" height="16" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M533.333333 42.666667C262.346667 42.666667 42.666667 262.346667 42.666667 533.333333s219.68 490.666667 490.666666 490.666667 490.666667-219.68 490.666667-490.666667S804.32 42.666667 533.333333 42.666667z m342.086667 760.253333c-29.266667-16-61.566667-29.633333-96.166667-40.853333 18.713333-63.493333 29.413333-134 31.153334-207.4h170.42a445.853333 445.853333 0 0 1-94.413334 254.446666q-5.4-3.113333-10.993333-6.193333z m-695.166667 6.193333A445.853333 445.853333 0 0 1 85.84 554.666667h170.42c1.74 73.373333 12.44 143.906667 31.153333 207.4-34.6 11.22-66.9 24.886667-96.166666 40.853333q-5.593333 3.08-10.993334 6.193333z m10.993334-545.366666c29.266667 15.966667 61.566667 29.633333 96.166666 40.853333-18.713333 63.493333-29.413333 134-31.153333 207.4H85.84a445.866667 445.866667 0 0 1 94.413333-254.446667q5.4 3.113333 10.993334 6.193334zM554.666667 341.073333c64.34-1.526667 126.5-9.94 183.64-24.606666 17.6 59.6 27.706667 126.106667 29.426666 195.533333H554.666667z m0-42.666666V87.226667c52.386667 9.293333 101.793333 52.666667 140.96 124.453333a502.986667 502.986667 0 0 1 29.153333 64.24c-52.853333 13.313333-110.4 21-170.113333 22.48z m-42.666667-211.18V298.4c-59.713333-1.48-117.26-9.166667-170.113333-22.48a502.986667 502.986667 0 0 1 29.153333-64.24C410.206667 139.886667 459.613333 96.52 512 87.226667z m0 253.846666V512H298.933333c1.72-69.426667 11.826667-135.933333 29.426667-195.533333 57.14 14.666667 119.3 23.08 183.64 24.606666zM298.933333 554.666667H512v170.926666c-64.34 1.526667-126.5 9.94-183.64 24.606667-17.6-59.6-27.693333-126.106667-29.426667-195.533333zM512 768.266667v211.173333c-52.386667-9.293333-101.793333-52.666667-140.96-124.453333a502.986667 502.986667 0 0 1-29.153333-64.24c52.853333-13.313333 110.4-21 170.113333-22.48z m42.666667 211.173333V768.266667c59.713333 1.48 117.26 9.166667 170.113333 22.48a502.986667 502.986667 0 0 1-29.153333 64.24c-39.166667 71.793333-88.573333 115.16-140.96 124.453333z m0-253.846667V554.666667h213.066666c-1.72 69.426667-11.826667 135.933333-29.426666 195.533333-57.14-14.666667-119.3-23.08-183.64-24.606667zM810.406667 512c-1.74-73.373333-12.406667-143.906667-31.153334-207.4 34.6-11.22 66.9-24.886667 96.166667-40.853333q5.586667-3.053333 10.993333-6.193334A445.866667 445.866667 0 0 1 980.826667 512zM858 224.626667c-1 0.553333-2 1.113333-3 1.666666-27.053333 14.753333-56.98 27.413333-89.1 37.826667a546.88 546.88 0 0 0-32.806667-72.873333c-18.113333-33.206667-38.526667-61.333333-60.926666-84A448.106667 448.106667 0 0 1 858 224.626667z m-463.473333-117.333334c-22.4 22.666667-42.813333 50.78-60.926667 84a546 546 0 0 0-32.806667 72.873334c-32.126667-10.46-62.06-23.12-89.113333-37.873334-1.013333-0.553333-2-1.113333-3-1.666666a448.106667 448.106667 0 0 1 185.833333-117.366667zM208.666667 842.04c1-0.553333 2-1.113333 3-1.666667 27.053333-14.753333 56.98-27.413333 89.1-37.826666a546 546 0 0 0 32.806666 72.873333c18.113333 33.206667 38.526667 61.333333 60.926667 84A448.106667 448.106667 0 0 1 208.666667 842.04z m463.473333 117.333333c22.4-22.666667 42.813333-50.78 60.926667-84a546.88 546.88 0 0 0 32.806666-72.873333c32.12 10.413333 62.046667 23.073333 89.1 37.826667 1.013333 0.553333 2 1.113333 3 1.666666a448.106667 448.106667 0 0 1-185.82 117.413334z" fill="#353436" p-id="7255"></path></svg>
|
After Width: | Height: | Size: 3.5 KiB |
1
app/icons/search_open.svg
Normal file
1
app/icons/search_open.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1683102597441" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7012" width="16" height="16" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M191.246667 263.746667c28.546667 15.573333 60 28.96 93.606666 40-17.2 64.12-27.02 134.82-28.62 208.226666H43.133333a488.26 488.26 0 0 1 101.233334-277.766666 422.393333 422.393333 0 0 0 46.88 29.54zM512 554.666667H298.913333c1.566667 69.333333 10.78 136 26.853334 196.206666 57.846667-15.08 120.92-23.733333 186.233333-25.28z m-320.753333 248.253333c28.546667-15.573333 60-28.96 93.606666-40-17.2-64.12-27.02-134.82-28.62-208.226667H43.133333a488.26 488.26 0 0 0 101.233334 277.793334 422.393333 422.393333 0 0 1 46.88-29.566667zM554.666667 66v232.4c61.16-1.513333 120.053333-9.54 173.953333-23.453333a549.766667 549.766667 0 0 0-33.18-78.666667C656.246667 121.126667 606.906667 75.74 554.666667 66z m-42.666667 446V341.073333c-65.333333-1.546667-128.386667-10.2-186.233333-25.28C309.693333 376 300.48 442.666667 298.913333 512z m228.9-196.206667C683.053333 330.873333 620 339.526667 554.666667 341.073333V512h213.086666c-1.566667-69.333333-10.78-136-26.853333-196.206667zM512 1000.666667v-232.4c-61.16 1.513333-120.053333 9.54-173.953333 23.453333a549.766667 549.766667 0 0 0 33.18 78.7C410.42 945.54 459.76 990.926667 512 1000.666667zM371.226667 196.246667a549.766667 549.766667 0 0 0-33.18 78.7c53.9 13.913333 112.793333 21.94 173.953333 23.453333V66c-52.24 9.74-101.58 55.126667-140.773333 130.246667z m504.193333 67.5c-28.546667 15.573333-60 28.96-93.606667 40 17.2 64.12 27.02 134.82 28.62 208.226666h213.1a488.26 488.26 0 0 0-101.233333-277.793333 422.393333 422.393333 0 0 1-46.88 29.566667z m-663.74-37.453334c26 14.193333 54.7 26.44 85.433333 36.626667 10.293333-30.866667 22.426667-59.833333 36.286667-86.406667 24.866667-47.666667 54.086667-85.3 86.853333-111.846666Q428.666667 57.833333 437.28 52.073333c-104.086667 20.666667-196.313333 74.233333-265.38 149.426667a387.226667 387.226667 0 0 0 39.78 24.793333zM420.253333 1002c-32.766667-26.56-62-64.193333-86.853333-111.86-13.86-26.566667-26-55.54-36.286667-86.406667-30.733333 10.186667-59.413333 22.433333-85.433333 36.626667a387.226667 387.226667 0 0 0-39.78 24.793333c69.066667 75.193333 161.293333 128.766667 265.38 149.426667q-8.613333-5.746667-17.026667-12.58z m434.733334-161.64c-26-14.193333-54.666667-26.44-85.433334-36.626667-10.293333 30.866667-22.426667 59.84-36.286666 86.406667-24.866667 47.666667-54.086667 85.333333-86.853334 111.86q-8.42 6.82-17.026666 12.58c104.086667-20.666667 196.313333-74.233333 265.38-149.426667a387.226667 387.226667 0 0 0-39.78-24.78z m-159.546667 30.046667a549.766667 549.766667 0 0 0 33.18-78.7c-53.9-13.913333-112.793333-21.94-173.953333-23.453334V1000.666667c52.24-9.74 101.58-55.126667 140.773333-130.246667zM554.666667 554.666667v170.926666c65.333333 1.546667 128.386667 10.2 186.233333 25.28 16.073333-60.233333 25.286667-126.84 26.853333-196.206666zM646.413333 64.666667c32.766667 26.56 62 64.193333 86.853334 111.86 13.86 26.573333 26 55.54 36.286666 86.406666 30.733333-10.186667 59.413333-22.433333 85.433334-36.626666a387.226667 387.226667 0 0 0 39.78-24.793334c-69.066667-75.206667-161.293333-128.78-265.38-149.44Q638 57.833333 646.413333 64.666667z m275.886667 767.806666A488.26 488.26 0 0 0 1023.533333 554.666667h-213.1c-1.6 73.406667-11.42 144.106667-28.62 208.226666 33.633333 11.066667 65.06 24.453333 93.606667 40a422.393333 422.393333 0 0 1 46.88 29.566667z" fill="#353436" p-id="7013"></path></svg>
|
After Width: | Height: | Size: 3.6 KiB |
@ -51,6 +51,8 @@ const cn = {
|
|||||||
Masks: "所有面具",
|
Masks: "所有面具",
|
||||||
Clear: "清除聊天",
|
Clear: "清除聊天",
|
||||||
Settings: "对话设置",
|
Settings: "对话设置",
|
||||||
|
OpenWebSearch: "开启联网",
|
||||||
|
CloseWebSearch: "关闭联网",
|
||||||
},
|
},
|
||||||
Rename: "重命名对话",
|
Rename: "重命名对话",
|
||||||
Typing: "正在输入…",
|
Typing: "正在输入…",
|
||||||
|
@ -52,6 +52,8 @@ const en: LocaleType = {
|
|||||||
Masks: "Masks",
|
Masks: "Masks",
|
||||||
Clear: "Clear Context",
|
Clear: "Clear Context",
|
||||||
Settings: "Settings",
|
Settings: "Settings",
|
||||||
|
OpenWebSearch: "Enable Web Search",
|
||||||
|
CloseWebSearch: "Disable Web Search",
|
||||||
},
|
},
|
||||||
Rename: "Rename Chat",
|
Rename: "Rename Chat",
|
||||||
Typing: "Typing…",
|
Typing: "Typing…",
|
||||||
|
@ -23,6 +23,7 @@ export type ChatMessage = RequestMessage & {
|
|||||||
isError?: boolean;
|
isError?: boolean;
|
||||||
id?: number;
|
id?: number;
|
||||||
model?: ModelType;
|
model?: ModelType;
|
||||||
|
toolPrompt?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
export function createMessage(override: Partial<ChatMessage>): ChatMessage {
|
export function createMessage(override: Partial<ChatMessage>): ChatMessage {
|
||||||
@ -31,6 +32,7 @@ export function createMessage(override: Partial<ChatMessage>): ChatMessage {
|
|||||||
date: new Date().toLocaleString(),
|
date: new Date().toLocaleString(),
|
||||||
role: "user",
|
role: "user",
|
||||||
content: "",
|
content: "",
|
||||||
|
toolPrompt: undefined,
|
||||||
...override,
|
...override,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -53,6 +55,7 @@ export interface ChatSession {
|
|||||||
clearContextIndex?: number;
|
clearContextIndex?: number;
|
||||||
|
|
||||||
mask: Mask;
|
mask: Mask;
|
||||||
|
webSearch: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const DEFAULT_TOPIC = Locale.Store.DefaultTopic;
|
export const DEFAULT_TOPIC = Locale.Store.DefaultTopic;
|
||||||
@ -76,6 +79,7 @@ function createEmptySession(): ChatSession {
|
|||||||
lastSummarizeIndex: 0,
|
lastSummarizeIndex: 0,
|
||||||
|
|
||||||
mask: createEmptyMask(),
|
mask: createEmptyMask(),
|
||||||
|
webSearch: false,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -309,10 +313,39 @@ export const useChatStore = create<ChatStore>()(
|
|||||||
...userMessage,
|
...userMessage,
|
||||||
content,
|
content,
|
||||||
};
|
};
|
||||||
session.messages = session.messages.concat([
|
session.messages.push(savedUserMessage);
|
||||||
savedUserMessage,
|
});
|
||||||
botMessage,
|
|
||||||
]);
|
if (session.webSearch) {
|
||||||
|
const query = encodeURIComponent(content);
|
||||||
|
let searchResult = await api.searchTool.call(query);
|
||||||
|
console.log("[Tools] ", searchResult);
|
||||||
|
const webSearchPrompt = `
|
||||||
|
Using the provided web search results, write a comprehensive reply to the given query.
|
||||||
|
If the provided search results refer to multiple subjects with the same name, write separate answers for each subject.
|
||||||
|
Make sure to cite results using \`[[number](URL)]\` notation after the reference.
|
||||||
|
|
||||||
|
Web search json results:
|
||||||
|
"""
|
||||||
|
${JSON.stringify(searchResult)}
|
||||||
|
"""
|
||||||
|
|
||||||
|
Current date:
|
||||||
|
"""
|
||||||
|
${new Date().toISOString()}
|
||||||
|
"""
|
||||||
|
|
||||||
|
Query:
|
||||||
|
"""
|
||||||
|
${content}
|
||||||
|
"""
|
||||||
|
|
||||||
|
Reply in ${getLang()} and markdown.`;
|
||||||
|
userMessage.toolPrompt = webSearchPrompt;
|
||||||
|
}
|
||||||
|
// save user's and bot's message
|
||||||
|
get().updateCurrentSession((session) => {
|
||||||
|
session.messages.push(botMessage);
|
||||||
});
|
});
|
||||||
|
|
||||||
// make request
|
// make request
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
"@hello-pangea/dnd": "^16.3.0",
|
"@hello-pangea/dnd": "^16.3.0",
|
||||||
"@svgr/webpack": "^6.5.1",
|
"@svgr/webpack": "^6.5.1",
|
||||||
"@vercel/analytics": "^0.1.11",
|
"@vercel/analytics": "^0.1.11",
|
||||||
|
"duck-duck-scrape": "^2.2.4",
|
||||||
"emoji-picker-react": "^4.4.7",
|
"emoji-picker-react": "^4.4.7",
|
||||||
"fuse.js": "^6.6.2",
|
"fuse.js": "^6.6.2",
|
||||||
"html-to-image": "^1.11.11",
|
"html-to-image": "^1.11.11",
|
||||||
|
33
yarn.lock
33
yarn.lock
@ -2551,7 +2551,7 @@ dayjs@^1.11.7:
|
|||||||
resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.7.tgz#4b296922642f70999544d1144a2c25730fce63e2"
|
resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.7.tgz#4b296922642f70999544d1144a2c25730fce63e2"
|
||||||
integrity sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==
|
integrity sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==
|
||||||
|
|
||||||
debug@^3.2.7:
|
debug@^3.2.6, debug@^3.2.7:
|
||||||
version "3.2.7"
|
version "3.2.7"
|
||||||
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
|
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
|
||||||
integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
|
integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
|
||||||
@ -2691,6 +2691,14 @@ domutils@^2.8.0:
|
|||||||
domelementtype "^2.2.0"
|
domelementtype "^2.2.0"
|
||||||
domhandler "^4.2.0"
|
domhandler "^4.2.0"
|
||||||
|
|
||||||
|
duck-duck-scrape@^2.2.4:
|
||||||
|
version "2.2.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/duck-duck-scrape/-/duck-duck-scrape-2.2.4.tgz#4281311ddd51997af6dab6a7f0e7b953a34c78c0"
|
||||||
|
integrity sha512-5hbMNxKYFQZrykT2heDuLW4smBWDp1jHrTz2ZqaLQMAz/6fgdolgSWpDKWZCd7ZcYHgfvQrmc/cnU7ICuEqQ9Q==
|
||||||
|
dependencies:
|
||||||
|
html-entities "^2.3.3"
|
||||||
|
needle "^3.2.0"
|
||||||
|
|
||||||
eastasianwidth@^0.2.0:
|
eastasianwidth@^0.2.0:
|
||||||
version "0.2.0"
|
version "0.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
|
resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
|
||||||
@ -3553,6 +3561,11 @@ hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2:
|
|||||||
dependencies:
|
dependencies:
|
||||||
react-is "^16.7.0"
|
react-is "^16.7.0"
|
||||||
|
|
||||||
|
html-entities@^2.3.3:
|
||||||
|
version "2.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.4.0.tgz#edd0cee70402584c8c76cc2c0556db09d1f45061"
|
||||||
|
integrity sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==
|
||||||
|
|
||||||
html-to-image@^1.11.11:
|
html-to-image@^1.11.11:
|
||||||
version "1.11.11"
|
version "1.11.11"
|
||||||
resolved "https://registry.npmmirror.com/html-to-image/-/html-to-image-1.11.11.tgz#c0f8a34dc9e4b97b93ff7ea286eb8562642ebbea"
|
resolved "https://registry.npmmirror.com/html-to-image/-/html-to-image-1.11.11.tgz#c0f8a34dc9e4b97b93ff7ea286eb8562642ebbea"
|
||||||
@ -3568,9 +3581,9 @@ husky@^8.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184"
|
resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184"
|
||||||
integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==
|
integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==
|
||||||
|
|
||||||
iconv-lite@0.6:
|
iconv-lite@0.6, iconv-lite@^0.6.3:
|
||||||
version "0.6.3"
|
version "0.6.3"
|
||||||
resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
|
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
|
||||||
integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
|
integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
|
||||||
dependencies:
|
dependencies:
|
||||||
safer-buffer ">= 2.1.2 < 3.0.0"
|
safer-buffer ">= 2.1.2 < 3.0.0"
|
||||||
@ -4644,6 +4657,15 @@ natural-compare@^1.4.0:
|
|||||||
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
|
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
|
||||||
integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
|
integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
|
||||||
|
|
||||||
|
needle@^3.2.0:
|
||||||
|
version "3.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/needle/-/needle-3.2.0.tgz#07d240ebcabfd65c76c03afae7f6defe6469df44"
|
||||||
|
integrity sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==
|
||||||
|
dependencies:
|
||||||
|
debug "^3.2.6"
|
||||||
|
iconv-lite "^0.6.3"
|
||||||
|
sax "^1.2.4"
|
||||||
|
|
||||||
neo-async@^2.6.2:
|
neo-async@^2.6.2:
|
||||||
version "2.6.2"
|
version "2.6.2"
|
||||||
resolved "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
|
resolved "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
|
||||||
@ -5300,6 +5322,11 @@ sass@^1.59.2:
|
|||||||
immutable "^4.0.0"
|
immutable "^4.0.0"
|
||||||
source-map-js ">=0.6.2 <2.0.0"
|
source-map-js ">=0.6.2 <2.0.0"
|
||||||
|
|
||||||
|
sax@^1.2.4:
|
||||||
|
version "1.2.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
|
||||||
|
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
|
||||||
|
|
||||||
scheduler@^0.23.0:
|
scheduler@^0.23.0:
|
||||||
version "0.23.0"
|
version "0.23.0"
|
||||||
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe"
|
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe"
|
||||||
|
Loading…
Reference in New Issue
Block a user