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

    函数 isMiniProgramDirectoryDescriptor

    • 判断未知值是否具有目录 descriptor 的精确 wire 结构。

      参数

      • value: unknown

        来自 Host、bridge response、目录列表或其他不可信边界的候选 descriptor。

      返回 value is MiniProgramDirectoryDescriptor

      顶层字段及嵌套目录引用都满足协议最低结构时返回 true,并将 TypeScript 类型收窄为 MiniProgramDirectoryDescriptor;否则返回 false。

      guard 会读取并校验以下四个属性;对通常的对象字面量,它们也是唯一允许的可枚举自有字符串字段:

      • kind:固定为 'directory'。
      • name:非空字符串。该 guard 不检查空白、.、..、斜杠、反斜杠、控制字符或平台文件名规则; SDK 将 descriptor 转为 DirectoryHandle 时还会执行更严格的名称校验。
      • mode:只能是 'read' 或 'readwrite';这里只识别声明值,不证明 Host 实际授予了对应访问模式。
      • ref:必须通过 isMiniProgramDirectoryRef。

      ref 可以是 { kind: 'directory', handleId } 形式的直接引用,其中 handleId 只要求为非空字符串; 也可以是 { kind: 'directory', root, relativePath } 形式的派生引用。派生引用的 root 只能是精确的 sandbox root,或带非空 handleId 的直接目录 root;relativePath 可用 '.' 表示 root 自身,其他值 必须是非空、非绝对、无尾随 /、无空段/点段/父目录段、反斜杠或控制字符的规范相对路径。

      顶层 descriptor、ref 与 root 的额外可枚举自有字符串键都会导致失败;但非枚举属性、symbol 键和 继承属性不在 Object.keys() 检查范围内,必需属性本身也不要求是自有或可枚举属性。该函数不会复制、 冻结或规范化对象,也不会验证 handleId 是否由当前 Runtime 签发、是否属于当前 session/origin、目标目录 是否存在、name 是否与真实目录一致,或 Manifest/Runtime 权限、Host 支持及当前操作是否允许。 返回 true 只建立结构类型收窄,不建立信任边界。

      isMiniProgramFileSystemEntityDescriptor 使用本 guard 与文件 descriptor guard 共同识别目录列表项。 files.pickDirectory() 成功结果还要求 direct ref,而 sandbox/path 派生的目录可由 DirectoryHandle 的路径 API 产生;这些来源和能力差异不能仅凭本 guard 判定。

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

      const candidate = {
      kind: 'directory',
      name: 'screenshots',
      mode: 'readwrite',
      ref: {
      kind: 'directory',
      root: { kind: 'sandbox' },
      relativePath: 'exports/screenshots',
      },
      };
      const untrusted: unknown = candidate;

      if (isMiniProgramDirectoryDescriptor(untrusted)) {
      // 这里只能安全读取已收窄的 wire 字段;实际操作仍交给 files API/Runtime。
      console.log(untrusted.name, untrusted.ref);
      }

      isMiniProgramDirectoryDescriptor({ ...candidate, size: 0 }); // false:顶层存在额外键

      0.8.0