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

    函数 isMiniProgramFileDescriptor

    • 判断未知值是否具有文件 descriptor 的最低 wire 结构。

      参数

      • value: unknown

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

      返回 value is MiniProgramFileDescriptor

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

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

      • kind:固定为 'file'。
      • name:非空字符串。该 guard 不检查空白、.、..、/、反斜杠、控制字符、平台保留名或 name 是否等于 ref.relativePath 的 basename;SDK 创建 FileHandle 时还会执行更严格的名称校验。
      • mode:只能是 'read' 或 'readwrite'。这是 descriptor 声明值,不证明 Host 实际授予了读写权限。
      • ref:必须通过 isMiniProgramFileRef。

      ref 可以是 { kind: 'file', handleId } 形式的 direct file ref,其中 handleId 只要求非空;也可以是 { kind: 'file', root, relativePath } 形式的 derived ref。derived root 只能是精确的 sandbox root 或 带非空 handleId 的 direct directory root,不能是 file ref 或再次派生的 directory ref;relativePath 必须是非空、非绝对、无尾随 /、无空段、. / .. 点段、反斜杠或控制字符的相对路径。与目录 ref 不同,文件 ref 不接受 relativePath: '.',因为它必须指向 root 下的具体文件。

      顶层 descriptor、ref 与 root 的额外可枚举自有字符串键都会导致失败,包括值为 undefined 的额外键; 非枚举属性、symbol 键和继承属性不在 Object.keys() 检查范围内,必需属性本身也不要求是自有或可枚举 属性。该函数不会复制、冻结或规范化输入。

      返回 true 只建立结构类型收窄,不证明 direct handleId 或 root handle 由当前 Runtime 签发、属于当前 session/origin、仍然有效且确为预期类型,也不证明文件存在、名称真实、filesystem 权限已启用、mode 允许当前操作或 Host 支持对应 capability。实际文件操作仍须由 Runtime 查询 handle registry、执行权限、 provenance、目标类型和存在性校验。

      isMiniProgramFileSystemEntityDescriptor 使用本 guard 与目录 descriptor guard 识别目录列表项。 files.pickFiles() 与 files.saveFile() 的成功结果要求更窄的 direct file ref,而 sandbox/path API 返回的 descriptor 可以使用 derived ref;本 guard 本身不会区分 descriptor 的来源。

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

      const candidate = {
      kind: 'file',
      name: 'report.json',
      mode: 'readwrite',
      ref: {
      kind: 'file',
      root: { kind: 'sandbox' },
      relativePath: 'exports/report.json',
      },
      };
      const untrusted: unknown = candidate;

      if (isMiniProgramFileDescriptor(untrusted)) {
      // 这里只能安全读取 wire 字段;文件 I/O 仍交给 files API/Runtime。
      console.log(untrusted.name, untrusted.mode, untrusted.ref);
      }

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

      0.8.0