@heybox/hb-sdk API Reference - v0.9.5
    正在准备搜索索引...

    函数 isMiniProgramDirectoryRef

    • 判断未知值是否为 direct handle 或 path-derived 目录引用。

      参数

      • value: unknown

        来自 descriptor、capability payload 或其他不可信 wire 边界的候选目录引用。

      返回 value is MiniProgramDirectoryRef

      值满足 MiniProgramDirectoryRef 任一分支的最低结构时返回 true,并将 TypeScript 类型 收窄为 direct/derived 目录引用联合;否则返回 false。

      两个分支都要求 kind === 'directory',并对通常的对象字面量使用互斥的 canonical key 集合:

      • Direct ref:{ kind: 'directory', handleId }。handleId 必须是非空字符串;不能同时携带 root 或 relativePath。
      • Derived ref:{ kind: 'directory', root, relativePath }。不能携带 handleId;root 必须通过 isMiniProgramPathRootRef,即精确的 { kind: 'sandbox' },或带非空 handleId 的 direct directory root。file ref 与再次嵌套的 derived directory ref 都不能作为 root。

      Derived ref 的 relativePath 可以是 '.',表示 root 目录自身;这是目录引用专属规则,普通 isMiniProgramRelativePath 和 file ref 都不接受 '.'。其他相对路径必须非空,不以 / 开头或结尾, 不含空段、. / .. 点段、反斜杠、U+0000-U+001F 控制字符或 U+007F。该校验不会 URL decode、 Unicode normalize、解析平台分隔符、限制长度,或判断路径指向的目录是否存在。

      direct 与 derived 分支都会拒绝 canonical 集合之外的可枚举自有字符串键,包括值为 undefined 的额外键。 检查基于 Object.keys(),因此非枚举属性、symbol 键和继承属性不会被列入;必需属性本身也不要求是自有 或可枚举属性。返回对象不会被复制、冻结或规范化。

      返回 true 只证明当前结构可按 wire 类型读取,不证明 direct handleId 或 root handle 由当前 Runtime 签发、 属于当前 session/origin、仍然有效且确为目录,也不证明目标存在、filesystem 权限已启用、访问模式允许 当前操作或 Host 支持对应 capability。Runtime 在实际解析 ref 时仍须查询 handle registry、执行权限与 provenance 校验,并解析 derived path。

      import { isMiniProgramDirectoryRef } from '@heybox/hb-sdk/protocol';

      const candidate: unknown = {
      kind: 'directory',
      root: { kind: 'directory', handleId: 'directory_1' },
      relativePath: 'screenshots/2026',
      };

      if (isMiniProgramDirectoryRef(candidate)) {
      if ('handleId' in candidate) {
      console.log('direct', candidate.handleId);
      } else {
      console.log('derived', candidate.root, candidate.relativePath);
      }
      }

      isMiniProgramDirectoryRef({ kind: 'directory', root: { kind: 'sandbox' }, relativePath: '.' }); // true
      isMiniProgramDirectoryRef({ kind: 'directory', handleId: 'd1', relativePath: '.' }); // false:分支键混用

      0.8.0