@heybox/hb-sdk 0.8.1-alpha.9 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/CHANGELOG.md +93 -1
  2. package/README.md +64 -18
  3. package/dist/cli-chunks/{build-D8eh0bxZ.cjs → build-DPe1Ycjd.cjs} +21 -7
  4. package/dist/cli-chunks/{context-JfGWhXSD.cjs → context-BSUhAv3Z.cjs} +2 -2
  5. package/dist/cli-chunks/{create-BiqK-4fa.cjs → create-CaiKrGnb.cjs} +2 -1
  6. package/dist/cli-chunks/{dev-u27Q6a-K.cjs → dev-BG1o8Q-0.cjs} +45 -12
  7. package/dist/cli-chunks/doctor-DutO2P5H.cjs +195 -0
  8. package/dist/cli-chunks/{index-CtR3w1bw.cjs → index-Bur0U2z1.cjs} +2 -2
  9. package/dist/cli-chunks/{index-B2eLzOSD.cjs → index-CKIyipP9.cjs} +77 -21
  10. package/dist/cli-chunks/{index.esm-CCDqeyc7.cjs → index.esm-BPlpP-O0.cjs} +8 -8
  11. package/dist/cli-chunks/{login-BSySslS2.cjs → login-C1JlLEza.cjs} +2 -2
  12. package/dist/cli-chunks/{project-vite-C-r7_UvY.cjs → project-vite-Bd0WzAqQ.cjs} +1 -1
  13. package/dist/cli-chunks/{remote-WvNfCBeJ.cjs → remote-DTFEf3Dj.cjs} +74 -10
  14. package/dist/cli-chunks/{runtime-permission-env-g_2W-HqP.cjs → runtime-permission-env-C2S34ldj.cjs} +145 -4
  15. package/dist/cli-chunks/{session-CaNwlovY.cjs → session-zXVkHuhY.cjs} +1 -1
  16. package/dist/cli-chunks/{skill-V_4EkY23.cjs → skill-CCB3DyXk.cjs} +3 -2
  17. package/dist/cli-chunks/{version-Dox07wdq.cjs → version-0qwlEyZC.cjs} +1 -1
  18. package/dist/cli.cjs +2 -1
  19. package/dist/devtools/browser-dev-host/assets/browser-dev-host-pUcws1MK.js +101 -0
  20. package/dist/devtools/browser-dev-host/assets/{desktop-app-launch-BE-Jw0zD.js → desktop-app-launch-DOfl5YvO.js} +3 -3
  21. package/dist/devtools/browser-dev-host/assets/{index-wEzSxtKd.js → index-CFr28-0O.js} +4 -4
  22. package/dist/devtools/browser-dev-host/assets/{index-D-aNERAr.css → index-DXd5IZBz.css} +1 -1
  23. package/dist/devtools/browser-dev-host/index.html +3 -3
  24. package/dist/index.cjs.js +24 -24
  25. package/dist/index.esm.js +24 -24
  26. package/dist/miniapp-publish.cjs.js +121 -3
  27. package/dist/miniapp-publish.esm.js +118 -4
  28. package/dist/protocol.cjs.js +27 -27
  29. package/dist/protocol.esm.js +27 -27
  30. package/dist/vite.cjs.js +179 -17
  31. package/dist/vite.esm.js +179 -18
  32. package/docs/device-logs.md +36 -0
  33. package/docs/runtime-host-migration.md +120 -0
  34. package/package.json +8 -6
  35. package/skill/SKILL.md +25 -20
  36. package/skill/references/api-protocol.md +3 -3
  37. package/skill/references/api-root.md +104 -11
  38. package/skill/references/cli.md +110 -9
  39. package/skill/references/examples.md +2 -2
  40. package/skill/references/recipes.md +25 -10
  41. package/skill/references/safety-boundaries.md +10 -7
  42. package/skill/skill.json +5 -5
  43. package/types/miniapp-manifest/bindings.d.ts +5 -0
  44. package/types/miniapp-manifest/index.d.ts +1 -0
  45. package/types/miniapp-manifest/node.d.ts +9 -1
  46. package/types/miniapp-manifest/schema.d.ts +94 -0
  47. package/types/miniapp-publish/index.d.ts +4 -2
  48. package/types/modules/companion/index.d.ts +68 -0
  49. package/types/modules/files/types.d.ts +10 -11
  50. package/types/modules/network/index.d.ts +3 -3
  51. package/types/skill-metadata.d.ts +16 -0
  52. package/types/vite/index.d.ts +1 -0
  53. package/dist/cli-chunks/doctor-ppQbhj7e.cjs +0 -65
  54. package/dist/devtools/browser-dev-host/assets/browser-dev-host-BYKHn0Ny.js +0 -101
@@ -2785,9 +2785,123 @@ function requireSemver () {
2785
2785
 
2786
2786
  var semverExports = requireSemver();
2787
2787
 
2788
+ const MINIAPP_BIND_APP_IDS_MAX_COUNT = 20;
2789
+ function parseMiniappBindAppIds(value, options = {}) {
2790
+ const sourceLabel = options.sourceLabel ?? 'package.json#heybox.bindAppIds';
2791
+ if (value === undefined)
2792
+ return Object.freeze([]);
2793
+ if (!Array.isArray(value))
2794
+ throw new Error(`${sourceLabel} 必须是字符串数组`);
2795
+ if (value.length > MINIAPP_BIND_APP_IDS_MAX_COUNT) {
2796
+ throw new Error(`${sourceLabel} 最多包含 ${MINIAPP_BIND_APP_IDS_MAX_COUNT} 个游戏 appid`);
2797
+ }
2798
+ const seen = new Set();
2799
+ const appIds = [];
2800
+ for (const item of value) {
2801
+ if (typeof item !== 'string' || !/^[1-9]\d*$/.test(item)) {
2802
+ throw new Error(`${sourceLabel} 包含非法游戏 appid:${String(item)}`);
2803
+ }
2804
+ const numeric = Number(item);
2805
+ if (!Number.isSafeInteger(numeric) || numeric > 2_147_483_647) {
2806
+ throw new Error(`${sourceLabel} 包含超出正 int32 范围的游戏 appid:${item}`);
2807
+ }
2808
+ if (seen.has(item))
2809
+ throw new Error(`${sourceLabel} 包含重复游戏 appid:${item}`);
2810
+ seen.add(item);
2811
+ appIds.push(item);
2812
+ }
2813
+ appIds.sort((left, right) => Number(left) - Number(right));
2814
+ return Object.freeze(appIds);
2815
+ }
2816
+
2817
+ const MINIAPP_PLATFORM_VALUES = ['android', 'ios', 'ohos', 'windows', 'macos', 'linux'];
2818
+ /** 平台声明硬切点:产物 hb-sdk 版本达到该值时,必须显式声明非空 `platforms`。 */
2819
+ const MINIAPP_PLATFORM_HARD_CUT_SDK_VERSION = '0.9.0';
2820
+ /**
2821
+ * 历史移动端兼容平台集合。
2822
+ *
2823
+ * @remarks
2824
+ * 仅在 `sdkVersion` 缺失或 SemVer precedence 低于 `MINIAPP_PLATFORM_HARD_CUT_SDK_VERSION`,
2825
+ * 且 Manifest 完全没有 `platforms` 字段时生效,不是任何非法声明的兜底。
2826
+ */
2827
+ const MINIAPP_LEGACY_MOBILE_PLATFORM_VALUES = ['android', 'ios', 'ohos'];
2788
2828
  function isValidMiniappManifestVersion(version) {
2789
2829
  return getMiniappManifestVersionError(version) === undefined;
2790
2830
  }
2831
+ function validateMiniappPlatforms(platforms, sourceLabel = 'platforms') {
2832
+ if (!Array.isArray(platforms) || platforms.length === 0) {
2833
+ throw new Error(`${sourceLabel} 必须是非空平台数组`);
2834
+ }
2835
+ const allowedPlatforms = new Set(MINIAPP_PLATFORM_VALUES);
2836
+ const seen = new Set();
2837
+ for (const platform of platforms) {
2838
+ if (typeof platform !== 'string' || !allowedPlatforms.has(platform)) {
2839
+ throw new Error(`${sourceLabel} 包含不支持的平台:${String(platform)}`);
2840
+ }
2841
+ if (seen.has(platform)) {
2842
+ throw new Error(`${sourceLabel} 包含重复平台:${platform}`);
2843
+ }
2844
+ seen.add(platform);
2845
+ }
2846
+ return Object.freeze(MINIAPP_PLATFORM_VALUES.filter((platform) => seen.has(platform)));
2847
+ }
2848
+ const NO_MINIAPP_PLATFORMS = Object.freeze([]);
2849
+ /**
2850
+ * 解析 Manifest 平台声明,是 `0.9.0` 硬切规则的唯一实现。
2851
+ *
2852
+ * @remarks
2853
+ * 规则与后端领域层保持一致:
2854
+ * - 无 `platforms` 字段:`sdkVersion` 缺失或 SemVer precedence 低于
2855
+ * `MINIAPP_PLATFORM_HARD_CUT_SDK_VERSION` 时按历史移动端兼容;达到或高于硬切点即非法。
2856
+ * - 有 `platforms` 字段:复用 `validateMiniappPlatforms` 校验并规范化顺序;任何非法值
2857
+ * (空数组、非数组、未知值、重复值)都不回退到历史兼容,即使 `sdkVersion < 0.9.0`。
2858
+ * - 任何非法的 `sdkVersion` 都会抛出,不做字符串比较。
2859
+ * @param sdkVersion - 产物 hb-sdk 版本;历史产物可能缺失。
2860
+ * @param manifest - 待解析的 Manifest(不可信输入)。
2861
+ * @returns 冻结的平台解析结果。
2862
+ * @throws Manifest 不是对象、`sdkVersion` 不是合法 SemVer、达到硬切点仍缺失 `platforms`,
2863
+ * 或 `platforms` 声明非法时抛出。
2864
+ */
2865
+ function resolveMiniappManifestPlatforms(sdkVersion, manifest) {
2866
+ if (!isRecord$1(manifest)) {
2867
+ throw new Error('manifest 必须是 JSON 对象');
2868
+ }
2869
+ // 与后端 ResolvePlatforms 对齐:空串/纯空白按“缺失 SDK 版本”处理(历史产物),不报错。
2870
+ const trimmedSdkVersion = typeof sdkVersion === 'string' ? sdkVersion.trim() : undefined;
2871
+ const normalizedSdkVersion = trimmedSdkVersion ? validateSdkVersion(trimmedSdkVersion) : undefined;
2872
+ if (Object.prototype.hasOwnProperty.call(manifest, 'platforms')) {
2873
+ const platforms = validateMiniappPlatforms(manifest.platforms, 'manifest.platforms');
2874
+ return Object.freeze({
2875
+ declared: platforms,
2876
+ effective: platforms,
2877
+ platformsDeclared: true,
2878
+ policy: 'explicit',
2879
+ });
2880
+ }
2881
+ if (normalizedSdkVersion === undefined || semverExports.lt(normalizedSdkVersion, MINIAPP_PLATFORM_HARD_CUT_SDK_VERSION)) {
2882
+ return Object.freeze({
2883
+ declared: NO_MINIAPP_PLATFORMS,
2884
+ effective: MINIAPP_LEGACY_MOBILE_PLATFORM_VALUES,
2885
+ platformsDeclared: false,
2886
+ policy: 'legacy_mobile_default',
2887
+ });
2888
+ }
2889
+ throw new Error(`manifest.platforms 缺失:hb-sdk ${MINIAPP_PLATFORM_HARD_CUT_SDK_VERSION} 起必须显式声明非空 platforms(当前 ${normalizedSdkVersion})`);
2890
+ }
2891
+ function validateSdkVersion(version, sourceLabel = 'sdkVersion') {
2892
+ if (typeof version !== 'string' || version.trim() === '') {
2893
+ throw new Error(`${sourceLabel} 必须是合法 SemVer:${String(version)}`);
2894
+ }
2895
+ const normalized = version.trim();
2896
+ const parsed = semverExports.parse(normalized);
2897
+ if (!parsed || parsed.version !== normalized || parsed.build.length > 0) {
2898
+ throw new Error(`${sourceLabel} 必须是合法 SemVer:${normalized}`);
2899
+ }
2900
+ return normalized;
2901
+ }
2902
+ function isRecord$1(value) {
2903
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
2904
+ }
2791
2905
  function getMiniappManifestVersionError(version) {
2792
2906
  if (typeof version !== 'string' || version.trim() === '') {
2793
2907
  return `必须是合法 SemVer:${String(version)}`;
@@ -2813,8 +2927,8 @@ const MINIAPP_UPLOAD_SCOPE = 'activity';
2813
2927
  const ACTIVITY_UPLOAD_KEY_MAX_LENGTH = 64;
2814
2928
  const MINIAPP_UPLOAD_BATCH_SIZE = 50;
2815
2929
  const MINIAPP_UPLOAD_TOTAL_SIZE_LIMIT_BYTES = 100 * 1024 * 1024;
2816
- /** Phase 0 尚未冻结;当前仅作为可单点替换、可测试的保守临时上限。 */
2817
- const MINIAPP_COMPANION_UPLOAD_TEMPORARY_SIZE_LIMIT_BYTES = 2 * 1024 * 1024 * 1024;
2930
+ /** Activity 上传后端合同一致的 Companion 归档总大小上限。 */
2931
+ const MINIAPP_COMPANION_UPLOAD_TEMPORARY_SIZE_LIMIT_BYTES = 500 * 1024 * 1024;
2818
2932
  const USER_MINIPROGRAM_ACCESS_STATUS_API_PATH = '/mall/developer/user_miniprogram/access_status';
2819
2933
  const DEVELOPER_ENTITY_LIST_API_PATH = '/mall/developer/entity/list';
2820
2934
  const DEVELOPER_ENTITY_SWITCH_API_PATH = '/mall/developer/entity/switch';
@@ -2929,7 +3043,7 @@ function validateMiniappUploadSizeBudgets(items, options = {}) {
2929
3043
  const companionTotal = companionItems.reduce((sum, item) => sum + (Number.isFinite(item.size) && item.size > 0 ? item.size : 0), 0);
2930
3044
  const companionLimit = options.companionLimitBytes ?? MINIAPP_COMPANION_UPLOAD_TEMPORARY_SIZE_LIMIT_BYTES;
2931
3045
  if (companionTotal > companionLimit)
2932
- return 'Companion 归档总大小超过当前 2GiB 临时上限,请缩减归档后重新 deploy';
3046
+ return 'Companion 归档总大小超过 500MiB 上限,请缩减归档后重新 deploy';
2933
3047
  return undefined;
2934
3048
  }
2935
3049
  function shouldUploadDistFile(relativePath) {
@@ -3202,6 +3316,8 @@ exports.LIST_USER_MINIPROGRAM_API_PATH = LIST_USER_MINIPROGRAM_API_PATH;
3202
3316
  exports.LIST_USER_MINIPROGRAM_LEADERBOARD_API_PATH = LIST_USER_MINIPROGRAM_LEADERBOARD_API_PATH;
3203
3317
  exports.LIST_USER_MINIPROGRAM_VERSION_API_PATH = LIST_USER_MINIPROGRAM_VERSION_API_PATH;
3204
3318
  exports.MINIAPP_COMPANION_UPLOAD_TEMPORARY_SIZE_LIMIT_BYTES = MINIAPP_COMPANION_UPLOAD_TEMPORARY_SIZE_LIMIT_BYTES;
3319
+ exports.MINIAPP_LEGACY_MOBILE_PLATFORM_VALUES = MINIAPP_LEGACY_MOBILE_PLATFORM_VALUES;
3320
+ exports.MINIAPP_PLATFORM_HARD_CUT_SDK_VERSION = MINIAPP_PLATFORM_HARD_CUT_SDK_VERSION;
3205
3321
  exports.MINIAPP_UPLOAD_BATCH_SIZE = MINIAPP_UPLOAD_BATCH_SIZE;
3206
3322
  exports.MINIAPP_UPLOAD_SCOPE = MINIAPP_UPLOAD_SCOPE;
3207
3323
  exports.MINIAPP_UPLOAD_TOTAL_SIZE_LIMIT_BYTES = MINIAPP_UPLOAD_TOTAL_SIZE_LIMIT_BYTES;
@@ -3222,8 +3338,10 @@ exports.getMiniProgramUploadAlias = getMiniProgramUploadAlias;
3222
3338
  exports.getMiniappUploadKey = getMiniappUploadKey;
3223
3339
  exports.isValidVersion = isValidMiniappManifestVersion;
3224
3340
  exports.normalizeRelativePath = normalizeRelativePath;
3341
+ exports.parseMiniappBindAppIds = parseMiniappBindAppIds;
3225
3342
  exports.prepareMiniappArtifactFiles = prepareMiniappArtifactFiles;
3226
3343
  exports.relativePathContainsNodeModulesSegment = relativePathContainsNodeModulesSegment;
3344
+ exports.resolveMiniappManifestPlatforms = resolveMiniappManifestPlatforms;
3227
3345
  exports.resolveMiniappUploadSessionFiles = resolveMiniappUploadSessionFiles;
3228
3346
  exports.shouldUploadDistFile = shouldUploadDistFile;
3229
3347
  exports.validateMiniappCompanionFileReceipts = validateMiniappCompanionFileReceipts;
@@ -2783,9 +2783,123 @@ function requireSemver () {
2783
2783
 
2784
2784
  var semverExports = requireSemver();
2785
2785
 
2786
+ const MINIAPP_BIND_APP_IDS_MAX_COUNT = 20;
2787
+ function parseMiniappBindAppIds(value, options = {}) {
2788
+ const sourceLabel = options.sourceLabel ?? 'package.json#heybox.bindAppIds';
2789
+ if (value === undefined)
2790
+ return Object.freeze([]);
2791
+ if (!Array.isArray(value))
2792
+ throw new Error(`${sourceLabel} 必须是字符串数组`);
2793
+ if (value.length > MINIAPP_BIND_APP_IDS_MAX_COUNT) {
2794
+ throw new Error(`${sourceLabel} 最多包含 ${MINIAPP_BIND_APP_IDS_MAX_COUNT} 个游戏 appid`);
2795
+ }
2796
+ const seen = new Set();
2797
+ const appIds = [];
2798
+ for (const item of value) {
2799
+ if (typeof item !== 'string' || !/^[1-9]\d*$/.test(item)) {
2800
+ throw new Error(`${sourceLabel} 包含非法游戏 appid:${String(item)}`);
2801
+ }
2802
+ const numeric = Number(item);
2803
+ if (!Number.isSafeInteger(numeric) || numeric > 2_147_483_647) {
2804
+ throw new Error(`${sourceLabel} 包含超出正 int32 范围的游戏 appid:${item}`);
2805
+ }
2806
+ if (seen.has(item))
2807
+ throw new Error(`${sourceLabel} 包含重复游戏 appid:${item}`);
2808
+ seen.add(item);
2809
+ appIds.push(item);
2810
+ }
2811
+ appIds.sort((left, right) => Number(left) - Number(right));
2812
+ return Object.freeze(appIds);
2813
+ }
2814
+
2815
+ const MINIAPP_PLATFORM_VALUES = ['android', 'ios', 'ohos', 'windows', 'macos', 'linux'];
2816
+ /** 平台声明硬切点:产物 hb-sdk 版本达到该值时,必须显式声明非空 `platforms`。 */
2817
+ const MINIAPP_PLATFORM_HARD_CUT_SDK_VERSION = '0.9.0';
2818
+ /**
2819
+ * 历史移动端兼容平台集合。
2820
+ *
2821
+ * @remarks
2822
+ * 仅在 `sdkVersion` 缺失或 SemVer precedence 低于 `MINIAPP_PLATFORM_HARD_CUT_SDK_VERSION`,
2823
+ * 且 Manifest 完全没有 `platforms` 字段时生效,不是任何非法声明的兜底。
2824
+ */
2825
+ const MINIAPP_LEGACY_MOBILE_PLATFORM_VALUES = ['android', 'ios', 'ohos'];
2786
2826
  function isValidMiniappManifestVersion(version) {
2787
2827
  return getMiniappManifestVersionError(version) === undefined;
2788
2828
  }
2829
+ function validateMiniappPlatforms(platforms, sourceLabel = 'platforms') {
2830
+ if (!Array.isArray(platforms) || platforms.length === 0) {
2831
+ throw new Error(`${sourceLabel} 必须是非空平台数组`);
2832
+ }
2833
+ const allowedPlatforms = new Set(MINIAPP_PLATFORM_VALUES);
2834
+ const seen = new Set();
2835
+ for (const platform of platforms) {
2836
+ if (typeof platform !== 'string' || !allowedPlatforms.has(platform)) {
2837
+ throw new Error(`${sourceLabel} 包含不支持的平台:${String(platform)}`);
2838
+ }
2839
+ if (seen.has(platform)) {
2840
+ throw new Error(`${sourceLabel} 包含重复平台:${platform}`);
2841
+ }
2842
+ seen.add(platform);
2843
+ }
2844
+ return Object.freeze(MINIAPP_PLATFORM_VALUES.filter((platform) => seen.has(platform)));
2845
+ }
2846
+ const NO_MINIAPP_PLATFORMS = Object.freeze([]);
2847
+ /**
2848
+ * 解析 Manifest 平台声明,是 `0.9.0` 硬切规则的唯一实现。
2849
+ *
2850
+ * @remarks
2851
+ * 规则与后端领域层保持一致:
2852
+ * - 无 `platforms` 字段:`sdkVersion` 缺失或 SemVer precedence 低于
2853
+ * `MINIAPP_PLATFORM_HARD_CUT_SDK_VERSION` 时按历史移动端兼容;达到或高于硬切点即非法。
2854
+ * - 有 `platforms` 字段:复用 `validateMiniappPlatforms` 校验并规范化顺序;任何非法值
2855
+ * (空数组、非数组、未知值、重复值)都不回退到历史兼容,即使 `sdkVersion < 0.9.0`。
2856
+ * - 任何非法的 `sdkVersion` 都会抛出,不做字符串比较。
2857
+ * @param sdkVersion - 产物 hb-sdk 版本;历史产物可能缺失。
2858
+ * @param manifest - 待解析的 Manifest(不可信输入)。
2859
+ * @returns 冻结的平台解析结果。
2860
+ * @throws Manifest 不是对象、`sdkVersion` 不是合法 SemVer、达到硬切点仍缺失 `platforms`,
2861
+ * 或 `platforms` 声明非法时抛出。
2862
+ */
2863
+ function resolveMiniappManifestPlatforms(sdkVersion, manifest) {
2864
+ if (!isRecord$1(manifest)) {
2865
+ throw new Error('manifest 必须是 JSON 对象');
2866
+ }
2867
+ // 与后端 ResolvePlatforms 对齐:空串/纯空白按“缺失 SDK 版本”处理(历史产物),不报错。
2868
+ const trimmedSdkVersion = typeof sdkVersion === 'string' ? sdkVersion.trim() : undefined;
2869
+ const normalizedSdkVersion = trimmedSdkVersion ? validateSdkVersion(trimmedSdkVersion) : undefined;
2870
+ if (Object.prototype.hasOwnProperty.call(manifest, 'platforms')) {
2871
+ const platforms = validateMiniappPlatforms(manifest.platforms, 'manifest.platforms');
2872
+ return Object.freeze({
2873
+ declared: platforms,
2874
+ effective: platforms,
2875
+ platformsDeclared: true,
2876
+ policy: 'explicit',
2877
+ });
2878
+ }
2879
+ if (normalizedSdkVersion === undefined || semverExports.lt(normalizedSdkVersion, MINIAPP_PLATFORM_HARD_CUT_SDK_VERSION)) {
2880
+ return Object.freeze({
2881
+ declared: NO_MINIAPP_PLATFORMS,
2882
+ effective: MINIAPP_LEGACY_MOBILE_PLATFORM_VALUES,
2883
+ platformsDeclared: false,
2884
+ policy: 'legacy_mobile_default',
2885
+ });
2886
+ }
2887
+ throw new Error(`manifest.platforms 缺失:hb-sdk ${MINIAPP_PLATFORM_HARD_CUT_SDK_VERSION} 起必须显式声明非空 platforms(当前 ${normalizedSdkVersion})`);
2888
+ }
2889
+ function validateSdkVersion(version, sourceLabel = 'sdkVersion') {
2890
+ if (typeof version !== 'string' || version.trim() === '') {
2891
+ throw new Error(`${sourceLabel} 必须是合法 SemVer:${String(version)}`);
2892
+ }
2893
+ const normalized = version.trim();
2894
+ const parsed = semverExports.parse(normalized);
2895
+ if (!parsed || parsed.version !== normalized || parsed.build.length > 0) {
2896
+ throw new Error(`${sourceLabel} 必须是合法 SemVer:${normalized}`);
2897
+ }
2898
+ return normalized;
2899
+ }
2900
+ function isRecord$1(value) {
2901
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
2902
+ }
2789
2903
  function getMiniappManifestVersionError(version) {
2790
2904
  if (typeof version !== 'string' || version.trim() === '') {
2791
2905
  return `必须是合法 SemVer:${String(version)}`;
@@ -2811,8 +2925,8 @@ const MINIAPP_UPLOAD_SCOPE = 'activity';
2811
2925
  const ACTIVITY_UPLOAD_KEY_MAX_LENGTH = 64;
2812
2926
  const MINIAPP_UPLOAD_BATCH_SIZE = 50;
2813
2927
  const MINIAPP_UPLOAD_TOTAL_SIZE_LIMIT_BYTES = 100 * 1024 * 1024;
2814
- /** Phase 0 尚未冻结;当前仅作为可单点替换、可测试的保守临时上限。 */
2815
- const MINIAPP_COMPANION_UPLOAD_TEMPORARY_SIZE_LIMIT_BYTES = 2 * 1024 * 1024 * 1024;
2928
+ /** Activity 上传后端合同一致的 Companion 归档总大小上限。 */
2929
+ const MINIAPP_COMPANION_UPLOAD_TEMPORARY_SIZE_LIMIT_BYTES = 500 * 1024 * 1024;
2816
2930
  const USER_MINIPROGRAM_ACCESS_STATUS_API_PATH = '/mall/developer/user_miniprogram/access_status';
2817
2931
  const DEVELOPER_ENTITY_LIST_API_PATH = '/mall/developer/entity/list';
2818
2932
  const DEVELOPER_ENTITY_SWITCH_API_PATH = '/mall/developer/entity/switch';
@@ -2927,7 +3041,7 @@ function validateMiniappUploadSizeBudgets(items, options = {}) {
2927
3041
  const companionTotal = companionItems.reduce((sum, item) => sum + (Number.isFinite(item.size) && item.size > 0 ? item.size : 0), 0);
2928
3042
  const companionLimit = options.companionLimitBytes ?? MINIAPP_COMPANION_UPLOAD_TEMPORARY_SIZE_LIMIT_BYTES;
2929
3043
  if (companionTotal > companionLimit)
2930
- return 'Companion 归档总大小超过当前 2GiB 临时上限,请缩减归档后重新 deploy';
3044
+ return 'Companion 归档总大小超过 500MiB 上限,请缩减归档后重新 deploy';
2931
3045
  return undefined;
2932
3046
  }
2933
3047
  function shouldUploadDistFile(relativePath) {
@@ -3187,4 +3301,4 @@ function compareBytes(left, right) {
3187
3301
  return left.length - right.length;
3188
3302
  }
3189
3303
 
3190
- export { ACTIVITY_UPLOAD_KEY_MAX_LENGTH, CREATE_USER_MINIPROGRAM_API_PATH, CREATE_USER_MINIPROGRAM_LEADERBOARD_API_PATH, CREATE_USER_MINIPROGRAM_LOCAL_DEV_LAUNCH_TOKEN_API_PATH, DELETE_USER_MINIPROGRAM_LEADERBOARD_API_PATH, DETAIL_USER_MINIPROGRAM_API_PATH, DETAIL_USER_MINIPROGRAM_LEADERBOARD_API_PATH, DEVELOPER_ENTITY_LIST_API_PATH, DEVELOPER_ENTITY_SWITCH_API_PATH, LIST_USER_MINIPROGRAM_API_PATH, LIST_USER_MINIPROGRAM_LEADERBOARD_API_PATH, LIST_USER_MINIPROGRAM_VERSION_API_PATH, MINIAPP_COMPANION_UPLOAD_TEMPORARY_SIZE_LIMIT_BYTES, MINIAPP_UPLOAD_BATCH_SIZE, MINIAPP_UPLOAD_SCOPE, MINIAPP_UPLOAD_TOTAL_SIZE_LIMIT_BYTES, PRECHECK_USER_MINIPROGRAM_VERSION_API_PATH, RELEASE_USER_MINIPROGRAM_VERSION_API_PATH, REOPEN_USER_MINIPROGRAM_API_PATH, SUBMIT_USER_MINIPROGRAM_AUDIT_API_PATH, TAKE_DOWN_USER_MINIPROGRAM_API_PATH, UPDATE_SQUARE_DISPLAY_API_PATH, UPDATE_USER_MINIPROGRAM_PREVIEW_ALLOWLIST_API_PATH, USER_MINIPROGRAM_ACCESS_STATUS_API_PATH, USER_MINIPROGRAM_PREVIEW_ALLOWLIST_API_PATH, USER_MINIPROGRAM_VERSION_PREVIEW_INFO_API_PATH, WITHDRAW_USER_MINIPROGRAM_VERSION_API_PATH, createMiniappArtifactFileHeader, createMiniappArtifactSignatureHeader, getMiniProgramUploadAlias, getMiniappUploadKey, isValidMiniappManifestVersion as isValidVersion, normalizeRelativePath, prepareMiniappArtifactFiles, relativePathContainsNodeModulesSegment, resolveMiniappUploadSessionFiles, shouldUploadDistFile, validateMiniappCompanionFileReceipts, validateMiniappUploadPathLengths, validateMiniappUploadSizeBudgets, validateUploadPaths, validateUploadTotalSize };
3304
+ export { ACTIVITY_UPLOAD_KEY_MAX_LENGTH, CREATE_USER_MINIPROGRAM_API_PATH, CREATE_USER_MINIPROGRAM_LEADERBOARD_API_PATH, CREATE_USER_MINIPROGRAM_LOCAL_DEV_LAUNCH_TOKEN_API_PATH, DELETE_USER_MINIPROGRAM_LEADERBOARD_API_PATH, DETAIL_USER_MINIPROGRAM_API_PATH, DETAIL_USER_MINIPROGRAM_LEADERBOARD_API_PATH, DEVELOPER_ENTITY_LIST_API_PATH, DEVELOPER_ENTITY_SWITCH_API_PATH, LIST_USER_MINIPROGRAM_API_PATH, LIST_USER_MINIPROGRAM_LEADERBOARD_API_PATH, LIST_USER_MINIPROGRAM_VERSION_API_PATH, MINIAPP_COMPANION_UPLOAD_TEMPORARY_SIZE_LIMIT_BYTES, MINIAPP_LEGACY_MOBILE_PLATFORM_VALUES, MINIAPP_PLATFORM_HARD_CUT_SDK_VERSION, MINIAPP_UPLOAD_BATCH_SIZE, MINIAPP_UPLOAD_SCOPE, MINIAPP_UPLOAD_TOTAL_SIZE_LIMIT_BYTES, PRECHECK_USER_MINIPROGRAM_VERSION_API_PATH, RELEASE_USER_MINIPROGRAM_VERSION_API_PATH, REOPEN_USER_MINIPROGRAM_API_PATH, SUBMIT_USER_MINIPROGRAM_AUDIT_API_PATH, TAKE_DOWN_USER_MINIPROGRAM_API_PATH, UPDATE_SQUARE_DISPLAY_API_PATH, UPDATE_USER_MINIPROGRAM_PREVIEW_ALLOWLIST_API_PATH, USER_MINIPROGRAM_ACCESS_STATUS_API_PATH, USER_MINIPROGRAM_PREVIEW_ALLOWLIST_API_PATH, USER_MINIPROGRAM_VERSION_PREVIEW_INFO_API_PATH, WITHDRAW_USER_MINIPROGRAM_VERSION_API_PATH, createMiniappArtifactFileHeader, createMiniappArtifactSignatureHeader, getMiniProgramUploadAlias, getMiniappUploadKey, isValidMiniappManifestVersion as isValidVersion, normalizeRelativePath, parseMiniappBindAppIds, prepareMiniappArtifactFiles, relativePathContainsNodeModulesSegment, resolveMiniappManifestPlatforms, resolveMiniappUploadSessionFiles, shouldUploadDistFile, validateMiniappCompanionFileReceipts, validateMiniappUploadPathLengths, validateMiniappUploadSizeBudgets, validateUploadPaths, validateUploadTotalSize };
@@ -331,32 +331,32 @@ const MINI_PROGRAM_PROTOCOL_CAPABILITIES = [
331
331
  ];
332
332
 
333
333
  function isMiniProgramBridgeMessage(value) {
334
- if (!isRecord$1(value))
334
+ if (!isRecord$2(value))
335
335
  return false;
336
- if (value.namespace !== MINI_PROGRAM_MESSAGE_NAMESPACE || (value.version !== 1 && value.version !== 2) || !isNonEmptyString(value.nonce)) {
336
+ if (value.namespace !== MINI_PROGRAM_MESSAGE_NAMESPACE || (value.version !== 1 && value.version !== 2) || !isNonEmptyString$1(value.nonce)) {
337
337
  return false;
338
338
  }
339
339
  if (value.type === 'handshake') {
340
- return isNonEmptyString(value.id) && value.method === SDK_HANDSHAKE_METHOD && value.error === undefined && isSDKHandshakePayload(value.payload);
340
+ return isNonEmptyString$1(value.id) && value.method === SDK_HANDSHAKE_METHOD && value.error === undefined && isSDKHandshakePayload(value.payload);
341
341
  }
342
342
  if (value.type === 'request') {
343
- return isNonEmptyString(value.id) && isNonEmptyString(value.method) && value.error === undefined;
343
+ return isNonEmptyString$1(value.id) && isNonEmptyString$1(value.method) && value.error === undefined;
344
344
  }
345
345
  if (value.type === 'response') {
346
- return (isNonEmptyString(value.id) &&
347
- (value.method === undefined || isNonEmptyString(value.method)) &&
346
+ return (isNonEmptyString$1(value.id) &&
347
+ (value.method === undefined || isNonEmptyString$1(value.method)) &&
348
348
  (value.error === undefined || isBridgeError(value.error)));
349
349
  }
350
350
  if (value.type === 'event') {
351
- if (!isNonEmptyString(value.method) || value.error !== undefined)
351
+ if (!isNonEmptyString$1(value.method) || value.error !== undefined)
352
352
  return false;
353
353
  if (value.method === MINI_PROGRAM_OPERATION_PROGRESS_METHOD) {
354
- return value.version === 2 && isNonEmptyString(value.id) && isMiniProgramOperationProgressPayload(value.payload);
354
+ return value.version === 2 && isNonEmptyString$1(value.id) && isMiniProgramOperationProgressPayload(value.payload);
355
355
  }
356
- return value.id === undefined || isNonEmptyString(value.id);
356
+ return value.id === undefined || isNonEmptyString$1(value.id);
357
357
  }
358
358
  if (value.type === 'cancel') {
359
- return (value.version === 2 && isNonEmptyString(value.id) && value.method === undefined && value.payload === undefined && value.error === undefined);
359
+ return (value.version === 2 && isNonEmptyString$1(value.id) && value.method === undefined && value.payload === undefined && value.error === undefined);
360
360
  }
361
361
  return false;
362
362
  }
@@ -369,40 +369,40 @@ function isMiniProgramRelativePath(value) {
369
369
  return value.split('/').every((segment) => Boolean(segment) && segment !== '.' && segment !== '..');
370
370
  }
371
371
  function isMiniProgramPathRootRef(value) {
372
- if (!isRecord$1(value))
372
+ if (!isRecord$2(value))
373
373
  return false;
374
374
  if (value.kind === 'sandbox')
375
375
  return hasOnlyKeys(value, ['kind']);
376
- return value.kind === 'directory' && isNonEmptyString(value.handleId) && hasOnlyKeys(value, ['kind', 'handleId']);
376
+ return value.kind === 'directory' && isNonEmptyString$1(value.handleId) && hasOnlyKeys(value, ['kind', 'handleId']);
377
377
  }
378
378
  function isMiniProgramFileRef(value) {
379
- if (!isRecord$1(value) || value.kind !== 'file')
379
+ if (!isRecord$2(value) || value.kind !== 'file')
380
380
  return false;
381
- if (isNonEmptyString(value.handleId)) {
381
+ if (isNonEmptyString$1(value.handleId)) {
382
382
  return hasOnlyKeys(value, ['kind', 'handleId']);
383
383
  }
384
384
  return (isMiniProgramPathRootRef(value.root) && isMiniProgramRelativePath(value.relativePath) && hasOnlyKeys(value, ['kind', 'root', 'relativePath']));
385
385
  }
386
386
  function isMiniProgramDirectoryRef(value) {
387
- if (!isRecord$1(value) || value.kind !== 'directory')
387
+ if (!isRecord$2(value) || value.kind !== 'directory')
388
388
  return false;
389
- if (isNonEmptyString(value.handleId)) {
389
+ if (isNonEmptyString$1(value.handleId)) {
390
390
  return hasOnlyKeys(value, ['kind', 'handleId']);
391
391
  }
392
392
  return (isMiniProgramPathRootRef(value.root) && (value.relativePath === '.' || isMiniProgramRelativePath(value.relativePath)) && hasOnlyKeys(value, ['kind', 'root', 'relativePath']));
393
393
  }
394
394
  function isMiniProgramFileDescriptor(value) {
395
- return (isRecord$1(value) &&
395
+ return (isRecord$2(value) &&
396
396
  value.kind === 'file' &&
397
- isNonEmptyString(value.name) &&
397
+ isNonEmptyString$1(value.name) &&
398
398
  isFileMode(value.mode) &&
399
399
  isMiniProgramFileRef(value.ref) &&
400
400
  hasOnlyKeys(value, ['kind', 'name', 'mode', 'ref']));
401
401
  }
402
402
  function isMiniProgramDirectoryDescriptor(value) {
403
- return (isRecord$1(value) &&
403
+ return (isRecord$2(value) &&
404
404
  value.kind === 'directory' &&
405
- isNonEmptyString(value.name) &&
405
+ isNonEmptyString$1(value.name) &&
406
406
  isFileMode(value.mode) &&
407
407
  isMiniProgramDirectoryRef(value.ref) &&
408
408
  hasOnlyKeys(value, ['kind', 'name', 'mode', 'ref']));
@@ -414,7 +414,7 @@ function isMiniProgramByteArray(value) {
414
414
  return value instanceof Uint8Array && value.buffer instanceof ArrayBuffer;
415
415
  }
416
416
  function isMiniProgramFileStat(value) {
417
- return (isRecord$1(value) &&
417
+ return (isRecord$2(value) &&
418
418
  value.kind === 'file' &&
419
419
  isNonNegativeSafeInteger(value.size) &&
420
420
  (value.modifiedAt === undefined || isNonNegativeFiniteNumber(value.modifiedAt)) &&
@@ -422,7 +422,7 @@ function isMiniProgramFileStat(value) {
422
422
  hasOnlyKeys(value, ['kind', 'size', 'modifiedAt', 'createdAt']));
423
423
  }
424
424
  function isMiniProgramDownloadProgressPayload(value) {
425
- if (!isRecord$1(value) ||
425
+ if (!isRecord$2(value) ||
426
426
  !isNonNegativeSafeInteger(value.loaded) ||
427
427
  typeof value.lengthComputable !== 'boolean' ||
428
428
  !hasOnlyKeys(value, ['loaded', 'total', 'lengthComputable'])) {
@@ -433,7 +433,7 @@ function isMiniProgramDownloadProgressPayload(value) {
433
433
  return isNonNegativeSafeInteger(value.total) && value.loaded <= value.total;
434
434
  }
435
435
  function isMiniProgramCompanionPrepareProgress(value) {
436
- if (!isRecord$1(value))
436
+ if (!isRecord$2(value))
437
437
  return false;
438
438
  if (value.phase === 'downloading') {
439
439
  return (isNonNegativeSafeInteger(value.loaded) &&
@@ -451,10 +451,10 @@ function isMiniProgramOperationProgressPayload(value) {
451
451
  return isMiniProgramDownloadProgressPayload(value) || isMiniProgramCompanionPrepareProgress(value);
452
452
  }
453
453
  function isSDKHandshakePayload(value) {
454
- return isRecord$1(value) && isNonEmptyString(value.href) && typeof value.userAgent === 'string' && isNonEmptyString(value.sdkVersion);
454
+ return isRecord$2(value) && isNonEmptyString$1(value.href) && typeof value.userAgent === 'string' && isNonEmptyString$1(value.sdkVersion);
455
455
  }
456
456
  function isBridgeError(value) {
457
- return isRecord$1(value) && isNonEmptyString(value.code) && typeof value.message === 'string';
457
+ return isRecord$2(value) && isNonEmptyString$1(value.code) && typeof value.message === 'string';
458
458
  }
459
459
  function isFileMode(value) {
460
460
  return value === 'read' || value === 'readwrite';
@@ -465,14 +465,14 @@ function isNonNegativeSafeInteger(value) {
465
465
  function isNonNegativeFiniteNumber(value) {
466
466
  return typeof value === 'number' && Number.isFinite(value) && value >= 0;
467
467
  }
468
- function isNonEmptyString(value) {
468
+ function isNonEmptyString$1(value) {
469
469
  return typeof value === 'string' && value.length > 0;
470
470
  }
471
471
  function hasOnlyKeys(value, allowedKeys) {
472
472
  const allowed = new Set(allowedKeys);
473
473
  return Object.keys(value).every((key) => allowed.has(key));
474
474
  }
475
- function isRecord$1(value) {
475
+ function isRecord$2(value) {
476
476
  return typeof value === 'object' && value !== null && !Array.isArray(value);
477
477
  }
478
478
 
@@ -329,32 +329,32 @@ const MINI_PROGRAM_PROTOCOL_CAPABILITIES = [
329
329
  ];
330
330
 
331
331
  function isMiniProgramBridgeMessage(value) {
332
- if (!isRecord$1(value))
332
+ if (!isRecord$2(value))
333
333
  return false;
334
- if (value.namespace !== MINI_PROGRAM_MESSAGE_NAMESPACE || (value.version !== 1 && value.version !== 2) || !isNonEmptyString(value.nonce)) {
334
+ if (value.namespace !== MINI_PROGRAM_MESSAGE_NAMESPACE || (value.version !== 1 && value.version !== 2) || !isNonEmptyString$1(value.nonce)) {
335
335
  return false;
336
336
  }
337
337
  if (value.type === 'handshake') {
338
- return isNonEmptyString(value.id) && value.method === SDK_HANDSHAKE_METHOD && value.error === undefined && isSDKHandshakePayload(value.payload);
338
+ return isNonEmptyString$1(value.id) && value.method === SDK_HANDSHAKE_METHOD && value.error === undefined && isSDKHandshakePayload(value.payload);
339
339
  }
340
340
  if (value.type === 'request') {
341
- return isNonEmptyString(value.id) && isNonEmptyString(value.method) && value.error === undefined;
341
+ return isNonEmptyString$1(value.id) && isNonEmptyString$1(value.method) && value.error === undefined;
342
342
  }
343
343
  if (value.type === 'response') {
344
- return (isNonEmptyString(value.id) &&
345
- (value.method === undefined || isNonEmptyString(value.method)) &&
344
+ return (isNonEmptyString$1(value.id) &&
345
+ (value.method === undefined || isNonEmptyString$1(value.method)) &&
346
346
  (value.error === undefined || isBridgeError(value.error)));
347
347
  }
348
348
  if (value.type === 'event') {
349
- if (!isNonEmptyString(value.method) || value.error !== undefined)
349
+ if (!isNonEmptyString$1(value.method) || value.error !== undefined)
350
350
  return false;
351
351
  if (value.method === MINI_PROGRAM_OPERATION_PROGRESS_METHOD) {
352
- return value.version === 2 && isNonEmptyString(value.id) && isMiniProgramOperationProgressPayload(value.payload);
352
+ return value.version === 2 && isNonEmptyString$1(value.id) && isMiniProgramOperationProgressPayload(value.payload);
353
353
  }
354
- return value.id === undefined || isNonEmptyString(value.id);
354
+ return value.id === undefined || isNonEmptyString$1(value.id);
355
355
  }
356
356
  if (value.type === 'cancel') {
357
- return (value.version === 2 && isNonEmptyString(value.id) && value.method === undefined && value.payload === undefined && value.error === undefined);
357
+ return (value.version === 2 && isNonEmptyString$1(value.id) && value.method === undefined && value.payload === undefined && value.error === undefined);
358
358
  }
359
359
  return false;
360
360
  }
@@ -367,40 +367,40 @@ function isMiniProgramRelativePath(value) {
367
367
  return value.split('/').every((segment) => Boolean(segment) && segment !== '.' && segment !== '..');
368
368
  }
369
369
  function isMiniProgramPathRootRef(value) {
370
- if (!isRecord$1(value))
370
+ if (!isRecord$2(value))
371
371
  return false;
372
372
  if (value.kind === 'sandbox')
373
373
  return hasOnlyKeys(value, ['kind']);
374
- return value.kind === 'directory' && isNonEmptyString(value.handleId) && hasOnlyKeys(value, ['kind', 'handleId']);
374
+ return value.kind === 'directory' && isNonEmptyString$1(value.handleId) && hasOnlyKeys(value, ['kind', 'handleId']);
375
375
  }
376
376
  function isMiniProgramFileRef(value) {
377
- if (!isRecord$1(value) || value.kind !== 'file')
377
+ if (!isRecord$2(value) || value.kind !== 'file')
378
378
  return false;
379
- if (isNonEmptyString(value.handleId)) {
379
+ if (isNonEmptyString$1(value.handleId)) {
380
380
  return hasOnlyKeys(value, ['kind', 'handleId']);
381
381
  }
382
382
  return (isMiniProgramPathRootRef(value.root) && isMiniProgramRelativePath(value.relativePath) && hasOnlyKeys(value, ['kind', 'root', 'relativePath']));
383
383
  }
384
384
  function isMiniProgramDirectoryRef(value) {
385
- if (!isRecord$1(value) || value.kind !== 'directory')
385
+ if (!isRecord$2(value) || value.kind !== 'directory')
386
386
  return false;
387
- if (isNonEmptyString(value.handleId)) {
387
+ if (isNonEmptyString$1(value.handleId)) {
388
388
  return hasOnlyKeys(value, ['kind', 'handleId']);
389
389
  }
390
390
  return (isMiniProgramPathRootRef(value.root) && (value.relativePath === '.' || isMiniProgramRelativePath(value.relativePath)) && hasOnlyKeys(value, ['kind', 'root', 'relativePath']));
391
391
  }
392
392
  function isMiniProgramFileDescriptor(value) {
393
- return (isRecord$1(value) &&
393
+ return (isRecord$2(value) &&
394
394
  value.kind === 'file' &&
395
- isNonEmptyString(value.name) &&
395
+ isNonEmptyString$1(value.name) &&
396
396
  isFileMode(value.mode) &&
397
397
  isMiniProgramFileRef(value.ref) &&
398
398
  hasOnlyKeys(value, ['kind', 'name', 'mode', 'ref']));
399
399
  }
400
400
  function isMiniProgramDirectoryDescriptor(value) {
401
- return (isRecord$1(value) &&
401
+ return (isRecord$2(value) &&
402
402
  value.kind === 'directory' &&
403
- isNonEmptyString(value.name) &&
403
+ isNonEmptyString$1(value.name) &&
404
404
  isFileMode(value.mode) &&
405
405
  isMiniProgramDirectoryRef(value.ref) &&
406
406
  hasOnlyKeys(value, ['kind', 'name', 'mode', 'ref']));
@@ -412,7 +412,7 @@ function isMiniProgramByteArray(value) {
412
412
  return value instanceof Uint8Array && value.buffer instanceof ArrayBuffer;
413
413
  }
414
414
  function isMiniProgramFileStat(value) {
415
- return (isRecord$1(value) &&
415
+ return (isRecord$2(value) &&
416
416
  value.kind === 'file' &&
417
417
  isNonNegativeSafeInteger(value.size) &&
418
418
  (value.modifiedAt === undefined || isNonNegativeFiniteNumber(value.modifiedAt)) &&
@@ -420,7 +420,7 @@ function isMiniProgramFileStat(value) {
420
420
  hasOnlyKeys(value, ['kind', 'size', 'modifiedAt', 'createdAt']));
421
421
  }
422
422
  function isMiniProgramDownloadProgressPayload(value) {
423
- if (!isRecord$1(value) ||
423
+ if (!isRecord$2(value) ||
424
424
  !isNonNegativeSafeInteger(value.loaded) ||
425
425
  typeof value.lengthComputable !== 'boolean' ||
426
426
  !hasOnlyKeys(value, ['loaded', 'total', 'lengthComputable'])) {
@@ -431,7 +431,7 @@ function isMiniProgramDownloadProgressPayload(value) {
431
431
  return isNonNegativeSafeInteger(value.total) && value.loaded <= value.total;
432
432
  }
433
433
  function isMiniProgramCompanionPrepareProgress(value) {
434
- if (!isRecord$1(value))
434
+ if (!isRecord$2(value))
435
435
  return false;
436
436
  if (value.phase === 'downloading') {
437
437
  return (isNonNegativeSafeInteger(value.loaded) &&
@@ -449,10 +449,10 @@ function isMiniProgramOperationProgressPayload(value) {
449
449
  return isMiniProgramDownloadProgressPayload(value) || isMiniProgramCompanionPrepareProgress(value);
450
450
  }
451
451
  function isSDKHandshakePayload(value) {
452
- return isRecord$1(value) && isNonEmptyString(value.href) && typeof value.userAgent === 'string' && isNonEmptyString(value.sdkVersion);
452
+ return isRecord$2(value) && isNonEmptyString$1(value.href) && typeof value.userAgent === 'string' && isNonEmptyString$1(value.sdkVersion);
453
453
  }
454
454
  function isBridgeError(value) {
455
- return isRecord$1(value) && isNonEmptyString(value.code) && typeof value.message === 'string';
455
+ return isRecord$2(value) && isNonEmptyString$1(value.code) && typeof value.message === 'string';
456
456
  }
457
457
  function isFileMode(value) {
458
458
  return value === 'read' || value === 'readwrite';
@@ -463,14 +463,14 @@ function isNonNegativeSafeInteger(value) {
463
463
  function isNonNegativeFiniteNumber(value) {
464
464
  return typeof value === 'number' && Number.isFinite(value) && value >= 0;
465
465
  }
466
- function isNonEmptyString(value) {
466
+ function isNonEmptyString$1(value) {
467
467
  return typeof value === 'string' && value.length > 0;
468
468
  }
469
469
  function hasOnlyKeys(value, allowedKeys) {
470
470
  const allowed = new Set(allowedKeys);
471
471
  return Object.keys(value).every((key) => allowed.has(key));
472
472
  }
473
- function isRecord$1(value) {
473
+ function isRecord$2(value) {
474
474
  return typeof value === 'object' && value !== null && !Array.isArray(value);
475
475
  }
476
476