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

    函数 isMiniProgramDownloadProgressPayload

    • 判断未知值是否为单个 network.download 进度 payload。

      参数

      • value: unknown

        来自 operation progress 事件、Host adapter 或其他不可信边界的候选进度快照。

      返回 value is DownloadProgressPayload

      字段组合满足 DownloadProgressPayload 的最低 wire 约束时返回 true,并将 TypeScript 类型收窄为下载进度 payload;否则返回 false。

      对通常的对象字面量,仅允许 loaded、total、lengthComputable 三个 canonical key,并执行以下组合校验:

      • loaded 始终必需,必须是 0 到 Number.MAX_SAFE_INTEGER 范围内的整数。负数、小数、NaN、 Infinity、unsafe integer、bigint 和数字字符串都会被拒绝。
      • lengthComputable 必须是 boolean,不能使用 0 / 1 或其他 truthy/falsy 值代替。
      • lengthComputable === false 时,total 必须为 undefined;既可以省略该 key,也可以显式写成 total: undefined。此分支不对 loaded 应达到的最终值作推断。
      • lengthComputable === true 时,total 必须是非负 safe integer,且 loaded <= total。 { loaded: 0, total: 0, lengthComputable: true } 是有效的空内容进度。

      canonical 集合之外的可枚举自有字符串键会导致失败;非枚举属性、symbol 键和继承属性不在 Object.keys() 检查范围内,必需字段本身也不要求是自有或可枚举属性。该函数不会复制、冻结或 规范化输入。类型谓词只收窄到字段仍为可变、total 仍为可选的 DownloadProgressPayload, 不会在 TypeScript 中建立以 lengthComputable 为判别字段的精确联合。

      单个 payload 通过不表示进度来自当前 request、使用当前 pending operation 的 ID,或由可信 Host 产生; 也不保证单位确为字节、事件按时间排序、loaded 相对前一事件单调、total 跨事件稳定、这是最终进度, 或对应字节已经原子提交到目标文件。network.download 的 Runtime 状态机必须另行绑定 request ID,校验 可信响应 framing、maxBytes、取消与终态,并过滤倒退或越界值。

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

      function renderProgress(candidate: unknown) {
      if (!isMiniProgramDownloadProgressPayload(candidate)) return;

      if (candidate.lengthComputable && candidate.total !== undefined) {
      console.log(`${candidate.loaded}/${candidate.total}`);
      } else {
      console.log(`${candidate.loaded} bytes`);
      }
      }

      renderProgress({ loaded: 512, total: 1024, lengthComputable: true }); // valid
      renderProgress({ loaded: 512, lengthComputable: false }); // valid:总长度未知
      renderProgress({ loaded: 5, total: 4, lengthComputable: true }); // ignored:loaded > total

      0.8.0