来自 Host response、bridge result 或其他不可信边界的候选媒体项。
字段组合满足 MediaPickItem 判别联合的最低结构时返回 true,并将 TypeScript 类型
收窄为图片或视频项;否则返回 false。
以 type 为判别字段,两个分支都要求 mimeType 非空字符串、size 为非负安全整数、width /
height 为正安全整数、previewUrl 非空字符串,且 file 是通过
isMiniProgramFileDescriptor 的 direct file ref(ref.kind === 'file' 且带非空 handleId),
mode 必须固定为 'read'。图片分支只允许公共 key;视频分支额外要求非负安全整数的 durationMs,
并拒绝图片携带该字段。
size 单位为字节,width / height 是考虑方向后的显示像素尺寸,durationMs 单位为毫秒。
该 guard 只校验结构与数值范围,不证明元数据与 file 实际内容一致、previewUrl 属于当前会话、
file 句柄由当前 Runtime 签发或仍在有效期内,也不检查 media 权限与 Host 能力。
import { isMiniProgramMediaPickItem } from '@heybox/hb-sdk/protocol';
const video = {
type: 'video',
mimeType: 'video/mp4',
size: 5_242_880,
width: 1280,
height: 720,
durationMs: 12_000,
previewUrl: 'hb-media-preview://session/resource_2',
file: { kind: 'file', name: 'clip.mp4', mode: 'read', ref: { kind: 'file', handleId: 'media_handle_2' } },
};
isMiniProgramMediaPickItem(video); // true
isMiniProgramMediaPickItem({ ...video, type: 'image' }); // false:图片不允许 durationMs
判断未知值是否为单个
media.pick媒体项。