mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2026-01-10 23:59:45 +08:00
Fix/merge-main (#11262)
* merge branch 'main' * fix: lint error * fix yarn lock * fix: lock * fix: ci * fix: yarn lock
This commit is contained in:
parent
680fcb4b9d
commit
d610943f0f
@ -1,7 +1,7 @@
|
|||||||
// Original path: src/renderer/src/components/EditableNumber/index.tsx
|
// Original path: src/renderer/src/components/EditableNumber/index.tsx
|
||||||
import { InputNumber } from 'antd'
|
import { InputNumber } from 'antd'
|
||||||
import type { FC } from 'react'
|
import type { FC } from 'react'
|
||||||
import { useEffect, useRef, useState } from 'react'
|
import { useEffect, useState } from 'react'
|
||||||
import styled from 'styled-components'
|
import styled from 'styled-components'
|
||||||
|
|
||||||
export interface EditableNumberProps {
|
export interface EditableNumberProps {
|
||||||
@ -41,7 +41,6 @@ const EditableNumber: FC<EditableNumberProps> = ({
|
|||||||
}) => {
|
}) => {
|
||||||
const [isEditing, setIsEditing] = useState(false)
|
const [isEditing, setIsEditing] = useState(false)
|
||||||
const [inputValue, setInputValue] = useState(value)
|
const [inputValue, setInputValue] = useState(value)
|
||||||
const inputRef = useRef<HTMLInputElement>(null)
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setInputValue(value)
|
setInputValue(value)
|
||||||
@ -75,7 +74,6 @@ const EditableNumber: FC<EditableNumberProps> = ({
|
|||||||
<Container>
|
<Container>
|
||||||
<InputNumber
|
<InputNumber
|
||||||
style={{ ...style, opacity: isEditing ? 1 : 0 }}
|
style={{ ...style, opacity: isEditing ? 1 : 0 }}
|
||||||
ref={inputRef}
|
|
||||||
value={inputValue}
|
value={inputValue}
|
||||||
min={min}
|
min={min}
|
||||||
max={max}
|
max={max}
|
||||||
|
|||||||
@ -139,7 +139,7 @@ export default class OpenMineruPreprocessProvider extends BasePreprocessProvider
|
|||||||
...(this.provider.apiKey ? { Authorization: `Bearer ${this.provider.apiKey}` } : {}),
|
...(this.provider.apiKey ? { Authorization: `Bearer ${this.provider.apiKey}` } : {}),
|
||||||
...formData.getHeaders()
|
...formData.getHeaders()
|
||||||
},
|
},
|
||||||
body: formData.getBuffer()
|
body: new Uint8Array(formData.getBuffer())
|
||||||
})
|
})
|
||||||
|
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
|
|||||||
@ -1,10 +1,11 @@
|
|||||||
import { loggerService } from '@logger'
|
import { loggerService } from '@logger'
|
||||||
import type { SlashCommand,
|
import type {
|
||||||
AgentEntity,
|
AgentEntity,
|
||||||
AgentSessionEntity,
|
AgentSessionEntity,
|
||||||
CreateSessionRequest,
|
CreateSessionRequest,
|
||||||
GetAgentSessionResponse,
|
GetAgentSessionResponse,
|
||||||
ListOptions,
|
ListOptions,
|
||||||
|
SlashCommand,
|
||||||
UpdateSessionRequest,
|
UpdateSessionRequest,
|
||||||
UpdateSessionResponse
|
UpdateSessionResponse
|
||||||
} from '@types'
|
} from '@types'
|
||||||
|
|||||||
@ -4,6 +4,7 @@ import React, { memo } from 'react'
|
|||||||
interface ActionIconButtonProps extends Omit<React.ComponentProps<'button'>, 'ref'> {
|
interface ActionIconButtonProps extends Omit<React.ComponentProps<'button'>, 'ref'> {
|
||||||
icon: React.ReactNode
|
icon: React.ReactNode
|
||||||
active?: boolean
|
active?: boolean
|
||||||
|
loading?: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -1,4 +1,5 @@
|
|||||||
import '@renderer/pages/home/Inputbar/tools'
|
import '@renderer/pages/home/Inputbar/tools'
|
||||||
|
|
||||||
import { Tooltip } from '@cherrystudio/ui'
|
import { Tooltip } from '@cherrystudio/ui'
|
||||||
import type { DropResult } from '@hello-pangea/dnd'
|
import type { DropResult } from '@hello-pangea/dnd'
|
||||||
import { DragDropContext, Draggable, Droppable } from '@hello-pangea/dnd'
|
import { DragDropContext, Draggable, Droppable } from '@hello-pangea/dnd'
|
||||||
@ -394,19 +395,19 @@ const InputbarTools = ({ scope, assistantId, session }: InputbarToolsNewProps) =
|
|||||||
</DragDropContext>
|
</DragDropContext>
|
||||||
|
|
||||||
{showCollapseButton && (
|
{showCollapseButton && (
|
||||||
<Tooltip content={isCollapse ? t('chat.input.tools.expand') : t('chat.input.tools.collapse')} showArrow>
|
<Tooltip content={isCollapse ? t('chat.input.tools.expand') : t('chat.input.tools.collapse')} showArrow>
|
||||||
<ActionIconButton
|
<ActionIconButton
|
||||||
onClick={() => dispatch(setIsCollapsed(!isCollapse))}
|
onClick={() => dispatch(setIsCollapsed(!isCollapse))}
|
||||||
icon={
|
icon={
|
||||||
<CircleChevronRight
|
<CircleChevronRight
|
||||||
size={18}
|
size={18}
|
||||||
style={{
|
style={{
|
||||||
transform: isCollapse ? 'scaleX(1)' : 'scaleX(-1)'
|
transform: isCollapse ? 'scaleX(1)' : 'scaleX(-1)'
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
)}
|
)}
|
||||||
</ToolsContainer>
|
</ToolsContainer>
|
||||||
</Dropdown>
|
</Dropdown>
|
||||||
|
|||||||
@ -1,17 +1,15 @@
|
|||||||
import { HolderOutlined } from '@ant-design/icons'
|
import { HolderOutlined } from '@ant-design/icons'
|
||||||
|
import { useCache } from '@data/hooks/useCache'
|
||||||
|
import { usePreference } from '@data/hooks/usePreference'
|
||||||
import { loggerService } from '@logger'
|
import { loggerService } from '@logger'
|
||||||
import { ActionIconButton } from '@renderer/components/Buttons'
|
import { ActionIconButton } from '@renderer/components/Buttons'
|
||||||
import type { QuickPanelTriggerInfo } from '@renderer/components/QuickPanel'
|
import type { QuickPanelTriggerInfo } from '@renderer/components/QuickPanel'
|
||||||
import { QuickPanelReservedSymbol, QuickPanelView, useQuickPanel } from '@renderer/components/QuickPanel'
|
import { QuickPanelReservedSymbol, QuickPanelView, useQuickPanel } from '@renderer/components/QuickPanel'
|
||||||
import TranslateButton from '@renderer/components/TranslateButton'
|
import TranslateButton from '@renderer/components/TranslateButton'
|
||||||
import { useRuntime } from '@renderer/hooks/useRuntime'
|
|
||||||
import { useSettings } from '@renderer/hooks/useSettings'
|
|
||||||
import { useTimer } from '@renderer/hooks/useTimer'
|
import { useTimer } from '@renderer/hooks/useTimer'
|
||||||
import useTranslate from '@renderer/hooks/useTranslate'
|
import useTranslate from '@renderer/hooks/useTranslate'
|
||||||
import PasteService from '@renderer/services/PasteService'
|
import PasteService from '@renderer/services/PasteService'
|
||||||
import { translateText } from '@renderer/services/TranslateService'
|
import { translateText } from '@renderer/services/TranslateService'
|
||||||
import { useAppDispatch } from '@renderer/store'
|
|
||||||
import { setSearching } from '@renderer/store/runtime'
|
|
||||||
import type { FileType } from '@renderer/types'
|
import type { FileType } from '@renderer/types'
|
||||||
import { classNames } from '@renderer/utils'
|
import { classNames } from '@renderer/utils'
|
||||||
import { formatQuotedText } from '@renderer/utils/formats'
|
import { formatQuotedText } from '@renderer/utils/formats'
|
||||||
@ -119,16 +117,15 @@ export const InputbarCore: FC<InputbarCoreProps> = ({
|
|||||||
const { setExtensions } = useInputbarToolsInternalDispatch()
|
const { setExtensions } = useInputbarToolsInternalDispatch()
|
||||||
const isEmpty = text.trim().length === 0
|
const isEmpty = text.trim().length === 0
|
||||||
const [inputFocus, setInputFocus] = useState(false)
|
const [inputFocus, setInputFocus] = useState(false)
|
||||||
const {
|
const [targetLanguage] = usePreference('feature.translate.target_language')
|
||||||
targetLanguage,
|
const [sendMessageShortcut] = usePreference('chat.input.send_message_shortcut')
|
||||||
sendMessageShortcut,
|
const [pasteLongTextAsFile] = usePreference('chat.input.paste_long_text_as_file')
|
||||||
fontSize,
|
const [pasteLongTextThreshold] = usePreference('chat.input.paste_long_text_threshold')
|
||||||
pasteLongTextAsFile,
|
const [autoTranslateWithSpace] = usePreference('chat.input.translate.auto_translate_with_space')
|
||||||
pasteLongTextThreshold,
|
const [enableQuickPanelTriggers] = usePreference('chat.input.quick_panel.triggers_enabled')
|
||||||
autoTranslateWithSpace,
|
const [enableSpellCheck] = usePreference('app.spell_check.enabled')
|
||||||
enableQuickPanelTriggers,
|
const [fontSize] = usePreference('chat.message.font_size')
|
||||||
enableSpellCheck
|
const [searching, setSearching] = useCache('chat.websearch.searching')
|
||||||
} = useSettings()
|
|
||||||
const quickPanelTriggersEnabled = forceEnableQuickPanelTriggers ?? enableQuickPanelTriggers
|
const quickPanelTriggersEnabled = forceEnableQuickPanelTriggers ?? enableQuickPanelTriggers
|
||||||
|
|
||||||
const [textareaHeight, setTextareaHeight] = useState<number>()
|
const [textareaHeight, setTextareaHeight] = useState<number>()
|
||||||
@ -137,10 +134,8 @@ export const InputbarCore: FC<InputbarCoreProps> = ({
|
|||||||
const [isTranslating, setIsTranslating] = useState(false)
|
const [isTranslating, setIsTranslating] = useState(false)
|
||||||
const { getLanguageByLangcode } = useTranslate()
|
const { getLanguageByLangcode } = useTranslate()
|
||||||
|
|
||||||
const dispatch = useAppDispatch()
|
|
||||||
const [spaceClickCount, setSpaceClickCount] = useState(0)
|
const [spaceClickCount, setSpaceClickCount] = useState(0)
|
||||||
const spaceClickTimer = useRef<NodeJS.Timeout | null>(null)
|
const spaceClickTimer = useRef<NodeJS.Timeout | null>(null)
|
||||||
const { searching } = useRuntime()
|
|
||||||
const startDragY = useRef<number>(0)
|
const startDragY = useRef<number>(0)
|
||||||
const startHeight = useRef<number>(0)
|
const startHeight = useRef<number>(0)
|
||||||
const { setTimeoutTimer } = useTimer()
|
const { setTimeoutTimer } = useTimer()
|
||||||
@ -522,12 +517,12 @@ export const InputbarCore: FC<InputbarCoreProps> = ({
|
|||||||
|
|
||||||
const handleFocus = useCallback(() => {
|
const handleFocus = useCallback(() => {
|
||||||
setInputFocus(true)
|
setInputFocus(true)
|
||||||
dispatch(setSearching(false))
|
setSearching(false)
|
||||||
if (quickPanel.isVisible && quickPanel.triggerInfo?.type !== 'input') {
|
if (quickPanel.isVisible && quickPanel.triggerInfo?.type !== 'input') {
|
||||||
quickPanel.close()
|
quickPanel.close()
|
||||||
}
|
}
|
||||||
PasteService.setLastFocusedComponent('inputbar')
|
PasteService.setLastFocusedComponent('inputbar')
|
||||||
}, [dispatch, quickPanel])
|
}, [quickPanel, setSearching])
|
||||||
|
|
||||||
const handleDragStart = useCallback(
|
const handleDragStart = useCallback(
|
||||||
(event: React.MouseEvent) => {
|
(event: React.MouseEvent) => {
|
||||||
@ -624,9 +619,11 @@ export const InputbarCore: FC<InputbarCoreProps> = ({
|
|||||||
if (isLoading) {
|
if (isLoading) {
|
||||||
extras.push(
|
extras.push(
|
||||||
<Tooltip key="pause" placement="top" title={t('chat.input.pause')} mouseLeaveDelay={0} arrow>
|
<Tooltip key="pause" placement="top" title={t('chat.input.pause')} mouseLeaveDelay={0} arrow>
|
||||||
<ActionIconButton onClick={onPause} style={{ marginRight: -2 }}>
|
<ActionIconButton
|
||||||
<CirclePause size={20} color="var(--color-error)" />
|
onClick={onPause}
|
||||||
</ActionIconButton>
|
style={{ marginRight: -2 }}
|
||||||
|
icon={<CirclePause size={20} color="var(--color-error)" />}
|
||||||
|
/>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -678,7 +675,7 @@ export const InputbarCore: FC<InputbarCoreProps> = ({
|
|||||||
}}
|
}}
|
||||||
disabled={isTranslating || searching}
|
disabled={isTranslating || searching}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
searching && dispatch(setSearching(false))
|
searching && setSearching(false)
|
||||||
quickPanel.close()
|
quickPanel.close()
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -21,9 +21,7 @@ const clearTopicTool = defineTool({
|
|||||||
title={t('chat.input.clear.label', { Command: clearTopicShortcut })}
|
title={t('chat.input.clear.label', { Command: clearTopicShortcut })}
|
||||||
mouseLeaveDelay={0}
|
mouseLeaveDelay={0}
|
||||||
arrow>
|
arrow>
|
||||||
<ActionIconButton onClick={actions.clearTopic}>
|
<ActionIconButton onClick={actions.clearTopic} icon={<PaintbrushVertical size={18} />}></ActionIconButton>
|
||||||
<PaintbrushVertical size={18} />
|
|
||||||
</ActionIconButton>
|
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -31,9 +31,7 @@ const ActivityDirectoryButton: FC<Props> = ({ quickPanel, quickPanelController,
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Tooltip placement="top" title={t('chat.input.activity_directory.title')} mouseLeaveDelay={0} arrow>
|
<Tooltip placement="top" title={t('chat.input.activity_directory.title')} mouseLeaveDelay={0} arrow>
|
||||||
<ActionIconButton onClick={handleOpenQuickPanel}>
|
<ActionIconButton onClick={handleOpenQuickPanel} icon={<FolderOpen size={18} />}></ActionIconButton>
|
||||||
<FolderOpen size={18} />
|
|
||||||
</ActionIconButton>
|
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -46,9 +46,10 @@ const MentionModelsButton: FC<Props> = ({
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Tooltip placement="top" title={t('assistants.presets.edit.model.select.title')} mouseLeaveDelay={0} arrow>
|
<Tooltip placement="top" title={t('assistants.presets.edit.model.select.title')} mouseLeaveDelay={0} arrow>
|
||||||
<ActionIconButton onClick={handleOpenQuickPanel} active={mentionedModels.length > 0}>
|
<ActionIconButton
|
||||||
<AtSign size={18} />
|
onClick={handleOpenQuickPanel}
|
||||||
</ActionIconButton>
|
active={mentionedModels.length > 0}
|
||||||
|
icon={<AtSign size={18} />}></ActionIconButton>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -37,9 +37,11 @@ const SlashCommandsButton: FC<Props> = ({ quickPanelController, session, openPan
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Tooltip placement="top" title={t('chat.input.slash_commands.title')} mouseLeaveDelay={0} arrow>
|
<Tooltip placement="top" title={t('chat.input.slash_commands.title')} mouseLeaveDelay={0} arrow>
|
||||||
<ActionIconButton onClick={handleOpenQuickPanel} active={isActive} disabled={!hasCommands}>
|
<ActionIconButton
|
||||||
<Terminal size={18} />
|
onClick={handleOpenQuickPanel}
|
||||||
</ActionIconButton>
|
active={isActive}
|
||||||
|
disabled={!hasCommands}
|
||||||
|
icon={<Terminal size={18} />}></ActionIconButton>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -31,9 +31,10 @@ const WebSearchButton: FC<Props> = ({ quickPanelController, assistantId }) => {
|
|||||||
title={enableWebSearch ? t('common.close') : t('chat.input.web_search.label')}
|
title={enableWebSearch ? t('common.close') : t('chat.input.web_search.label')}
|
||||||
mouseLeaveDelay={0}
|
mouseLeaveDelay={0}
|
||||||
arrow>
|
arrow>
|
||||||
<ActionIconButton onClick={onClick} active={!!enableWebSearch}>
|
<ActionIconButton
|
||||||
<WebSearchProviderIcon pid={selectedProviderId} />
|
onClick={onClick}
|
||||||
</ActionIconButton>
|
active={!!enableWebSearch}
|
||||||
|
icon={<WebSearchProviderIcon pid={selectedProviderId} />}></ActionIconButton>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -43,9 +43,11 @@ const createSessionTool = defineTool({
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Tooltip placement="top" title={t('chat.input.new_topic', { Command: newTopicShortcut })}>
|
<Tooltip placement="top" title={t('chat.input.new_topic', { Command: newTopicShortcut })}>
|
||||||
<ActionIconButton onClick={handleCreateSession} disabled={createSessionDisabled} loading={creatingSession}>
|
<ActionIconButton
|
||||||
<MessageSquareDiff size={19} />
|
onClick={handleCreateSession}
|
||||||
</ActionIconButton>
|
disabled={createSessionDisabled}
|
||||||
|
loading={creatingSession}
|
||||||
|
icon={<MessageSquareDiff size={19} />}></ActionIconButton>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -24,9 +24,7 @@ const newTopicTool = defineTool({
|
|||||||
title={t('chat.input.new_topic', { Command: newTopicShortcut })}
|
title={t('chat.input.new_topic', { Command: newTopicShortcut })}
|
||||||
mouseLeaveDelay={0}
|
mouseLeaveDelay={0}
|
||||||
arrow>
|
arrow>
|
||||||
<ActionIconButton onClick={actions.addNewTopic}>
|
<ActionIconButton onClick={actions.addNewTopic} icon={<MessageSquareDiff size={19} />}></ActionIconButton>
|
||||||
<MessageSquareDiff size={19} />
|
|
||||||
</ActionIconButton>
|
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,9 +21,9 @@ const ToggleExpandTool: React.FC<{ context: ToggleExpandRenderContext }> = ({ co
|
|||||||
title={isExpanded ? t('chat.input.collapse') : t('chat.input.expand')}
|
title={isExpanded ? t('chat.input.collapse') : t('chat.input.expand')}
|
||||||
mouseLeaveDelay={0}
|
mouseLeaveDelay={0}
|
||||||
arrow>
|
arrow>
|
||||||
<ActionIconButton onClick={handleToggle}>
|
<ActionIconButton
|
||||||
{isExpanded ? <Minimize size={18} /> : <Maximize size={18} />}
|
onClick={handleToggle}
|
||||||
</ActionIconButton>
|
icon={isExpanded ? <Minimize size={18} /> : <Maximize size={18} />}></ActionIconButton>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
41
yarn.lock
41
yarn.lock
@ -290,7 +290,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@ai-sdk/provider-utils@npm:3.0.10":
|
"@ai-sdk/provider-utils@npm:3.0.10, @ai-sdk/provider-utils@npm:^3.0.10":
|
||||||
version: 3.0.10
|
version: 3.0.10
|
||||||
resolution: "@ai-sdk/provider-utils@npm:3.0.10"
|
resolution: "@ai-sdk/provider-utils@npm:3.0.10"
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -316,7 +316,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@ai-sdk/provider-utils@npm:3.0.17, @ai-sdk/provider-utils@npm:^3.0.10, @ai-sdk/provider-utils@npm:^3.0.12":
|
"@ai-sdk/provider-utils@npm:3.0.17, @ai-sdk/provider-utils@npm:^3.0.12":
|
||||||
version: 3.0.17
|
version: 3.0.17
|
||||||
resolution: "@ai-sdk/provider-utils@npm:3.0.17"
|
resolution: "@ai-sdk/provider-utils@npm:3.0.17"
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -28546,7 +28546,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"typescript@npm:^5.0.0, typescript@npm:^5.4.3, typescript@npm:^5.6.2":
|
"typescript@npm:^5.0.0, typescript@npm:^5.4.3, typescript@npm:^5.6.2, typescript@npm:^5.8.2":
|
||||||
version: 5.9.3
|
version: 5.9.3
|
||||||
resolution: "typescript@npm:5.9.3"
|
resolution: "typescript@npm:5.9.3"
|
||||||
bin:
|
bin:
|
||||||
@ -28566,19 +28566,9 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"typescript@npm:^5.8.2":
|
"typescript@patch:typescript@npm%3A^5.0.0#optional!builtin<compat/typescript>, typescript@patch:typescript@npm%3A^5.4.3#optional!builtin<compat/typescript>, typescript@patch:typescript@npm%3A^5.6.2#optional!builtin<compat/typescript>, typescript@patch:typescript@npm%3A^5.8.2#optional!builtin<compat/typescript>":
|
||||||
version: 5.9.3
|
version: 5.9.3
|
||||||
resolution: "typescript@npm:5.9.3"
|
resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin<compat/typescript>::version=5.9.3&hash=5786d5"
|
||||||
bin:
|
|
||||||
tsc: bin/tsc
|
|
||||||
tsserver: bin/tsserver
|
|
||||||
checksum: 10c0/6bd7552ce39f97e711db5aa048f6f9995b53f1c52f7d8667c1abdc1700c68a76a308f579cd309ce6b53646deb4e9a1be7c813a93baaf0a28ccd536a30270e1c5
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"typescript@patch:typescript@npm%3A^5.0.0#optional!builtin<compat/typescript>":
|
|
||||||
version: 5.9.2
|
|
||||||
resolution: "typescript@patch:typescript@npm%3A5.9.2#optional!builtin<compat/typescript>::version=5.9.2&hash=5786d5"
|
|
||||||
bin:
|
bin:
|
||||||
tsc: bin/tsc
|
tsc: bin/tsc
|
||||||
tsserver: bin/tsserver
|
tsserver: bin/tsserver
|
||||||
@ -28596,26 +28586,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"typescript@patch:typescript@npm%3A^5.8.2#optional!builtin<compat/typescript>":
|
"ua-parser-js@npm:^1.0.35, ua-parser-js@npm:^1.0.37":
|
||||||
version: 5.9.3
|
|
||||||
resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin<compat/typescript>::version=5.9.3&hash=5786d5"
|
|
||||||
bin:
|
|
||||||
tsc: bin/tsc
|
|
||||||
tsserver: bin/tsserver
|
|
||||||
checksum: 10c0/ad09fdf7a756814dce65bc60c1657b40d44451346858eea230e10f2e95a289d9183b6e32e5c11e95acc0ccc214b4f36289dcad4bf1886b0adb84d711d336a430
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"ua-parser-js@npm:^1.0.35":
|
|
||||||
version: 1.0.40
|
|
||||||
resolution: "ua-parser-js@npm:1.0.40"
|
|
||||||
bin:
|
|
||||||
ua-parser-js: script/cli.js
|
|
||||||
checksum: 10c0/2b6ac642c74323957dae142c31f72287f2420c12dced9603d989b96c132b80232779c429b296d7de4012ef8b64e0d8fadc53c639ef06633ce13d785a78b5be6c
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"ua-parser-js@npm:^1.0.37":
|
|
||||||
version: 1.0.41
|
version: 1.0.41
|
||||||
resolution: "ua-parser-js@npm:1.0.41"
|
resolution: "ua-parser-js@npm:1.0.41"
|
||||||
bin:
|
bin:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user