zcw-shared 2.11.0 → 2.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/constants/apiErrorCodes.d.ts +2 -2
- package/dist/constants/apiErrorCodes.js +11 -12
- package/dist/constants/apiErrorCodes.js.map +1 -1
- package/dist/functions/chat/chatShellTabConfig.d.ts +6 -2
- package/dist/functions/chat/chatShellTabConfig.js +25 -27
- package/dist/functions/chat/chatShellTabConfig.js.map +1 -1
- package/dist/functions/chat/chatShellTabEditor.js +1 -1
- package/dist/functions/chat/chatShellTabEditor.js.map +1 -1
- package/dist/functions/dom/copyHtmlAndPlainToClipboard.d.ts +1 -0
- package/dist/functions/dom/copyHtmlAndPlainToClipboard.js +68 -0
- package/dist/functions/dom/copyHtmlAndPlainToClipboard.js.map +1 -0
- package/dist/functions/im/forwardBundlePayload.d.ts +23 -0
- package/dist/functions/im/forwardBundlePayload.js +59 -0
- package/dist/functions/im/forwardBundlePayload.js.map +1 -0
- package/dist/functions/im/getActiveMentionQuery.d.ts +4 -0
- package/dist/functions/im/getActiveMentionQuery.js +23 -0
- package/dist/functions/im/getActiveMentionQuery.js.map +1 -0
- package/dist/functions/im/imInlineContentTokens.d.ts +49 -0
- package/dist/functions/im/imInlineContentTokens.js +185 -0
- package/dist/functions/im/imInlineContentTokens.js.map +1 -0
- package/dist/functions/im/imRichClipboardPlain.d.ts +8 -0
- package/dist/functions/im/imRichClipboardPlain.js +162 -0
- package/dist/functions/im/imRichClipboardPlain.js.map +1 -0
- package/dist/functions/im/imRichContentHtml.d.ts +53 -0
- package/dist/functions/im/imRichContentHtml.js +476 -0
- package/dist/functions/im/imRichContentHtml.js.map +1 -0
- package/dist/functions/im/index.d.ts +4 -0
- package/dist/functions/im/index.js +5 -0
- package/dist/functions/im/index.js.map +1 -0
- package/dist/functions/im/parseImMentionSegments.d.ts +8 -4
- package/dist/functions/im/parseImMentionSegments.js +32 -2
- package/dist/functions/im/parseImMentionSegments.js.map +1 -1
- package/dist/functions/tencent-cloud/deploy.tcb.d.ts +0 -1
- package/dist/functions/tencent-cloud/deploy.tcb.js +0 -1
- package/dist/functions/tencent-cloud/deploy.tcb.js.map +1 -1
- package/dist/schemas/video.schema.d.ts +6 -6
- package/package.json +22 -15
- package/types/chat-shell-tab-config.d.ts +3 -7
- package/types/im-api.d.ts +12 -1
- package/types/im-chat.d.ts +52 -4
- package/types/im-forward.d.ts +37 -0
- package/types/im-reply.d.ts +6 -0
- package/types/sticker-pack.d.ts +38 -0
|
@@ -13,5 +13,5 @@ export declare const API_HTTP_STATUS: {
|
|
|
13
13
|
readonly INTERNAL_SERVER_ERROR: 500;
|
|
14
14
|
readonly SERVICE_UNAVAILABLE: 503;
|
|
15
15
|
};
|
|
16
|
-
export declare const
|
|
17
|
-
export declare function getApiErrorMessage(
|
|
16
|
+
export declare const HTTP_ERROR_PAGE_DEFAULT_MESSAGES: Partial<Record<(typeof API_HTTP_STATUS)[keyof typeof API_HTTP_STATUS], string>>;
|
|
17
|
+
export declare function getApiErrorMessage(_statusCode: number, body?: ApiErrorResponse | null): string;
|
|
@@ -7,20 +7,19 @@ export const API_HTTP_STATUS = {
|
|
|
7
7
|
INTERNAL_SERVER_ERROR: 500,
|
|
8
8
|
SERVICE_UNAVAILABLE: 503,
|
|
9
9
|
};
|
|
10
|
-
export const
|
|
11
|
-
[API_HTTP_STATUS.BAD_REQUEST]: '请求参数错误',
|
|
12
|
-
[API_HTTP_STATUS.UNAUTHORIZED]: '未授权,请重新登录',
|
|
10
|
+
export const HTTP_ERROR_PAGE_DEFAULT_MESSAGES = {
|
|
13
11
|
[API_HTTP_STATUS.FORBIDDEN]: '没有权限访问此资源',
|
|
14
|
-
[API_HTTP_STATUS.NOT_FOUND]: '请求的资源不存在',
|
|
15
|
-
[API_HTTP_STATUS.INTERNAL_SERVER_ERROR]: '服务器错误,请稍后重试',
|
|
16
|
-
[API_HTTP_STATUS.SERVICE_UNAVAILABLE]: '服务暂不可用,请稍后重试',
|
|
17
12
|
};
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
13
|
+
export function getApiErrorMessage(_statusCode, body) {
|
|
14
|
+
if (body?.message == null)
|
|
15
|
+
return '';
|
|
16
|
+
const msg = body.message;
|
|
17
|
+
if (Array.isArray(msg)) {
|
|
18
|
+
return msg
|
|
19
|
+
.map((s) => String(s).trim())
|
|
20
|
+
.filter(Boolean)
|
|
21
|
+
.join(';');
|
|
23
22
|
}
|
|
24
|
-
return
|
|
23
|
+
return String(msg).trim();
|
|
25
24
|
}
|
|
26
25
|
//# sourceMappingURL=apiErrorCodes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiErrorCodes.js","sourceRoot":"","sources":["../../src/constants/apiErrorCodes.ts"],"names":[],"mappings":"AAcA,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,UAAU,EAAE,GAAG;IACf,WAAW,EAAE,GAAG;IAChB,YAAY,EAAE,GAAG;IACjB,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,GAAG;IACd,qBAAqB,EAAE,GAAG;IAC1B,mBAAmB,EAAE,GAAG;CAChB,CAAA;
|
|
1
|
+
{"version":3,"file":"apiErrorCodes.js","sourceRoot":"","sources":["../../src/constants/apiErrorCodes.ts"],"names":[],"mappings":"AAcA,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,UAAU,EAAE,GAAG;IACf,WAAW,EAAE,GAAG;IAChB,YAAY,EAAE,GAAG;IACjB,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,GAAG;IACd,qBAAqB,EAAE,GAAG;IAC1B,mBAAmB,EAAE,GAAG;CAChB,CAAA;AAMV,MAAM,CAAC,MAAM,gCAAgC,GAEzC;IACF,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,WAAW;CACzC,CAAA;AAKD,MAAM,UAAU,kBAAkB,CAChC,WAAmB,EACnB,IAA8B;IAE9B,IAAI,IAAI,EAAE,OAAO,IAAI,IAAI;QAAE,OAAO,EAAE,CAAA;IACpC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAA;IACxB,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG;aACP,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aAC5B,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,GAAG,CAAC,CAAA;IACd,CAAC;IACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;AAC3B,CAAC"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
import type { ChatShellTabConfig, ChatShellTabbarItem } from '../../../types/chat-shell-tab-config';
|
|
1
|
+
import type { ChatShellDisplaysConfig, ChatShellTabConfig, ChatShellTabbarItem } from '../../../types/chat-shell-tab-config';
|
|
2
|
+
export type { ChatShellDisplaysConfig, ChatShellTabConfig, ChatShellTabbarItem };
|
|
2
3
|
export declare const DEFAULT_CHAT_SHELL_TABS: ChatShellTabConfig[];
|
|
3
|
-
export declare
|
|
4
|
+
export declare class ChatShellTabsConfigError extends Error {
|
|
5
|
+
constructor(message: string);
|
|
6
|
+
}
|
|
7
|
+
export declare function isChatShellTabHideTabbar(tabs: ChatShellTabConfig[], activeKey: string): boolean;
|
|
4
8
|
export declare function parseChatShellTabsFromDisplays(displays: unknown): ChatShellTabConfig[];
|
|
5
9
|
export declare function filterChatShellTabsForRuntime(tabs: ChatShellTabConfig[], opts: {
|
|
6
10
|
isElectron: boolean;
|
|
@@ -13,12 +13,11 @@ export const DEFAULT_CHAT_SHELL_TABS = [
|
|
|
13
13
|
key: 'ai',
|
|
14
14
|
label: 'AI',
|
|
15
15
|
icon: 'cebian_liaotiancebianlan',
|
|
16
|
-
iconActive: '
|
|
16
|
+
iconActive: 'ai',
|
|
17
17
|
route: '/ai',
|
|
18
18
|
routeName: 'chat-ai',
|
|
19
19
|
desktopNav: true,
|
|
20
20
|
mobile: true,
|
|
21
|
-
shellDark: true,
|
|
22
21
|
},
|
|
23
22
|
{
|
|
24
23
|
key: 'contacts',
|
|
@@ -81,6 +80,12 @@ export const DEFAULT_CHAT_SHELL_TABS = [
|
|
|
81
80
|
mobile: true,
|
|
82
81
|
},
|
|
83
82
|
];
|
|
83
|
+
export class ChatShellTabsConfigError extends Error {
|
|
84
|
+
constructor(message) {
|
|
85
|
+
super(message);
|
|
86
|
+
this.name = 'ChatShellTabsConfigError';
|
|
87
|
+
}
|
|
88
|
+
}
|
|
84
89
|
function normalizeTab(raw) {
|
|
85
90
|
if (raw == null || typeof raw !== 'object' || Array.isArray(raw))
|
|
86
91
|
return null;
|
|
@@ -111,38 +116,31 @@ function normalizeTab(raw) {
|
|
|
111
116
|
desktopFooter: o.desktopFooter === true,
|
|
112
117
|
mobile: o.mobile !== false,
|
|
113
118
|
useMineAvatar: o.useMineAvatar === true,
|
|
114
|
-
|
|
119
|
+
hideTabbar: o.hideTabbar === true ? true : undefined,
|
|
115
120
|
};
|
|
116
121
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
122
|
+
function findChatShellTabByKey(tabs, activeKey) {
|
|
123
|
+
return tabs.find((t) => t.key === activeKey);
|
|
124
|
+
}
|
|
125
|
+
export function isChatShellTabHideTabbar(tabs, activeKey) {
|
|
126
|
+
return findChatShellTabByKey(tabs, activeKey)?.hideTabbar === true;
|
|
120
127
|
}
|
|
121
128
|
export function parseChatShellTabsFromDisplays(displays) {
|
|
122
|
-
|
|
123
|
-
|
|
129
|
+
if (displays == null || typeof displays !== 'object' || Array.isArray(displays)) {
|
|
130
|
+
throw new ChatShellTabsConfigError('page-config displays 缺失,无法解析 chatShell.tabs');
|
|
131
|
+
}
|
|
132
|
+
const shell = displays.chatShell;
|
|
124
133
|
const fromShell = shell?.tabs;
|
|
125
|
-
if (Array.isArray(fromShell)
|
|
126
|
-
|
|
127
|
-
.map((t) => normalizeTab(t))
|
|
128
|
-
.filter((t) => t != null);
|
|
129
|
-
if (parsed.length > 0)
|
|
130
|
-
return parsed;
|
|
134
|
+
if (!Array.isArray(fromShell) || fromShell.length === 0) {
|
|
135
|
+
throw new ChatShellTabsConfigError('displays.chatShell.tabs 未配置或为空');
|
|
131
136
|
}
|
|
132
|
-
const
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
const out = [];
|
|
138
|
-
for (const key of order) {
|
|
139
|
-
const tab = byKey.get(key);
|
|
140
|
-
if (tab)
|
|
141
|
-
out.push(tab);
|
|
142
|
-
}
|
|
143
|
-
return out.length > 0 ? out : [...DEFAULT_CHAT_SHELL_TABS];
|
|
137
|
+
const parsed = fromShell
|
|
138
|
+
.map((t) => normalizeTab(t))
|
|
139
|
+
.filter((t) => t != null);
|
|
140
|
+
if (parsed.length === 0) {
|
|
141
|
+
throw new ChatShellTabsConfigError('displays.chatShell.tabs 无有效 Tab 项');
|
|
144
142
|
}
|
|
145
|
-
return
|
|
143
|
+
return parsed;
|
|
146
144
|
}
|
|
147
145
|
export function filterChatShellTabsForRuntime(tabs, opts) {
|
|
148
146
|
return tabs.filter((t) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatShellTabConfig.js","sourceRoot":"","sources":["../../../src/functions/chat/chatShellTabConfig.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chatShellTabConfig.js","sourceRoot":"","sources":["../../../src/functions/chat/chatShellTabConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,7 +34,7 @@ export function stripEditableChatShellTabs(tabs) {
|
|
|
34
34
|
useMineAvatar: rest.useMineAvatar === true ? true : undefined,
|
|
35
35
|
hideLabel: rest.hideLabel === true ? true : undefined,
|
|
36
36
|
desktopHideLabel: rest.desktopHideLabel === false ? false : undefined,
|
|
37
|
-
|
|
37
|
+
hideTabbar: rest.hideTabbar === true ? true : undefined,
|
|
38
38
|
};
|
|
39
39
|
return tab;
|
|
40
40
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatShellTabEditor.js","sourceRoot":"","sources":["../../../src/functions/chat/chatShellTabEditor.ts"],"names":[],"mappings":"AAKA,IAAI,UAAU,GAAG,CAAC,CAAA;AAClB,SAAS,WAAW;IAClB,UAAU,IAAI,CAAC,CAAA;IACf,OAAO,OAAO,UAAU,EAAE,CAAA;AAC5B,CAAC;AAED,MAAM,UAAU,+BAA+B;IAC7C,UAAU,GAAG,CAAC,CAAA;AAChB,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,IAA0B;IAE1B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACtB,GAAG,CAAC;QACJ,QAAQ,EAAE,WAAW,EAAE;QACvB,UAAU,EAAE,CAAC,CAAC,UAAU,KAAK,KAAK;QAClC,MAAM,EAAE,CAAC,CAAC,MAAM,KAAK,KAAK;KAC3B,CAAC,CAAC,CAAA;AACL,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,IAA4B;IAE5B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE;QAC3C,MAAM,GAAG,GAAuB;YAC9B,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;YACpB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;YACxB,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,SAAS;YACpC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,SAAS;YAChD,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,SAAS;YACtC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,SAAS;YAC9C,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,EAAE,IAAI,SAAS;YAC1D,iBAAiB,EACf,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC;gBACzD,CAAC,CAAC,IAAI,CAAC,iBAAiB;gBACxB,CAAC,CAAC,SAAS;YACf,YAAY,EAAE,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YAC3D,UAAU,EAAE,IAAI,CAAC,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YACzD,aAAa,EAAE,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YAC7D,MAAM,EAAE,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YACjD,aAAa,EAAE,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YAC7D,SAAS,EAAE,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YACrD,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YACrE,
|
|
1
|
+
{"version":3,"file":"chatShellTabEditor.js","sourceRoot":"","sources":["../../../src/functions/chat/chatShellTabEditor.ts"],"names":[],"mappings":"AAKA,IAAI,UAAU,GAAG,CAAC,CAAA;AAClB,SAAS,WAAW;IAClB,UAAU,IAAI,CAAC,CAAA;IACf,OAAO,OAAO,UAAU,EAAE,CAAA;AAC5B,CAAC;AAED,MAAM,UAAU,+BAA+B;IAC7C,UAAU,GAAG,CAAC,CAAA;AAChB,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,IAA0B;IAE1B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACtB,GAAG,CAAC;QACJ,QAAQ,EAAE,WAAW,EAAE;QACvB,UAAU,EAAE,CAAC,CAAC,UAAU,KAAK,KAAK;QAClC,MAAM,EAAE,CAAC,CAAC,MAAM,KAAK,KAAK;KAC3B,CAAC,CAAC,CAAA;AACL,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,IAA4B;IAE5B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE;QAC3C,MAAM,GAAG,GAAuB;YAC9B,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;YACpB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;YACxB,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,SAAS;YACpC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,SAAS;YAChD,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,SAAS;YACtC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,SAAS;YAC9C,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,EAAE,IAAI,SAAS;YAC1D,iBAAiB,EACf,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC;gBACzD,CAAC,CAAC,IAAI,CAAC,iBAAiB;gBACxB,CAAC,CAAC,SAAS;YACf,YAAY,EAAE,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YAC3D,UAAU,EAAE,IAAI,CAAC,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YACzD,aAAa,EAAE,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YAC7D,MAAM,EAAE,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YACjD,aAAa,EAAE,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YAC7D,SAAS,EAAE,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YACrD,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YACrE,UAAU,EAAE,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;SACxD,CAAA;QACD,OAAO,GAAG,CAAA;IACZ,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function copyHtmlAndPlainToClipboard(html: string, plain: string): Promise<boolean>;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { copyTextToClipboard } from './copyTextToClipboard';
|
|
2
|
+
export async function copyHtmlAndPlainToClipboard(html, plain) {
|
|
3
|
+
const wireHtml = html.trim();
|
|
4
|
+
const restorablePlain = plain.trim();
|
|
5
|
+
if (!wireHtml && !restorablePlain)
|
|
6
|
+
return false;
|
|
7
|
+
const w = globalThis;
|
|
8
|
+
const nav = w.navigator;
|
|
9
|
+
const doc = w.document;
|
|
10
|
+
const clipboard = nav?.clipboard;
|
|
11
|
+
if (clipboard?.write && typeof w.ClipboardItem === 'function' && wireHtml && w.Blob) {
|
|
12
|
+
try {
|
|
13
|
+
await clipboard.write([
|
|
14
|
+
new w.ClipboardItem({
|
|
15
|
+
'text/html': new w.Blob([wireHtml], { type: 'text/html' }),
|
|
16
|
+
'text/plain': new w.Blob([restorablePlain || wireHtml], {
|
|
17
|
+
type: 'text/plain',
|
|
18
|
+
}),
|
|
19
|
+
}),
|
|
20
|
+
]);
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (wireHtml && doc?.body) {
|
|
27
|
+
const sel = w.window?.getSelection?.() ?? null;
|
|
28
|
+
const savedRanges = [];
|
|
29
|
+
if (sel) {
|
|
30
|
+
for (let i = 0; i < sel.rangeCount; i++) {
|
|
31
|
+
savedRanges.push(sel.getRangeAt(i));
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
const host = doc.createElement('div');
|
|
36
|
+
const h = host;
|
|
37
|
+
h.contentEditable = 'true';
|
|
38
|
+
h.innerHTML = wireHtml;
|
|
39
|
+
h.style.cssText =
|
|
40
|
+
'position:fixed;top:0;left:0;width:1px;height:1px;opacity:0;pointer-events:none;overflow:hidden;';
|
|
41
|
+
doc.body.appendChild(host);
|
|
42
|
+
const range = doc.createRange?.();
|
|
43
|
+
range?.selectNodeContents(host);
|
|
44
|
+
sel?.removeAllRanges();
|
|
45
|
+
if (range)
|
|
46
|
+
sel?.addRange(range);
|
|
47
|
+
const ok = doc.execCommand?.('copy') ?? false;
|
|
48
|
+
doc.body.removeChild(host);
|
|
49
|
+
sel?.removeAllRanges();
|
|
50
|
+
for (const r of savedRanges) {
|
|
51
|
+
try {
|
|
52
|
+
sel?.addRange(r);
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (ok)
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (restorablePlain) {
|
|
64
|
+
return copyTextToClipboard(restorablePlain);
|
|
65
|
+
}
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=copyHtmlAndPlainToClipboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copyHtmlAndPlainToClipboard.js","sourceRoot":"","sources":["../../../src/functions/dom/copyHtmlAndPlainToClipboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export declare const IM_FORWARD_BUNDLE_EXTRA_KEY = "forward_bundle";
|
|
2
|
+
export declare const IM_FORWARD_BUNDLE_CONTENT_VERSION = 1;
|
|
3
|
+
export interface ImForwardBundleStoredItem {
|
|
4
|
+
sender_id?: string;
|
|
5
|
+
sender_name: string;
|
|
6
|
+
type: string;
|
|
7
|
+
content: string;
|
|
8
|
+
snippet: string;
|
|
9
|
+
message_id?: string;
|
|
10
|
+
sender_seq?: number;
|
|
11
|
+
extra_data?: Record<string, unknown>;
|
|
12
|
+
}
|
|
13
|
+
export interface ImForwardBundleExtra {
|
|
14
|
+
items: ImForwardBundleStoredItem[];
|
|
15
|
+
}
|
|
16
|
+
export interface ImForwardBundleContentPayload {
|
|
17
|
+
v: typeof IM_FORWARD_BUNDLE_CONTENT_VERSION;
|
|
18
|
+
items: ImForwardBundleStoredItem[];
|
|
19
|
+
}
|
|
20
|
+
export declare function imForwardBundleHasRenderablePayload(bundle: ImForwardBundleExtra | null | undefined): boolean;
|
|
21
|
+
export declare function serializeForwardBundleContent(items: readonly ImForwardBundleStoredItem[]): string;
|
|
22
|
+
export declare function parseForwardBundleFromContent(content: string | undefined | null): ImForwardBundleExtra | null;
|
|
23
|
+
export declare function parseForwardBundleFromImMessage(messageType: string | undefined | null, content: string | undefined | null, extraData?: Record<string, unknown> | null): ImForwardBundleExtra | null;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
export const IM_FORWARD_BUNDLE_EXTRA_KEY = 'forward_bundle';
|
|
2
|
+
export const IM_FORWARD_BUNDLE_CONTENT_VERSION = 1;
|
|
3
|
+
function isValidStoredItem(raw) {
|
|
4
|
+
if (!raw || typeof raw !== 'object' || Array.isArray(raw))
|
|
5
|
+
return false;
|
|
6
|
+
const rec = raw;
|
|
7
|
+
const snippet = String(rec.snippet ?? '').trim();
|
|
8
|
+
const content = String(rec.content ?? '').trim();
|
|
9
|
+
return snippet.length > 0 || content.length > 0;
|
|
10
|
+
}
|
|
11
|
+
function normalizeBundleExtra(raw) {
|
|
12
|
+
if (!raw || typeof raw !== 'object' || Array.isArray(raw))
|
|
13
|
+
return null;
|
|
14
|
+
const items = raw.items;
|
|
15
|
+
if (!Array.isArray(items) || items.length === 0)
|
|
16
|
+
return null;
|
|
17
|
+
const out = items.filter(isValidStoredItem);
|
|
18
|
+
return out.length > 0 ? { items: out } : null;
|
|
19
|
+
}
|
|
20
|
+
export function imForwardBundleHasRenderablePayload(bundle) {
|
|
21
|
+
return (bundle?.items?.length ?? 0) > 0;
|
|
22
|
+
}
|
|
23
|
+
export function serializeForwardBundleContent(items) {
|
|
24
|
+
const payload = {
|
|
25
|
+
v: IM_FORWARD_BUNDLE_CONTENT_VERSION,
|
|
26
|
+
items: [...items],
|
|
27
|
+
};
|
|
28
|
+
return JSON.stringify(payload);
|
|
29
|
+
}
|
|
30
|
+
export function parseForwardBundleFromContent(content) {
|
|
31
|
+
const c = String(content ?? '').trim();
|
|
32
|
+
if (!c || c[0] !== '{')
|
|
33
|
+
return null;
|
|
34
|
+
try {
|
|
35
|
+
const raw = JSON.parse(c);
|
|
36
|
+
if (!raw || typeof raw !== 'object' || Array.isArray(raw))
|
|
37
|
+
return null;
|
|
38
|
+
const rec = raw;
|
|
39
|
+
const v = Number(rec.v);
|
|
40
|
+
if (v !== IM_FORWARD_BUNDLE_CONTENT_VERSION)
|
|
41
|
+
return null;
|
|
42
|
+
return normalizeBundleExtra({ items: rec.items });
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
export function parseForwardBundleFromImMessage(messageType, content, extraData) {
|
|
49
|
+
if (String(messageType ?? '').trim() !== 'forward_bundle')
|
|
50
|
+
return null;
|
|
51
|
+
const fromContent = parseForwardBundleFromContent(content);
|
|
52
|
+
if (fromContent)
|
|
53
|
+
return fromContent;
|
|
54
|
+
if (!extraData || typeof extraData !== 'object' || Array.isArray(extraData)) {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
return normalizeBundleExtra(extraData[IM_FORWARD_BUNDLE_EXTRA_KEY]);
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=forwardBundlePayload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forwardBundlePayload.js","sourceRoot":"","sources":["../../../src/functions/im/forwardBundlePayload.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export function getActiveMentionQuery(text, cursorPos) {
|
|
2
|
+
if (cursorPos < 0 || cursorPos > text.length)
|
|
3
|
+
return null;
|
|
4
|
+
const before = text.slice(0, cursorPos);
|
|
5
|
+
let searchEnd = before.length;
|
|
6
|
+
while (searchEnd >= 0) {
|
|
7
|
+
const atIndex = before.lastIndexOf('@', searchEnd - 1);
|
|
8
|
+
if (atIndex < 0)
|
|
9
|
+
return null;
|
|
10
|
+
if (atIndex > 0 && !/[\s\n]/.test(before[atIndex - 1])) {
|
|
11
|
+
searchEnd = atIndex;
|
|
12
|
+
continue;
|
|
13
|
+
}
|
|
14
|
+
const tail = before.slice(atIndex + 1);
|
|
15
|
+
if (tail.includes('\n') || /\s/.test(tail)) {
|
|
16
|
+
searchEnd = atIndex > 0 ? atIndex - 1 : -1;
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
return { atIndex, filter: tail };
|
|
20
|
+
}
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=getActiveMentionQuery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getActiveMentionQuery.js","sourceRoot":"","sources":["../../../src/functions/im/getActiveMentionQuery.ts"],"names":[],"mappings":"AACA,MAAM,UAAU,qBAAqB,CACnC,IAAY,EACZ,SAAiB;IAEjB,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IACzD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;IACvC,IAAI,SAAS,GAAG,MAAM,CAAC,MAAM,CAAA;IAC7B,OAAO,SAAS,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,SAAS,GAAG,CAAC,CAAC,CAAA;QACtD,IAAI,OAAO,GAAG,CAAC;YAAE,OAAO,IAAI,CAAA;QAC5B,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,CAAE,CAAC,EAAE,CAAC;YACxD,SAAS,GAAG,OAAO,CAAA;YACnB,SAAQ;QACV,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAA;QACtC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3C,SAAS,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAC1C,SAAQ;QACV,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;IAClC,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export declare function formatImFileToken(filePath: string): string;
|
|
2
|
+
export declare const formatImLocalFileToken: typeof formatImFileToken;
|
|
3
|
+
export declare function formatImImageLocalToken(attachKey: string): string;
|
|
4
|
+
export interface ImImageIntrinsicDimensions {
|
|
5
|
+
width: number;
|
|
6
|
+
height: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function formatImImageUrlToken(url: string, dimensions?: ImImageIntrinsicDimensions): string;
|
|
9
|
+
export declare function parseImImageUrlTokenPayload(payload: string): {
|
|
10
|
+
url: string;
|
|
11
|
+
width?: number;
|
|
12
|
+
height?: number;
|
|
13
|
+
};
|
|
14
|
+
export type ImRichContentSegment = {
|
|
15
|
+
type: 'text';
|
|
16
|
+
text: string;
|
|
17
|
+
} | {
|
|
18
|
+
type: 'mention';
|
|
19
|
+
userId: string;
|
|
20
|
+
raw: string;
|
|
21
|
+
label?: string;
|
|
22
|
+
} | {
|
|
23
|
+
type: 'file';
|
|
24
|
+
path: string;
|
|
25
|
+
raw: string;
|
|
26
|
+
} | {
|
|
27
|
+
type: 'image';
|
|
28
|
+
url: string;
|
|
29
|
+
raw: string;
|
|
30
|
+
pending: boolean;
|
|
31
|
+
attachKey?: string;
|
|
32
|
+
width?: number;
|
|
33
|
+
height?: number;
|
|
34
|
+
};
|
|
35
|
+
export declare function parseImRichContentSegments(content: string): ImRichContentSegment[];
|
|
36
|
+
export declare function contentHasImageLocalTokens(content: string): boolean;
|
|
37
|
+
export declare function replaceImImageLocalToken(content: string, attachKey: string, url: string, dimensions?: ImImageIntrinsicDimensions): string;
|
|
38
|
+
export declare function replaceImImageUrlToken(content: string, fromUrl: string, toUrl: string, dimensions?: ImImageIntrinsicDimensions): string;
|
|
39
|
+
export declare function contentHasImRichInlineTokens(content: string): boolean;
|
|
40
|
+
export type MaterializeImRichContentOptions = {
|
|
41
|
+
resolveMentionLabel?: (userId: string) => string;
|
|
42
|
+
mentionFallbackLabel?: (userId: string) => string;
|
|
43
|
+
formatLocalFilePath?: (path: string) => string;
|
|
44
|
+
preserveLocalFileTokens?: boolean;
|
|
45
|
+
preserveImageUrlTokens?: boolean;
|
|
46
|
+
formatImageUrl?: (url: string) => string;
|
|
47
|
+
formatImagePending?: () => string;
|
|
48
|
+
};
|
|
49
|
+
export declare function materializeImRichContentTokensInText(content: string, options?: MaterializeImRichContentOptions): string;
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { parseImMentionTokenPayload } from './parseImMentionSegments';
|
|
2
|
+
export function formatImFileToken(filePath) {
|
|
3
|
+
const p = filePath.trim();
|
|
4
|
+
return `local-file:[${p}]`;
|
|
5
|
+
}
|
|
6
|
+
export const formatImLocalFileToken = formatImFileToken;
|
|
7
|
+
export function formatImImageLocalToken(attachKey) {
|
|
8
|
+
const k = attachKey.trim();
|
|
9
|
+
return `img:[local:${k}]`;
|
|
10
|
+
}
|
|
11
|
+
export function formatImImageUrlToken(url, dimensions) {
|
|
12
|
+
const u = url.trim();
|
|
13
|
+
if (!u)
|
|
14
|
+
return '';
|
|
15
|
+
const w = Math.round(dimensions?.width ?? 0);
|
|
16
|
+
const h = Math.round(dimensions?.height ?? 0);
|
|
17
|
+
if (w > 0 && h > 0) {
|
|
18
|
+
return `img:[url:${u};w:${w};h:${h}]`;
|
|
19
|
+
}
|
|
20
|
+
return `img:[url:${u}]`;
|
|
21
|
+
}
|
|
22
|
+
export function parseImImageUrlTokenPayload(payload) {
|
|
23
|
+
const raw = payload.trim();
|
|
24
|
+
if (!raw)
|
|
25
|
+
return { url: '' };
|
|
26
|
+
const body = raw.startsWith('url:') ? raw.slice(4) : raw;
|
|
27
|
+
if (!body)
|
|
28
|
+
return { url: '' };
|
|
29
|
+
const dimMatch = body.match(/;w:(\d+);h:(\d+)$/);
|
|
30
|
+
if (dimMatch?.index != null) {
|
|
31
|
+
const width = Number.parseInt(dimMatch[1], 10);
|
|
32
|
+
const height = Number.parseInt(dimMatch[2], 10);
|
|
33
|
+
const url = body.slice(0, dimMatch.index).trim();
|
|
34
|
+
return {
|
|
35
|
+
url,
|
|
36
|
+
...(width > 0 && height > 0 ? { width, height } : {}),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
return { url: body.trim() };
|
|
40
|
+
}
|
|
41
|
+
const INLINE_TOKEN_RE = /@\[uid:([^\]]+)\]|local-file:\[([^\]]+)\]|file:\[([^\]]+)\]|img:\[local:([^\]]+)\]|img:\[url:([^\]]+)\]/g;
|
|
42
|
+
export function parseImRichContentSegments(content) {
|
|
43
|
+
if (!content)
|
|
44
|
+
return [{ type: 'text', text: '' }];
|
|
45
|
+
const segments = [];
|
|
46
|
+
let last = 0;
|
|
47
|
+
const re = new RegExp(INLINE_TOKEN_RE.source, 'g');
|
|
48
|
+
let m;
|
|
49
|
+
while ((m = re.exec(content)) !== null) {
|
|
50
|
+
if (m.index > last) {
|
|
51
|
+
segments.push({ type: 'text', text: content.slice(last, m.index) });
|
|
52
|
+
}
|
|
53
|
+
if (m[1] != null) {
|
|
54
|
+
const parsed = parseImMentionTokenPayload(m[1]);
|
|
55
|
+
segments.push({
|
|
56
|
+
type: 'mention',
|
|
57
|
+
userId: parsed.userId,
|
|
58
|
+
raw: m[0],
|
|
59
|
+
...(parsed.label ? { label: parsed.label } : {}),
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
else if (m[2] != null) {
|
|
63
|
+
segments.push({ type: 'file', path: m[2], raw: m[0] });
|
|
64
|
+
}
|
|
65
|
+
else if (m[3] != null) {
|
|
66
|
+
segments.push({ type: 'file', path: m[3], raw: m[0] });
|
|
67
|
+
}
|
|
68
|
+
else if (m[4] != null) {
|
|
69
|
+
segments.push({
|
|
70
|
+
type: 'image',
|
|
71
|
+
url: '',
|
|
72
|
+
attachKey: m[4],
|
|
73
|
+
raw: m[0],
|
|
74
|
+
pending: true,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
else if (m[5] != null) {
|
|
78
|
+
const parsed = parseImImageUrlTokenPayload(m[5]);
|
|
79
|
+
segments.push({
|
|
80
|
+
type: 'image',
|
|
81
|
+
url: parsed.url,
|
|
82
|
+
...(parsed.width != null && parsed.height != null
|
|
83
|
+
? { width: parsed.width, height: parsed.height }
|
|
84
|
+
: {}),
|
|
85
|
+
raw: m[0],
|
|
86
|
+
pending: false,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
last = m.index + m[0].length;
|
|
90
|
+
}
|
|
91
|
+
if (last < content.length) {
|
|
92
|
+
segments.push({ type: 'text', text: content.slice(last) });
|
|
93
|
+
}
|
|
94
|
+
if (segments.length === 0) {
|
|
95
|
+
return [{ type: 'text', text: content }];
|
|
96
|
+
}
|
|
97
|
+
return segments;
|
|
98
|
+
}
|
|
99
|
+
export function contentHasImageLocalTokens(content) {
|
|
100
|
+
return /img:\[local:[^\]]+\]/.test(content);
|
|
101
|
+
}
|
|
102
|
+
export function replaceImImageLocalToken(content, attachKey, url, dimensions) {
|
|
103
|
+
const from = formatImImageLocalToken(attachKey);
|
|
104
|
+
const to = formatImImageUrlToken(url, dimensions);
|
|
105
|
+
return content.includes(from) ? content.split(from).join(to) : content;
|
|
106
|
+
}
|
|
107
|
+
export function replaceImImageUrlToken(content, fromUrl, toUrl, dimensions) {
|
|
108
|
+
const to = formatImImageUrlToken(toUrl, dimensions);
|
|
109
|
+
const fromWithDims = formatImImageUrlToken(fromUrl, dimensions);
|
|
110
|
+
if (content.includes(fromWithDims)) {
|
|
111
|
+
return content.split(fromWithDims).join(to);
|
|
112
|
+
}
|
|
113
|
+
const fromPlain = formatImImageUrlToken(fromUrl);
|
|
114
|
+
if (content.includes(fromPlain)) {
|
|
115
|
+
return content.split(fromPlain).join(to);
|
|
116
|
+
}
|
|
117
|
+
return content;
|
|
118
|
+
}
|
|
119
|
+
const INLINE_TOKEN_IN_TEXT = /@\[uid:|local-file:\[|img:\[|file:\[/;
|
|
120
|
+
export function contentHasImRichInlineTokens(content) {
|
|
121
|
+
return INLINE_TOKEN_IN_TEXT.test(content ?? '');
|
|
122
|
+
}
|
|
123
|
+
function basenameFromPath(path) {
|
|
124
|
+
const p = path.trim();
|
|
125
|
+
if (!p)
|
|
126
|
+
return '';
|
|
127
|
+
const parts = p.split(/[/\\]/);
|
|
128
|
+
return parts[parts.length - 1] || p;
|
|
129
|
+
}
|
|
130
|
+
function defaultFormatLocalFilePath(path) {
|
|
131
|
+
const name = basenameFromPath(path);
|
|
132
|
+
return name ? `[文件] ${name}` : '[文件]';
|
|
133
|
+
}
|
|
134
|
+
function defaultFormatMentionLabel(userId, options, embeddedLabel) {
|
|
135
|
+
const id = userId.trim();
|
|
136
|
+
const label = embeddedLabel?.trim() ||
|
|
137
|
+
options?.resolveMentionLabel?.(id)?.trim() ||
|
|
138
|
+
options?.mentionFallbackLabel?.(id)?.trim();
|
|
139
|
+
if (label)
|
|
140
|
+
return `@${label}`;
|
|
141
|
+
if (id.length > 14)
|
|
142
|
+
return `@${id.slice(0, 12)}…`;
|
|
143
|
+
return `@${id || '…'}`;
|
|
144
|
+
}
|
|
145
|
+
export function materializeImRichContentTokensInText(content, options) {
|
|
146
|
+
const raw = content ?? '';
|
|
147
|
+
if (!raw || !INLINE_TOKEN_IN_TEXT.test(raw))
|
|
148
|
+
return raw;
|
|
149
|
+
const segments = parseImRichContentSegments(raw);
|
|
150
|
+
let out = '';
|
|
151
|
+
for (const seg of segments) {
|
|
152
|
+
if (seg.type === 'text') {
|
|
153
|
+
out += seg.text;
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
if (seg.type === 'mention') {
|
|
157
|
+
out += defaultFormatMentionLabel(seg.userId, options, seg.label);
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
if (seg.type === 'file') {
|
|
161
|
+
if (options?.preserveLocalFileTokens) {
|
|
162
|
+
out += seg.raw;
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
out +=
|
|
166
|
+
options?.formatLocalFilePath?.(seg.path) ??
|
|
167
|
+
defaultFormatLocalFilePath(seg.path);
|
|
168
|
+
}
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
if (seg.type === 'image') {
|
|
172
|
+
if (seg.pending) {
|
|
173
|
+
out += options?.formatImagePending?.() ?? '[图片]';
|
|
174
|
+
}
|
|
175
|
+
else if (options?.preserveImageUrlTokens) {
|
|
176
|
+
out += seg.raw;
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
out += options?.formatImageUrl?.(seg.url) ?? '[图片]';
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return out;
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=imInlineContentTokens.js.map
|