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

    函数 resolveMiniappManifestPlatforms

    • 解析 Manifest 平台声明,是 0.9.0 硬切规则的唯一实现。

      参数

      • sdkVersion: string | undefined

        产物写入 Manifest 的 hb-sdk 版本,不是小程序自身的发布 version。 undefined、空字符串和纯空白按历史“缺失 sdkVersion”处理;其他字符串会先 trim,再按 canonical strict SemVer 校验并参与 precedence 比较。

      • manifest: unknown

        待解析的不可信 Manifest。必须是非 null、非数组的对象;函数只读取其 自有 platforms 字段,其他字段不参与平台解析。

      返回 MiniappPlatformResolution

      冻结的 MiniappPlatformResolution。显式声明返回规范排序后的 declared / effective;历史兼容返回空 declared 与历史兜底平台集合 effective。

      manifest 不是对象时抛出;非空 sdkVersion 不完整、含 v 前缀或 build metadata、 不是 canonical SemVer 时抛出;sdkVersion precedence 达到 0.9.0 但缺少 platforms 时抛出; 显式 platforms 不是非空数组、包含未知/非字符串/重复平台时抛出。

      解析顺序与后端领域层保持一致:先校验 Manifest 对象,再处理 sdkVersion;只要非空 sdkVersion 非法,即使存在合法 platforms 也会抛出,不会忽略版本。版本比较使用 SemVer precedence,不做字符串比较:0.9.0-alpha.1 < 0.9.0,而 0.10.0 > 0.9.0。

      Manifest 拥有 platforms 字段时总是走 explicit:字段必须是非空数组,每项必须属于 MINIAPP_PLATFORM_VALUES 且不能重复;结果按固定平台词表排序,而不是保留输入顺序。 该规则与 sdkVersion 是否缺失、低于或达到硬切点无关。显式声明一旦非法绝不回退到 legacy 默认值。

      Manifest 完全没有 platforms 字段时才判断硬切:sdkVersion 缺失/空白,或 precedence 低于 MINIAPP_PLATFORM_HARD_CUT_SDK_VERSION(0.9.0)时返回 legacy_mobile_default;0.9.0 稳定版及更高版本直接抛错。0.9.0-* prerelease 仍低于 稳定硬切点,因此可解析历史缺失声明。

      返回对象被 Object.freeze();显式声明数组和 legacy 的空 declared 数组也被冻结。所有 数组均以 readonly 合同暴露,调用方应直接消费 effective,不得再比较版本或补默认值。

      当前 Vite 构建入口 miniappManifest 会从 package.json#heybox.platforms 读取并写入显式声明;legacy 分支只用于解析缺少字段 的历史产物,不是新项目省略 platforms 的许可。

      isValidVersion 判断的是小程序发布 version,并额外拒绝模板值 0.0.0;本函数的 sdkVersion 是 hb-sdk 版本,0.0.0 本身是可比较的 strict SemVer 并低于硬切点。两类版本不能互换校验。

      import { resolveMiniappManifestPlatforms } from '@heybox/hb-sdk/miniapp-publish'

      const explicit = resolveMiniappManifestPlatforms('0.9.0', {
      platforms: ['linux', 'android', 'macos'],
      })
      console.log(explicit)
      // {
      // declared: ['android', 'macos', 'linux'],
      // effective: ['android', 'macos', 'linux'],
      // platformsDeclared: true,
      // policy: 'explicit'
      // }

      const legacy = resolveMiniappManifestPlatforms('0.9.0-alpha.1', {})
      console.log(legacy.effective) // ['android', 'ios', 'ohos', 'windows', 'macos']

      0.8.1