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

    函数 isMiniProgramFileRef

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

      参数

      • value: unknown

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

      返回 value is MiniProgramFileRef

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

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

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

      Derived ref 的 relativePath 必须通过 isMiniProgramRelativePath:非空、不以 / 开头或结尾, 不含空段、. / .. 点段、反斜杠、U+0000-U+001F 控制字符或 U+007F。文件必须指向 root 下的具体路径, 因此与 isMiniProgramDirectoryRef 不同,relativePath: '.' 不合法。该 guard 不会 URL decode、 Unicode normalize、解析平台分隔符、限制路径长度,或确认末段是文件而不是目录。

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

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

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

      const candidate: unknown = {
      kind: 'file',
      root: { kind: 'directory', handleId: 'directory_1' },
      relativePath: 'screenshots/cover.png',
      };

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

      isMiniProgramFileRef({ kind: 'file', handleId: 'file_1' }); // true
      isMiniProgramFileRef({ kind: 'file', root: { kind: 'sandbox' }, relativePath: '.' }); // false

      0.8.0