来自文件引用、目录引用或其他不可信 wire 边界的候选 root。
值满足 sandbox root 或 direct directory root 任一结构时返回 true,并将 TypeScript 类型
收窄为 MiniProgramPathRootRef 判别联合;否则返回 false。
支持两个以 kind 区分的分支:
{ kind: 'sandbox' }。对通常的对象字面量,除 kind 外不能携带任何字段。{ kind: 'directory', handleId }。handleId 必须是非空字符串;空白字符串仍满足
本 guard 的最低结构,格式、长度和归属由 Runtime 继续校验。direct file ref、derived directory ref、普通路径字符串以及其他 kind 都不能作为 PathRoot。特别是
{ kind: 'directory', root, relativePath } 会因额外 canonical 外字段而失败:derived ref 只能引用 sandbox
或 direct directory root,不能递归嵌套另一层 derived root。
两个分支都会拒绝 canonical 集合之外的可枚举自有字符串键,包括值为 undefined 的额外键。检查基于
Object.keys(),因此非枚举属性、symbol 键和继承属性不会被列入;必需属性本身也不要求是自有或可枚举
属性。该函数不会复制、冻结或规范化输入。
返回 true 只建立结构类型收窄,不证明 directory handleId 由当前 Runtime 签发、属于当前 session/origin、
仍然有效且确为目录,也不证明 filesystem 权限、目录访问 mode、provenance 或 Host capability。sandbox
标记同样不自行建立隔离边界;Runtime 必须把它解析到当前 Mini-program 的私有 root 并执行实际权限策略。
isMiniProgramFileRef 与 isMiniProgramDirectoryRef 都用该 guard 校验 derived ref 的 root;
它只校验 root 身份,不校验各自的 relativePath。
import { isMiniProgramPathRootRef } from '@heybox/hb-sdk/protocol';
const candidates: unknown[] = [
{ kind: 'sandbox' },
{ kind: 'directory', handleId: 'directory_1' },
];
for (const candidate of candidates) {
if (!isMiniProgramPathRootRef(candidate)) continue;
if (candidate.kind === 'sandbox') {
console.log('private sandbox root');
} else {
console.log('authorized directory root', candidate.handleId);
}
}
isMiniProgramPathRootRef({ kind: 'file', handleId: 'file_1' }); // false
isMiniProgramPathRootRef({ kind: 'directory', root: { kind: 'sandbox' }, relativePath: 'nested' }); // false
files.sandbox 与目录 picker 的入口。
判断未知值是否可作为 derived file/directory ref 的逻辑路径 root。