@heybox/hb-sdk 0.8.1-alpha.1 → 0.8.1-alpha.3
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 +12 -0
- package/README.md +32 -3
- package/dist/cli-chunks/{build-kMLIWqWY.cjs → build-B5Sbi8Sq.cjs} +13 -9
- package/dist/cli-chunks/{context-CzFFRcL4.cjs → context-DuxaBL3Y.cjs} +2 -2
- package/dist/cli-chunks/{create-0ow6gA9w.cjs → create-CIfZrg3F.cjs} +1 -1
- package/dist/cli-chunks/{dev-CPBPdpyu.cjs → dev-CFubP5kW.cjs} +10 -9
- package/dist/cli-chunks/{doctor-DQ8ctFKC.cjs → doctor-IPKn3PBn.cjs} +1 -1
- package/dist/cli-chunks/{index-Buner4kE.cjs → index-DCJN-V1y.cjs} +15 -15
- package/dist/cli-chunks/{index-RDcIrvwi.cjs → index-KHhdZ8eZ.cjs} +2 -2
- package/dist/cli-chunks/{index.esm-qwrdRuy-.cjs → index.esm-8hgZlNF8.cjs} +7 -7
- package/dist/cli-chunks/{login-DoduAO_f.cjs → login-CoB9jXxC.cjs} +2 -2
- package/dist/cli-chunks/{project-vite-B-sK-qup.cjs → project-vite-DMxdOWsU.cjs} +1 -1
- package/dist/cli-chunks/{remote-CF_SRmnj.cjs → remote-D4ZcngLn.cjs} +14 -10
- package/dist/cli-chunks/{runtime-gate-FseEYZze.cjs → runtime-gate-BWb8QIcX.cjs} +0 -107
- package/dist/cli-chunks/{runtime-permission-env-DdQtxdut.cjs → runtime-permission-env-XAZFauvZ.cjs} +125 -9
- package/dist/cli-chunks/{session-DHbw2Xgh.cjs → session-BnoHxzFq.cjs} +1 -1
- package/dist/cli-chunks/{skill-6IVv12JW.cjs → skill-CDEJtATn.cjs} +2 -2
- package/dist/cli-chunks/{version-TXwWxKvv.cjs → version-BGzCIQhE.cjs} +1 -1
- package/dist/cli.cjs +1 -1
- package/dist/devtools/browser-dev-host/assets/browser-dev-host-DzEst9n7.js +99 -0
- package/dist/devtools/browser-dev-host/assets/{index-C5MZZDa5.js → index-B-NHlLsr.js} +2 -2
- package/dist/devtools/browser-dev-host/index.html +1 -1
- package/dist/index.cjs.js +83 -2
- package/dist/index.esm.js +83 -3
- package/dist/templates/vanilla-vite-js/README.md.ejs +1 -1
- package/dist/templates/vanilla-vite-js/package.json.ejs +1 -0
- package/dist/templates/vanilla-vite-js/vite.config.js +1 -1
- package/dist/vite.cjs.js +19 -10
- package/dist/vite.esm.js +19 -10
- package/package.json +7 -7
- package/skill/SKILL.md +5 -2
- package/skill/references/api-protocol.md +8 -4
- package/skill/references/api-root.md +114 -12
- package/skill/references/cli.md +2 -2
- package/skill/references/examples.md +9 -1
- package/skill/references/recipes.md +1 -0
- package/skill/references/safety-boundaries.md +1 -1
- package/skill/skill.json +5 -5
- package/types/core/client.d.ts +7 -1
- package/types/core/sdk.d.ts +3 -0
- package/types/core/singleton.d.ts +3 -0
- package/types/index.d.ts +3 -1
- package/types/miniapp-manifest/node.d.ts +2 -0
- package/types/miniapp-manifest/schema.d.ts +1 -0
- package/types/modules/environment/index.d.ts +70 -0
- package/types/protocol.d.ts +1 -1
- package/types/vite/index.d.ts +1 -4
- package/dist/devtools/browser-dev-host/assets/browser-dev-host-TzYf9L6C.js +0 -99
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
本文件随 `@heybox/hb-sdk` npm 包公开分发,只记录外部小程序开发者可观察到的变化。内部集成、实现策略和审查证据不在此维护。
|
|
4
4
|
|
|
5
|
+
## 0.8.1-alpha.3
|
|
6
|
+
|
|
7
|
+
- 目标平台声明统一迁移到 `package.json#heybox.platforms`;`miniappManifest()` 恢复无参调用,并在构建时将该声明写入 `dist/manifest.json`。
|
|
8
|
+
- `hb-sdk dev`、`hb-sdk build` 和普通 `hb-sdk remote deploy` 会拒绝缺失或非法的平台声明;build/deploy 也会拒绝与项目配置不一致的 Manifest。已有项目升级时需把原 Vite 参数中的 `platforms` 移入 `package.json#heybox`。
|
|
9
|
+
|
|
10
|
+
## 0.8.1-alpha.2
|
|
11
|
+
|
|
12
|
+
- 新增 `environment.getInfo()` 与 `environment.getInfoSync()`,用于读取运行模式、小黑盒 App 版本、canonical 小程序 ID/版本、操作系统和 SDK 版本的冻结快照。
|
|
13
|
+
- 异步方法会自动等待 SDK 握手;同步方法仅在 `ready` 后可用,提前调用返回 `ENVIRONMENT_NOT_READY`。
|
|
14
|
+
- 环境信息无需权限,只用于界面适配、兼容降级和诊断。旧 Host 与缺失字段按 `null` / `'unknown'` 降级,不影响小程序启动。
|
|
15
|
+
- Runtime 与 Host 集成新增向后兼容的握手环境 response;现有 SDK 会忽略该 response,现有 Host 仍可与新 SDK 握手。
|
|
16
|
+
|
|
5
17
|
## 0.8.1-alpha.1
|
|
6
18
|
|
|
7
19
|
- 预发布版本:更新日志文档改为直接投影结构完整的稳定版条目,与 npm 当前版本和 dist-tag 独立发布、独立重试。
|
package/README.md
CHANGED
|
@@ -94,7 +94,17 @@ async function revokeAuthorizationFromUserAction() {
|
|
|
94
94
|
|
|
95
95
|
`user.revokeAuthorization()` 位于无需声明白名单,不接收小程序 ID、黑盒用户 ID 或手势参数。调用必须来自可信用户操作,否则返回 `USER_GESTURE_REQUIRED`。撤销成功后,后续身份或授权读取会重新进入授权流程;SDK 不会替业务清理已经持久化的数据。
|
|
96
96
|
|
|
97
|
-
已有 Vite
|
|
97
|
+
已有 Vite 项目先在 `package.json#heybox.platforms` 声明实际承诺适配的平台:
|
|
98
|
+
|
|
99
|
+
```json
|
|
100
|
+
{
|
|
101
|
+
"heybox": {
|
|
102
|
+
"platforms": ["android", "ios", "ohos"]
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
再启用构建插件:
|
|
98
108
|
|
|
99
109
|
```ts
|
|
100
110
|
import { miniappManifest } from '@heybox/hb-sdk/vite';
|
|
@@ -102,12 +112,30 @@ import { defineConfig } from 'vite';
|
|
|
102
112
|
|
|
103
113
|
export default defineConfig({
|
|
104
114
|
base: './',
|
|
105
|
-
plugins: [miniappManifest(
|
|
115
|
+
plugins: [miniappManifest()],
|
|
106
116
|
});
|
|
107
117
|
```
|
|
108
118
|
|
|
109
119
|
完整接入步骤见[快速开始](https://docs.xiaoheihe.cn/hb_sdk/guide/quick-start)。
|
|
110
120
|
|
|
121
|
+
## 环境信息
|
|
122
|
+
|
|
123
|
+
使用 `environment.getInfo()` 读取当前实例的冻结环境快照;它会自动等待 SDK 握手:
|
|
124
|
+
|
|
125
|
+
```ts
|
|
126
|
+
const info = await hbSDK.environment.getInfo();
|
|
127
|
+
|
|
128
|
+
console.log(info.runtime.mode);
|
|
129
|
+
console.log(info.host.appVersion);
|
|
130
|
+
console.log(info.miniProgram.id, info.miniProgram.version);
|
|
131
|
+
console.log(info.operatingSystem.name, info.operatingSystem.version);
|
|
132
|
+
console.log(info.sdk.version);
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
已经确认 SDK 为 `ready` 时,可以通过 `environment.getInfoSync()` 同步读取同一份快照;握手前调用会抛出 `ENVIRONMENT_NOT_READY`。旧 Host 或缺失字段会返回固定结构,以 `null` / `'unknown'` 表示未知值。除 `sdk.version` 外,版本字段均为不透明字符串。
|
|
136
|
+
|
|
137
|
+
环境信息无需权限,只用于界面适配、兼容降级、埋点和诊断,不能作为鉴权、权限控制或风控依据。完整字段和 Browser Mock 行为见[环境信息](https://docs.xiaoheihe.cn/hb_sdk/guide/environment)。
|
|
138
|
+
|
|
111
139
|
## 文件与下载
|
|
112
140
|
|
|
113
141
|
`files` 提供当前小程序私有 sandbox 和由用户选择授予的外部 File/Directory;
|
|
@@ -172,6 +200,7 @@ SDK 还提供 `getHandshakeState()` / `onHandshakeStateChange()` 管理持久握
|
|
|
172
200
|
| 模块 | 用途 |
|
|
173
201
|
| ------------ | ----------------------------------------------- |
|
|
174
202
|
| `auth` | 获取交给开发者服务端交换的短期授权码 |
|
|
203
|
+
| `environment` | 读取当前实例的冻结环境快照 |
|
|
175
204
|
| `user` | 读取 Host 当前用户资料、隔离身份或撤销授权 |
|
|
176
205
|
| `share` | 打开分享、复制链接或截图分享流程 |
|
|
177
206
|
| `ui` | 展示 Toast 和 Loading |
|
|
@@ -212,7 +241,7 @@ SDK 还提供 `getHandshakeState()` / `onHandshakeStateChange()` 管理持久握
|
|
|
212
241
|
- Host 文件错误只保留稳定 code 与 canonical 安全文案;原始 message、data、native path 和 credential 不会进入小程序。
|
|
213
242
|
- `FileStat.size` 是非负 safe integer;`modifiedAt` / `createdAt` 若存在,单位为 Unix epoch milliseconds。
|
|
214
243
|
- 仅当当前版本声明且平台已批准 `network` 时,`hb-sdk dev` 与 `hb-sdk remote deploy` 构建才会跳过平台 CSP;其他构建继续注入平台 CSP。`useOfficialDomain` 不参与 CSP 跳过判定。
|
|
215
|
-
- 构建必须启用 `miniappManifest(
|
|
244
|
+
- 构建必须启用 `miniappManifest()`,并在 `package.json#heybox.platforms` 显式声明实际承诺适配的平台,推荐统一使用 `hb-sdk build`。新项目模板中的 `['android', 'ios', 'ohos']` 只是初始配置,不代表已经完成真机验收。
|
|
216
245
|
|
|
217
246
|
私有 Page Channel 适配没有修改 `@heybox/hb-sdk` 公开 API 或 iframe wire;本次 files/download
|
|
218
247
|
Runtime 能力随 `0.8.0-alpha.11` release family 发布,部署 detail 前必须保证
|
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
var fs$1 = require('node:fs');
|
|
4
4
|
var fs = require('node:fs/promises');
|
|
5
5
|
var path = require('node:path');
|
|
6
|
-
var runtimePermissionEnv = require('./runtime-permission-env-
|
|
7
|
-
var runtimeGate = require('./runtime-gate-
|
|
8
|
-
var index = require('./index-
|
|
9
|
-
var projectVite = require('./project-vite-
|
|
10
|
-
require('./version-
|
|
6
|
+
var runtimePermissionEnv = require('./runtime-permission-env-XAZFauvZ.cjs');
|
|
7
|
+
var runtimeGate = require('./runtime-gate-BWb8QIcX.cjs');
|
|
8
|
+
var index = require('./index-DCJN-V1y.cjs');
|
|
9
|
+
var projectVite = require('./project-vite-DMxdOWsU.cjs');
|
|
10
|
+
require('./version-BGzCIQhE.cjs');
|
|
11
11
|
require('node:async_hooks');
|
|
12
12
|
require('node:module');
|
|
13
13
|
require('path');
|
|
@@ -28,6 +28,7 @@ async function runBuildCommand(_options = {}, runtime = {}) {
|
|
|
28
28
|
const env = runtime.env ?? process.env;
|
|
29
29
|
const mode = env.HB_SDK_ENV?.trim() || undefined;
|
|
30
30
|
const skipPlatformCsp = runtimePermissionEnv.shouldSkipMiniappPlatformCspFromEnv(env);
|
|
31
|
+
const declaredPlatforms = runtimePermissionEnv.readMiniappPlatformsFromPackageJson(projectRoot);
|
|
31
32
|
runtimePermissionEnv.readMiniappPermissionsFromPackageJson(projectRoot, runtimePermissionEnv.resolveMiniappSdkVersion());
|
|
32
33
|
await fs.rm(distDir, { force: true, recursive: true });
|
|
33
34
|
try {
|
|
@@ -46,7 +47,7 @@ async function runBuildCommand(_options = {}, runtime = {}) {
|
|
|
46
47
|
write: true,
|
|
47
48
|
},
|
|
48
49
|
}), { successText: 'Vite 构建完成' });
|
|
49
|
-
const result = await validateBuildOutput(projectRoot, logger);
|
|
50
|
+
const result = await validateBuildOutput(projectRoot, logger, declaredPlatforms);
|
|
50
51
|
logger.success(`构建完成: dist/ | manifest version ${result.version} | sdkVersion ${result.sdkVersion} | 待上传文件 ${result.fileCount} 个 | ${formatSize(result.totalBytes)}`);
|
|
51
52
|
return result;
|
|
52
53
|
}, env);
|
|
@@ -75,7 +76,7 @@ function createFixedBuildOutputPlugin(projectRoot) {
|
|
|
75
76
|
},
|
|
76
77
|
};
|
|
77
78
|
}
|
|
78
|
-
async function validateBuildOutput(projectRoot, logger) {
|
|
79
|
+
async function validateBuildOutput(projectRoot, logger, declaredPlatforms) {
|
|
79
80
|
const distDir = path.join(projectRoot, 'dist');
|
|
80
81
|
const entryHtmlPath = path.join(distDir, 'index.html');
|
|
81
82
|
const manifestPath = path.join(distDir, 'manifest.json');
|
|
@@ -89,11 +90,14 @@ async function validateBuildOutput(projectRoot, logger) {
|
|
|
89
90
|
if (!runtimeGate.hasMiniappRuntimeGate(entryHtml)) {
|
|
90
91
|
throw new Error('dist/index.html 缺少平台 Runtime 启动门禁,请在 Vite 配置中显式启用 miniappManifest()');
|
|
91
92
|
}
|
|
92
|
-
const { manifest, hadBom } =
|
|
93
|
+
const { manifest, hadBom } = runtimePermissionEnv.parseMiniappManifestJson(await fs.readFile(manifestPath, 'utf8'), 'dist/manifest.json');
|
|
93
94
|
if (hadBom) {
|
|
94
95
|
logger.warn('dist/manifest.json 包含 BOM,已自动剥离');
|
|
95
96
|
}
|
|
96
|
-
const { platforms, sdkVersion, version, permissions } =
|
|
97
|
+
const { platforms, sdkVersion, version, permissions } = runtimePermissionEnv.validateMiniappManifestForDeploy(manifest);
|
|
98
|
+
if (!runtimePermissionEnv.areMiniappPlatformsEqual(platforms, declaredPlatforms)) {
|
|
99
|
+
throw new Error('dist/manifest.json.platforms 与 package.json#heybox.platforms 不一致,请重新 build');
|
|
100
|
+
}
|
|
97
101
|
const allFiles = await walkDistFiles(distDir);
|
|
98
102
|
const uploadFiles = allFiles.filter((file) => runtimePermissionEnv.shouldUploadDistFile(file.relativePath));
|
|
99
103
|
const sizeError = runtimePermissionEnv.validateUploadTotalSize(uploadFiles);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var runtimePermissionEnv = require('./runtime-permission-env-
|
|
4
|
-
var session = require('./session-
|
|
3
|
+
var runtimePermissionEnv = require('./runtime-permission-env-XAZFauvZ.cjs');
|
|
4
|
+
var session = require('./session-BnoHxzFq.cjs');
|
|
5
5
|
var fs$1 = require('node:fs');
|
|
6
6
|
var fs = require('node:fs/promises');
|
|
7
7
|
var path = require('node:path');
|
|
@@ -5,7 +5,7 @@ var fs = require('node:fs/promises');
|
|
|
5
5
|
var path = require('node:path');
|
|
6
6
|
var require$$0 = require('fs');
|
|
7
7
|
var require$$1 = require('path');
|
|
8
|
-
var index = require('./index-
|
|
8
|
+
var index = require('./index-DCJN-V1y.cjs');
|
|
9
9
|
require('node:module');
|
|
10
10
|
require('os');
|
|
11
11
|
require('readline');
|
|
@@ -8,17 +8,17 @@ var node_crypto = require('node:crypto');
|
|
|
8
8
|
var promises = require('node:dns/promises');
|
|
9
9
|
var node_http = require('node:http');
|
|
10
10
|
var node_module = require('node:module');
|
|
11
|
-
var context = require('./context-
|
|
12
|
-
var runtimePermissionEnv = require('./runtime-permission-env-
|
|
11
|
+
var context = require('./context-DuxaBL3Y.cjs');
|
|
12
|
+
var runtimePermissionEnv = require('./runtime-permission-env-XAZFauvZ.cjs');
|
|
13
13
|
var undici = require('undici');
|
|
14
14
|
var fs$1 = require('node:fs/promises');
|
|
15
|
-
var index = require('./index-
|
|
15
|
+
var index = require('./index-DCJN-V1y.cjs');
|
|
16
16
|
var require$$0$1 = require('crypto');
|
|
17
17
|
var require$$0 = require('buffer');
|
|
18
|
-
var session = require('./session-
|
|
18
|
+
var session = require('./session-BnoHxzFq.cjs');
|
|
19
19
|
var browser = require('./browser-RAy8e8cV.cjs');
|
|
20
|
-
var projectVite = require('./project-vite-
|
|
21
|
-
var version = require('./version-
|
|
20
|
+
var projectVite = require('./project-vite-DMxdOWsU.cjs');
|
|
21
|
+
var version = require('./version-BGzCIQhE.cjs');
|
|
22
22
|
|
|
23
23
|
var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
|
|
24
24
|
class Locked extends Error {
|
|
@@ -1851,8 +1851,8 @@ const DEFAULT_CHANNEL_TRANSPORT = {
|
|
|
1851
1851
|
};
|
|
1852
1852
|
const IPV4_LOOPBACK_ADDRESSES = new net.BlockList();
|
|
1853
1853
|
IPV4_LOOPBACK_ADDRESSES.addSubnet('127.0.0.0', 8, 'ipv4');
|
|
1854
|
-
const { WebSocket, WebSocketServer } = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/dev-
|
|
1855
|
-
const { parse: parseHtml } = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/dev-
|
|
1854
|
+
const { WebSocket, WebSocketServer } = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/dev-CFubP5kW.cjs', document.baseURI).href)))('ws');
|
|
1855
|
+
const { parse: parseHtml } = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/dev-CFubP5kW.cjs', document.baseURI).href)))('parse5');
|
|
1856
1856
|
const BROWSER_DEV_HOST_ROOT_CANDIDATES = [
|
|
1857
1857
|
path.resolve(__dirname, 'devtools/browser-dev-host'),
|
|
1858
1858
|
path.resolve(__dirname, '../devtools/browser-dev-host'),
|
|
@@ -10902,7 +10902,7 @@ function assertNodeRuntimeCapabilities(ctx, settings) {
|
|
|
10902
10902
|
function createNodeRealtimeDriverRegistry() {
|
|
10903
10903
|
const registry = createRuntimeRealtimeDriverRegistry();
|
|
10904
10904
|
registry.registerLazy('node-websocket', async () => {
|
|
10905
|
-
const mod = await Promise.resolve().then(function () { return require('./index.esm-
|
|
10905
|
+
const mod = await Promise.resolve().then(function () { return require('./index.esm-8hgZlNF8.cjs'); });
|
|
10906
10906
|
return mod.createNodeWebSocketRuntimeDriver();
|
|
10907
10907
|
});
|
|
10908
10908
|
return registry;
|
|
@@ -14991,6 +14991,7 @@ async function runDevCommand(options, runtime = {}) {
|
|
|
14991
14991
|
port: appPort,
|
|
14992
14992
|
};
|
|
14993
14993
|
const projectRoot = projectVite.findProjectRoot(runtime.cwd ?? process.cwd());
|
|
14994
|
+
runtimePermissionEnv.readMiniappPlatformsFromPackageJson(projectRoot);
|
|
14994
14995
|
const { context: devLaunchContext, miniProgram } = await loadDevLaunchContext({
|
|
14995
14996
|
env: runtime.env,
|
|
14996
14997
|
fetchImpl,
|
|
@@ -234,19 +234,19 @@ function requireArgument () {
|
|
|
234
234
|
|
|
235
235
|
var command = {};
|
|
236
236
|
|
|
237
|
-
const require$5 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-
|
|
237
|
+
const require$5 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-DCJN-V1y.cjs', document.baseURI).href)));
|
|
238
238
|
function __require$4() { return require$5("node:events"); }
|
|
239
239
|
|
|
240
|
-
const require$4 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-
|
|
240
|
+
const require$4 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-DCJN-V1y.cjs', document.baseURI).href)));
|
|
241
241
|
function __require$3() { return require$4("node:child_process"); }
|
|
242
242
|
|
|
243
|
-
const require$3 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-
|
|
243
|
+
const require$3 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-DCJN-V1y.cjs', document.baseURI).href)));
|
|
244
244
|
function __require$2() { return require$3("node:path"); }
|
|
245
245
|
|
|
246
|
-
const require$2 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-
|
|
246
|
+
const require$2 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-DCJN-V1y.cjs', document.baseURI).href)));
|
|
247
247
|
function __require$1() { return require$2("node:fs"); }
|
|
248
248
|
|
|
249
|
-
const require$1 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-
|
|
249
|
+
const require$1 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-DCJN-V1y.cjs', document.baseURI).href)));
|
|
250
250
|
function __require() { return require$1("node:process"); }
|
|
251
251
|
|
|
252
252
|
var help = {};
|
|
@@ -13353,7 +13353,7 @@ function getPathname(pathWithQuery) {
|
|
|
13353
13353
|
}
|
|
13354
13354
|
|
|
13355
13355
|
const CLI_VERSION_PLACEHOLDER = ['__HB', 'SDK', 'CLI', 'VERSION__'].join('_');
|
|
13356
|
-
const BUILT_CLI_VERSION = '0.8.1-alpha.
|
|
13356
|
+
const BUILT_CLI_VERSION = '0.8.1-alpha.3';
|
|
13357
13357
|
const PACKAGE_JSON_CANDIDATES = [
|
|
13358
13358
|
path.resolve(__dirname, '..', '..', 'package.json'),
|
|
13359
13359
|
path.resolve(__dirname, '..', 'package.json'),
|
|
@@ -13701,39 +13701,39 @@ function createCommandLoggerResolver(options) {
|
|
|
13701
13701
|
};
|
|
13702
13702
|
}
|
|
13703
13703
|
const defaultClearLoginStatus = async (...args) => {
|
|
13704
|
-
const { clearLoginStatus } = await Promise.resolve().then(function () { return require('./login-
|
|
13704
|
+
const { clearLoginStatus } = await Promise.resolve().then(function () { return require('./login-CoB9jXxC.cjs'); });
|
|
13705
13705
|
return clearLoginStatus(...args);
|
|
13706
13706
|
};
|
|
13707
13707
|
const defaultLoginToHeybox = async (...args) => {
|
|
13708
|
-
const { loginToHeybox } = await Promise.resolve().then(function () { return require('./login-
|
|
13708
|
+
const { loginToHeybox } = await Promise.resolve().then(function () { return require('./login-CoB9jXxC.cjs'); });
|
|
13709
13709
|
return loginToHeybox(...args);
|
|
13710
13710
|
};
|
|
13711
13711
|
const defaultPrintLoginStatus = async (...args) => {
|
|
13712
|
-
const { printLoginStatus } = await Promise.resolve().then(function () { return require('./login-
|
|
13712
|
+
const { printLoginStatus } = await Promise.resolve().then(function () { return require('./login-CoB9jXxC.cjs'); });
|
|
13713
13713
|
return printLoginStatus(...args);
|
|
13714
13714
|
};
|
|
13715
13715
|
const defaultRunBuildCommand = async (...args) => {
|
|
13716
|
-
const { runBuildCommand } = await Promise.resolve().then(function () { return require('./build-
|
|
13716
|
+
const { runBuildCommand } = await Promise.resolve().then(function () { return require('./build-B5Sbi8Sq.cjs'); });
|
|
13717
13717
|
return runBuildCommand(...args);
|
|
13718
13718
|
};
|
|
13719
13719
|
const defaultRunCreateCommand = async (...args) => {
|
|
13720
|
-
const { runCreateCommand } = await Promise.resolve().then(function () { return require('./create-
|
|
13720
|
+
const { runCreateCommand } = await Promise.resolve().then(function () { return require('./create-CIfZrg3F.cjs'); });
|
|
13721
13721
|
return runCreateCommand(...args);
|
|
13722
13722
|
};
|
|
13723
13723
|
const defaultRunDevCommand = async (...args) => {
|
|
13724
|
-
const { runDevCommand } = await Promise.resolve().then(function () { return require('./dev-
|
|
13724
|
+
const { runDevCommand } = await Promise.resolve().then(function () { return require('./dev-CFubP5kW.cjs'); }).then(function (n) { return n.dev; });
|
|
13725
13725
|
return runDevCommand(...args);
|
|
13726
13726
|
};
|
|
13727
13727
|
const defaultRunDoctorCommand = async (...args) => {
|
|
13728
|
-
const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-
|
|
13728
|
+
const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-IPKn3PBn.cjs'); });
|
|
13729
13729
|
return runDoctorCommand(...args);
|
|
13730
13730
|
};
|
|
13731
13731
|
const defaultRunSkillInstallCommand = async (...args) => {
|
|
13732
|
-
const { runSkillInstallCommand } = await Promise.resolve().then(function () { return require('./skill-
|
|
13732
|
+
const { runSkillInstallCommand } = await Promise.resolve().then(function () { return require('./skill-CDEJtATn.cjs'); });
|
|
13733
13733
|
return runSkillInstallCommand(...args);
|
|
13734
13734
|
};
|
|
13735
13735
|
const defaultRunRemoteCommand = async (...args) => {
|
|
13736
|
-
const { runRemoteCommand } = await Promise.resolve().then(function () { return require('./remote-
|
|
13736
|
+
const { runRemoteCommand } = await Promise.resolve().then(function () { return require('./remote-D4ZcngLn.cjs'); });
|
|
13737
13737
|
return runRemoteCommand(...args);
|
|
13738
13738
|
};
|
|
13739
13739
|
function resolveStandaloneLogger(options, verbose) {
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var index$2 = require('./index-
|
|
3
|
+
var index$2 = require('./index-DCJN-V1y.cjs');
|
|
4
4
|
var require$$0$3 = require('fs');
|
|
5
5
|
var require$$0$2 = require('crypto');
|
|
6
6
|
var require$$1$2 = require('path');
|
|
7
7
|
var require$$0$5 = require('assert');
|
|
8
8
|
var require$$0$4 = require('events');
|
|
9
9
|
var require$$1$1 = require('util');
|
|
10
|
-
var runtimePermissionEnv = require('./runtime-permission-env-
|
|
10
|
+
var runtimePermissionEnv = require('./runtime-permission-env-XAZFauvZ.cjs');
|
|
11
11
|
var require$$0$7 = require('net');
|
|
12
12
|
var require$$0$6 = require('url');
|
|
13
13
|
var require$$2$1 = require('http');
|
|
@@ -11,8 +11,8 @@ var require$$0$4 = require('url');
|
|
|
11
11
|
var require$$0 = require('zlib');
|
|
12
12
|
var require$$0$1 = require('buffer');
|
|
13
13
|
var require$$1 = require('util');
|
|
14
|
-
var index = require('./index-
|
|
15
|
-
var dev = require('./dev-
|
|
14
|
+
var index = require('./index-DCJN-V1y.cjs');
|
|
15
|
+
var dev = require('./dev-CFubP5kW.cjs');
|
|
16
16
|
require('node:module');
|
|
17
17
|
require('node:fs');
|
|
18
18
|
require('node:fs/promises');
|
|
@@ -27,11 +27,11 @@ require('node:net');
|
|
|
27
27
|
require('node:crypto');
|
|
28
28
|
require('node:dns/promises');
|
|
29
29
|
require('node:http');
|
|
30
|
-
require('./context-
|
|
31
|
-
require('./runtime-permission-env-
|
|
32
|
-
require('./version-
|
|
30
|
+
require('./context-DuxaBL3Y.cjs');
|
|
31
|
+
require('./runtime-permission-env-XAZFauvZ.cjs');
|
|
32
|
+
require('./version-BGzCIQhE.cjs');
|
|
33
33
|
require('node:async_hooks');
|
|
34
|
-
require('./session-
|
|
34
|
+
require('./session-BnoHxzFq.cjs');
|
|
35
35
|
require('fs');
|
|
36
36
|
require('constants');
|
|
37
37
|
require('undici');
|
|
@@ -41,7 +41,7 @@ require('node:buffer');
|
|
|
41
41
|
require('node:url');
|
|
42
42
|
require('node:util');
|
|
43
43
|
require('node:child_process');
|
|
44
|
-
require('./project-vite-
|
|
44
|
+
require('./project-vite-DMxdOWsU.cjs');
|
|
45
45
|
|
|
46
46
|
var bufferUtil = {exports: {}};
|
|
47
47
|
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
var promises = require('node:readline/promises');
|
|
4
4
|
var node_crypto = require('node:crypto');
|
|
5
5
|
var node_http = require('node:http');
|
|
6
|
-
var session = require('./session-
|
|
6
|
+
var session = require('./session-BnoHxzFq.cjs');
|
|
7
7
|
var browser = require('./browser-RAy8e8cV.cjs');
|
|
8
|
-
var index = require('./index-
|
|
8
|
+
var index = require('./index-DCJN-V1y.cjs');
|
|
9
9
|
require('node:path');
|
|
10
10
|
require('fs');
|
|
11
11
|
require('constants');
|
|
@@ -5,7 +5,7 @@ var fs$1 = require('node:fs/promises');
|
|
|
5
5
|
var node_module = require('node:module');
|
|
6
6
|
var path = require('node:path');
|
|
7
7
|
var node_url = require('node:url');
|
|
8
|
-
var index = require('./index-
|
|
8
|
+
var index = require('./index-DCJN-V1y.cjs');
|
|
9
9
|
|
|
10
10
|
function findProjectRoot(startDir) {
|
|
11
11
|
let current = path.resolve(startDir);
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var promises = require('node:readline/promises');
|
|
4
|
-
var index = require('./index-
|
|
5
|
-
var session = require('./session-
|
|
4
|
+
var index = require('./index-DCJN-V1y.cjs');
|
|
5
|
+
var session = require('./session-BnoHxzFq.cjs');
|
|
6
6
|
var childProcess = require('node:child_process');
|
|
7
7
|
var fs = require('node:fs');
|
|
8
8
|
var fs$1 = require('node:fs/promises');
|
|
9
9
|
var path = require('node:path');
|
|
10
|
-
var runtimePermissionEnv = require('./runtime-permission-env-
|
|
11
|
-
var runtimeGate = require('./runtime-gate-FseEYZze.cjs');
|
|
10
|
+
var runtimePermissionEnv = require('./runtime-permission-env-XAZFauvZ.cjs');
|
|
12
11
|
var node_crypto = require('node:crypto');
|
|
13
|
-
var
|
|
12
|
+
var runtimeGate = require('./runtime-gate-BWb8QIcX.cjs');
|
|
13
|
+
var context = require('./context-DuxaBL3Y.cjs');
|
|
14
14
|
require('node:module');
|
|
15
15
|
require('path');
|
|
16
16
|
require('os');
|
|
@@ -23,7 +23,7 @@ require('buffer');
|
|
|
23
23
|
require('util');
|
|
24
24
|
require('fs');
|
|
25
25
|
require('constants');
|
|
26
|
-
require('./version-
|
|
26
|
+
require('./version-BGzCIQhE.cjs');
|
|
27
27
|
require('node:async_hooks');
|
|
28
28
|
|
|
29
29
|
async function getCDNUploadInfo(options, runtime = {}) {
|
|
@@ -272,7 +272,7 @@ function createDefaultCosClient(uploadToken, COS) {
|
|
|
272
272
|
};
|
|
273
273
|
}
|
|
274
274
|
async function loadCosConstructor() {
|
|
275
|
-
const cosModule = await Promise.resolve().then(function () { return require('./index-
|
|
275
|
+
const cosModule = await Promise.resolve().then(function () { return require('./index-KHhdZ8eZ.cjs'); }).then(function (n) { return n.index; });
|
|
276
276
|
return cosModule.default;
|
|
277
277
|
}
|
|
278
278
|
function formatSize(bytes) {
|
|
@@ -509,6 +509,7 @@ async function runDeployCommand(options, runtime = {}) {
|
|
|
509
509
|
throw new Error('未在 package.json 中找到 heybox.miniProgramId,请先配置 mini program id');
|
|
510
510
|
}
|
|
511
511
|
const fromVersion = options.fromVersion?.trim();
|
|
512
|
+
const declaredPlatforms = fromVersion ? undefined : runtimePermissionEnv.readMiniappPlatformsFromPackageJson(projectRoot);
|
|
512
513
|
const releaseNote = await resolveDeployReleaseNote(options, runtime);
|
|
513
514
|
const session$1 = await logger.task('正在校验 Heybox 登录态', () => (runtime.requireAuthSession ?? session.requireHeyboxAuthSession)({ loginBaseUrl }), { successText: 'Heybox 登录态有效' });
|
|
514
515
|
logger.debug(`Heybox API: ${apiBaseUrl}`);
|
|
@@ -583,6 +584,9 @@ async function runDeployCommand(options, runtime = {}) {
|
|
|
583
584
|
const distDir = path.join(projectRoot, 'dist');
|
|
584
585
|
const parsedManifest = await readDeployManifest(projectRoot, logger);
|
|
585
586
|
({ manifest, version } = parsedManifest);
|
|
587
|
+
if (!declaredPlatforms || !runtimePermissionEnv.areMiniappPlatformsEqual(parsedManifest.platforms, declaredPlatforms)) {
|
|
588
|
+
throw new Error('dist/manifest.json.platforms 与 package.json#heybox.platforms 不一致,请重新 build 后再 deploy');
|
|
589
|
+
}
|
|
586
590
|
if (version !== precheckVersion) {
|
|
587
591
|
throw new Error(`dist/manifest.json.version (${version}) 与预检版本 (${precheckVersion}) 不一致,请重新 build 后再 deploy`);
|
|
588
592
|
}
|
|
@@ -734,11 +738,11 @@ async function readDeployManifest(projectRoot, logger) {
|
|
|
734
738
|
if (!runtimeGate.hasMiniappRuntimeGate(entryHtml)) {
|
|
735
739
|
throw new Error('dist/index.html 缺少平台 Runtime 启动门禁,请在 Vite 配置中启用 miniappManifest() 后重新 build');
|
|
736
740
|
}
|
|
737
|
-
const { manifest, hadBom } =
|
|
741
|
+
const { manifest, hadBom } = runtimePermissionEnv.parseMiniappManifestJson(await fs$1.readFile(manifestPath, 'utf8'), 'dist/manifest.json');
|
|
738
742
|
if (hadBom) {
|
|
739
743
|
logger.warn('dist/manifest.json 包含 BOM,已自动剥离');
|
|
740
744
|
}
|
|
741
|
-
const validated =
|
|
745
|
+
const validated = runtimePermissionEnv.validateMiniappManifestForDeploy(manifest);
|
|
742
746
|
return {
|
|
743
747
|
manifest: { ...manifest, platforms: validated.platforms },
|
|
744
748
|
sdkVersion: validated.sdkVersion,
|
|
@@ -747,7 +751,7 @@ async function readDeployManifest(projectRoot, logger) {
|
|
|
747
751
|
};
|
|
748
752
|
}
|
|
749
753
|
function validateVersionForDeploy(version, sourceLabel) {
|
|
750
|
-
if (typeof version !== 'string' || !
|
|
754
|
+
if (typeof version !== 'string' || !runtimePermissionEnv.isValidMiniappManifestVersion(version)) {
|
|
751
755
|
throw new Error(`${sourceLabel} 必须是合法 SemVer,允许 prerelease,不允许 build metadata 和 0.0.0:${String(version)}`);
|
|
752
756
|
}
|
|
753
757
|
return version.trim();
|
|
@@ -1,109 +1,5 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var runtimePermissionEnv = require('./runtime-permission-env-DdQtxdut.cjs');
|
|
4
|
-
|
|
5
|
-
const MINIAPP_PLATFORM_VALUES = ['android', 'ios', 'ohos', 'windows', 'macos', 'linux'];
|
|
6
|
-
function isValidMiniappManifestVersion(version) {
|
|
7
|
-
return getMiniappManifestVersionError(version) === undefined;
|
|
8
|
-
}
|
|
9
|
-
function validateMiniappManifestVersion(version, sourceLabel = 'manifest.version') {
|
|
10
|
-
const error = getMiniappManifestVersionError(version);
|
|
11
|
-
if (error) {
|
|
12
|
-
throw new Error(`${sourceLabel} ${error}`);
|
|
13
|
-
}
|
|
14
|
-
return String(version).trim();
|
|
15
|
-
}
|
|
16
|
-
function parseMiniappManifestJson(raw, sourceLabel = 'manifest.json') {
|
|
17
|
-
const hadBom = raw.charCodeAt(0) === 0xfeff;
|
|
18
|
-
const text = hadBom ? raw.slice(1) : raw;
|
|
19
|
-
let parsed;
|
|
20
|
-
try {
|
|
21
|
-
parsed = JSON.parse(text);
|
|
22
|
-
}
|
|
23
|
-
catch (error) {
|
|
24
|
-
throw new Error(`${sourceLabel} 不是合法 JSON:${formatReason(error)}`);
|
|
25
|
-
}
|
|
26
|
-
if (!isManifestRecord(parsed)) {
|
|
27
|
-
throw new Error(`${sourceLabel} 必须是 JSON 对象`);
|
|
28
|
-
}
|
|
29
|
-
return {
|
|
30
|
-
manifest: parsed,
|
|
31
|
-
hadBom,
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
function validateMiniappManifestForDeploy(manifest) {
|
|
35
|
-
const version = validateMiniappManifestVersion(manifest.version, 'manifest.version');
|
|
36
|
-
const sdkVersion = validateSdkVersion(manifest.sdkVersion, 'manifest.sdkVersion');
|
|
37
|
-
const permissions = runtimePermissionEnv.parseMiniappPermissions(manifest.permissions, {
|
|
38
|
-
present: Object.prototype.hasOwnProperty.call(manifest, 'permissions'),
|
|
39
|
-
sdkVersion,
|
|
40
|
-
sourceLabel: 'manifest.permissions',
|
|
41
|
-
});
|
|
42
|
-
return {
|
|
43
|
-
version,
|
|
44
|
-
sdkVersion,
|
|
45
|
-
platforms: validateMiniappPlatforms(manifest.platforms, 'manifest.platforms'),
|
|
46
|
-
...(permissions.permissions === undefined ? {} : { permissions: permissions.permissions }),
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
function validateMiniappPlatforms(platforms, sourceLabel = 'platforms') {
|
|
50
|
-
if (!Array.isArray(platforms) || platforms.length === 0) {
|
|
51
|
-
throw new Error(`${sourceLabel} 必须是非空平台数组`);
|
|
52
|
-
}
|
|
53
|
-
const allowedPlatforms = new Set(MINIAPP_PLATFORM_VALUES);
|
|
54
|
-
const seen = new Set();
|
|
55
|
-
for (const platform of platforms) {
|
|
56
|
-
if (typeof platform !== 'string' || !allowedPlatforms.has(platform)) {
|
|
57
|
-
throw new Error(`${sourceLabel} 包含不支持的平台:${String(platform)}`);
|
|
58
|
-
}
|
|
59
|
-
if (seen.has(platform)) {
|
|
60
|
-
throw new Error(`${sourceLabel} 包含重复平台:${platform}`);
|
|
61
|
-
}
|
|
62
|
-
seen.add(platform);
|
|
63
|
-
}
|
|
64
|
-
return Object.freeze(MINIAPP_PLATFORM_VALUES.filter((platform) => seen.has(platform)));
|
|
65
|
-
}
|
|
66
|
-
function validateSdkVersion(version, sourceLabel = 'sdkVersion') {
|
|
67
|
-
if (typeof version !== 'string' || version.trim() === '') {
|
|
68
|
-
throw new Error(`${sourceLabel} 必须是合法 SemVer:${String(version)}`);
|
|
69
|
-
}
|
|
70
|
-
const normalized = version.trim();
|
|
71
|
-
const parsed = runtimePermissionEnv.semverExports.parse(normalized);
|
|
72
|
-
if (!parsed || parsed.version !== normalized || parsed.build.length > 0) {
|
|
73
|
-
throw new Error(`${sourceLabel} 必须是合法 SemVer:${normalized}`);
|
|
74
|
-
}
|
|
75
|
-
return normalized;
|
|
76
|
-
}
|
|
77
|
-
function isManifestRecord(value) {
|
|
78
|
-
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
79
|
-
}
|
|
80
|
-
function getMiniappManifestVersionError(version) {
|
|
81
|
-
if (typeof version !== 'string' || version.trim() === '') {
|
|
82
|
-
return `必须是合法 SemVer:${String(version)}`;
|
|
83
|
-
}
|
|
84
|
-
const normalized = version.trim();
|
|
85
|
-
const parsed = runtimePermissionEnv.semverExports.parse(normalized);
|
|
86
|
-
if (!parsed) {
|
|
87
|
-
return `必须是合法 SemVer:${normalized}`;
|
|
88
|
-
}
|
|
89
|
-
if (parsed.build.length > 0) {
|
|
90
|
-
return `不能包含 build metadata:${normalized}`;
|
|
91
|
-
}
|
|
92
|
-
if (parsed.version !== normalized) {
|
|
93
|
-
return `必须是合法 SemVer:${normalized}`;
|
|
94
|
-
}
|
|
95
|
-
if (parsed.major === 0 && parsed.minor === 0 && parsed.patch === 0) {
|
|
96
|
-
return '不能是模板默认版本 0.0.0';
|
|
97
|
-
}
|
|
98
|
-
return undefined;
|
|
99
|
-
}
|
|
100
|
-
function formatReason(error) {
|
|
101
|
-
if (error instanceof Error && error.message) {
|
|
102
|
-
return error.message;
|
|
103
|
-
}
|
|
104
|
-
return String(error);
|
|
105
|
-
}
|
|
106
|
-
|
|
107
3
|
const UNDEFINED_CODE_POINTS = new Set([
|
|
108
4
|
65534, 65535, 131070, 131071, 196606, 196607, 262142, 262143, 327678, 327679, 393214,
|
|
109
5
|
393215, 458750, 458751, 524286, 524287, 589822, 589823, 655358, 655359, 720894,
|
|
@@ -8390,6 +8286,3 @@ function walk(node, visit) {
|
|
|
8390
8286
|
}
|
|
8391
8287
|
|
|
8392
8288
|
exports.hasMiniappRuntimeGate = hasMiniappRuntimeGate;
|
|
8393
|
-
exports.isValidMiniappManifestVersion = isValidMiniappManifestVersion;
|
|
8394
|
-
exports.parseMiniappManifestJson = parseMiniappManifestJson;
|
|
8395
|
-
exports.validateMiniappManifestForDeploy = validateMiniappManifestForDeploy;
|