@heybox/hb-sdk 0.8.1-alpha.8 → 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.
- package/CHANGELOG.md +97 -1
- package/README.md +64 -18
- package/dist/cli-chunks/{build-BYWPo2MY.cjs → build-DPe1Ycjd.cjs} +21 -7
- package/dist/cli-chunks/{context-B4tBsR6l.cjs → context-BSUhAv3Z.cjs} +2 -2
- package/dist/cli-chunks/{create-Dct-INxs.cjs → create-CaiKrGnb.cjs} +2 -1
- package/dist/cli-chunks/{dev-6N5ruKiC.cjs → dev-BG1o8Q-0.cjs} +45 -12
- package/dist/cli-chunks/doctor-DutO2P5H.cjs +195 -0
- package/dist/cli-chunks/{index-Cl5cfUqJ.cjs → index-Bur0U2z1.cjs} +2 -2
- package/dist/cli-chunks/{index-Bc4AXYHM.cjs → index-CKIyipP9.cjs} +77 -21
- package/dist/cli-chunks/{index.esm-DhXN7XjE.cjs → index.esm-BPlpP-O0.cjs} +8 -8
- package/dist/cli-chunks/{login-CTZgu8Q-.cjs → login-C1JlLEza.cjs} +2 -2
- package/dist/cli-chunks/{project-vite--h2M6eBb.cjs → project-vite-Bd0WzAqQ.cjs} +1 -1
- package/dist/cli-chunks/{remote-0hw42fDG.cjs → remote-DTFEf3Dj.cjs} +74 -10
- package/dist/cli-chunks/{runtime-permission-env-Bvggu6mn.cjs → runtime-permission-env-C2S34ldj.cjs} +145 -4
- package/dist/cli-chunks/{session-5fnHlEGO.cjs → session-zXVkHuhY.cjs} +1 -1
- package/dist/cli-chunks/{skill-DrFEqmdD.cjs → skill-CCB3DyXk.cjs} +3 -2
- package/dist/cli-chunks/{version-CccOA4so.cjs → version-0qwlEyZC.cjs} +1 -1
- package/dist/cli.cjs +2 -1
- package/dist/devtools/browser-dev-host/assets/browser-dev-host-pUcws1MK.js +101 -0
- package/dist/devtools/browser-dev-host/assets/{desktop-app-launch-DnPRjCa3.js → desktop-app-launch-DOfl5YvO.js} +3 -3
- package/dist/devtools/browser-dev-host/assets/{index-8LTH05np.js → index-CFr28-0O.js} +4 -4
- package/dist/devtools/browser-dev-host/assets/{index-D-aNERAr.css → index-DXd5IZBz.css} +1 -1
- package/dist/devtools/browser-dev-host/index.html +3 -3
- package/dist/index.cjs.js +24 -24
- package/dist/index.esm.js +24 -24
- package/dist/miniapp-publish.cjs.js +121 -3
- package/dist/miniapp-publish.esm.js +118 -4
- package/dist/protocol.cjs.js +27 -27
- package/dist/protocol.esm.js +27 -27
- package/dist/vite.cjs.js +179 -17
- package/dist/vite.esm.js +179 -18
- package/docs/device-logs.md +36 -0
- package/docs/runtime-host-migration.md +120 -0
- package/package.json +9 -7
- package/skill/SKILL.md +25 -20
- package/skill/references/api-protocol.md +3 -3
- package/skill/references/api-root.md +104 -11
- package/skill/references/cli.md +110 -9
- package/skill/references/examples.md +2 -2
- package/skill/references/recipes.md +25 -10
- package/skill/references/safety-boundaries.md +10 -7
- package/skill/skill.json +5 -5
- package/types/miniapp-manifest/bindings.d.ts +5 -0
- package/types/miniapp-manifest/index.d.ts +1 -0
- package/types/miniapp-manifest/node.d.ts +9 -1
- package/types/miniapp-manifest/schema.d.ts +94 -0
- package/types/miniapp-publish/index.d.ts +4 -2
- package/types/modules/companion/index.d.ts +68 -0
- package/types/modules/files/types.d.ts +10 -11
- package/types/modules/network/index.d.ts +3 -3
- package/types/skill-metadata.d.ts +16 -0
- package/types/vite/index.d.ts +1 -0
- package/dist/cli-chunks/doctor-9HtdddBL.cjs +0 -65
- package/dist/devtools/browser-dev-host/assets/browser-dev-host-BQ9v4rI1.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
|
-
/**
|
|
2817
|
-
const MINIAPP_COMPANION_UPLOAD_TEMPORARY_SIZE_LIMIT_BYTES =
|
|
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
|
|
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
|
-
/**
|
|
2815
|
-
const MINIAPP_COMPANION_UPLOAD_TEMPORARY_SIZE_LIMIT_BYTES =
|
|
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
|
|
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 };
|
package/dist/protocol.cjs.js
CHANGED
|
@@ -331,32 +331,32 @@ const MINI_PROGRAM_PROTOCOL_CAPABILITIES = [
|
|
|
331
331
|
];
|
|
332
332
|
|
|
333
333
|
function isMiniProgramBridgeMessage(value) {
|
|
334
|
-
if (!isRecord$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
475
|
+
function isRecord$2(value) {
|
|
476
476
|
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
477
477
|
}
|
|
478
478
|
|
package/dist/protocol.esm.js
CHANGED
|
@@ -329,32 +329,32 @@ const MINI_PROGRAM_PROTOCOL_CAPABILITIES = [
|
|
|
329
329
|
];
|
|
330
330
|
|
|
331
331
|
function isMiniProgramBridgeMessage(value) {
|
|
332
|
-
if (!isRecord$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
473
|
+
function isRecord$2(value) {
|
|
474
474
|
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
475
475
|
}
|
|
476
476
|
|