@heybox/hb-sdk 0.8.0-alpha.3 → 0.8.0-alpha.9
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 +85 -438
- package/README.md +6 -2
- package/dist/cli-chunks/{build-qWzAbpS7.cjs → build-DkokKVNy.cjs} +2 -2
- package/dist/cli-chunks/{context-CtS2Thp0.cjs → context-CKzZxKbF.cjs} +1 -1
- package/dist/cli-chunks/{create-PV5ua977.cjs → create-BQy5Jdmu.cjs} +2 -2
- package/dist/cli-chunks/{dev-CwKbAm_H.cjs → dev-Dik2zr5R.cjs} +58 -57
- package/dist/cli-chunks/{doctor-tJUGOYrm.cjs → doctor-Byr4uwKG.cjs} +1 -1
- package/dist/cli-chunks/{index-De687C6-.cjs → index-BwGBr1ZA.cjs} +32 -21
- package/dist/cli-chunks/{index-DVuD75Hr.cjs → index-Cl0XaX8e.cjs} +1 -1
- package/dist/cli-chunks/{index.esm-B-4yrLNm.cjs → index.esm-BYifBABc.cjs} +6 -6
- package/dist/cli-chunks/{login-DolpqD8K.cjs → login-Dr9lclu3.cjs} +2 -2
- package/dist/cli-chunks/{project-vite-1rvkK-M8.cjs → project-vite-BIPrOtRO.cjs} +1 -1
- package/dist/cli-chunks/{remote-rIAQE_G2.cjs → remote-DXxyA14a.cjs} +4 -4
- package/dist/cli-chunks/{session-CzaM2Cq3.cjs → session-B6Mo9eYW.cjs} +1 -1
- package/dist/cli-chunks/{skill-CM40_9WH.cjs → skill-f90sxv28.cjs} +2 -2
- package/dist/cli-chunks/{version-Bz-AfXQU.cjs → version-DDB_btOG.cjs} +1 -1
- package/dist/cli.cjs +1 -1
- package/dist/devtools/browser-dev-host/assets/{browser-dev-host-uq-Wac6k.js → browser-dev-host-CbhA4h8z.js} +15 -15
- package/dist/devtools/browser-dev-host/assets/{index-KD2f3Jdz.css → index-DJFB5ySU.css} +1 -1
- package/dist/devtools/browser-dev-host/assets/{index-CeP6SLB3.js → index-DaqmTjSF.js} +4 -4
- package/dist/devtools/browser-dev-host/assets/workbench-state-wHgWRb7I.js +5 -0
- package/dist/devtools/browser-dev-host/index.html +3 -3
- package/dist/index.cjs.js +2 -2
- package/dist/index.esm.js +2 -2
- package/dist/templates/{vue3-vite-ts → vanilla-vite-js}/.gitignore.ejs +0 -1
- package/dist/templates/vanilla-vite-js/README.md.ejs +14 -0
- package/dist/templates/vanilla-vite-js/index.html.ejs +20 -0
- package/dist/templates/vanilla-vite-js/package.json.ejs +21 -0
- package/dist/templates/vanilla-vite-js/src/assets/heybox-logo.svg +8 -0
- package/dist/templates/vanilla-vite-js/src/main.js +39 -0
- package/dist/templates/vanilla-vite-js/src/styles.css +155 -0
- package/dist/templates/{vue3-vite-ts/vite.config.ts → vanilla-vite-js/vite.config.js} +1 -2
- package/dist/vite.cjs.js +1 -1
- package/dist/vite.esm.js +1 -1
- package/package.json +12 -8
- package/skill/SKILL.md +1 -1
- package/skill/references/api-protocol.md +1 -3
- package/skill/references/api-root.md +3 -1
- package/skill/references/cli.md +14 -2
- package/skill/references/recipes.md +5 -3
- package/skill/skill.json +5 -5
- package/types/modules/share/index.d.ts +1 -1
- package/types/modules/share/show-share-menu.d.ts +1 -1
- package/types/modules/share/types.d.ts +2 -4
- package/dist/devtools/browser-dev-host/assets/workbench-state-D-1U0JRq.js +0 -5
- package/dist/templates/vue3-vite-ts/README.md.ejs +0 -47
- package/dist/templates/vue3-vite-ts/index.html.ejs +0 -12
- package/dist/templates/vue3-vite-ts/package.json.ejs +0 -33
- package/dist/templates/vue3-vite-ts/src/App.vue +0 -78
- package/dist/templates/vue3-vite-ts/src/__tests__/App.spec.ts +0 -148
- package/dist/templates/vue3-vite-ts/src/auth-handoff.ts +0 -46
- package/dist/templates/vue3-vite-ts/src/main.ts +0 -5
- package/dist/templates/vue3-vite-ts/src/styles.css +0 -60
- package/dist/templates/vue3-vite-ts/src/vite-env.d.ts +0 -1
- package/dist/templates/vue3-vite-ts/tsconfig.app.json +0 -17
- package/dist/templates/vue3-vite-ts/tsconfig.json +0 -11
- package/dist/templates/vue3-vite-ts/tsconfig.node.json +0 -11
- package/dist/templates/vue3-vite-ts/vitest.config.ts +0 -10
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@ SDK 只提供面向小程序开发者的稳定接口,不提供客户端内部
|
|
|
13
13
|
### 创建新项目
|
|
14
14
|
|
|
15
15
|
```bash
|
|
16
|
-
npx @heybox/hb-sdk@
|
|
16
|
+
npx @heybox/hb-sdk@alpha create my-miniapp
|
|
17
17
|
cd my-miniapp
|
|
18
18
|
npm install
|
|
19
19
|
npm run dev
|
|
@@ -21,6 +21,8 @@ npm run dev
|
|
|
21
21
|
|
|
22
22
|
脚手架已包含 SDK、Vite 配置和常用开发命令。浏览器调试通过后,再从调试台的二维码入口使用手机小黑盒 APP 验收。
|
|
23
23
|
|
|
24
|
+
当前 `0.8` 模板位于 alpha 发布线;稳定版本发布后,创建命令会恢复使用 `@latest`。
|
|
25
|
+
|
|
24
26
|
### 接入已有项目
|
|
25
27
|
|
|
26
28
|
```bash
|
|
@@ -212,7 +214,7 @@ SDK 还提供 `getHandshakeState()` / `onHandshakeStateChange()` 管理持久握
|
|
|
212
214
|
|
|
213
215
|
## 分享扩展数据
|
|
214
216
|
|
|
215
|
-
|
|
217
|
+
`share.showShareMenu()` 的落地页固定为当前小程序的 `common_share`,不接受自定义 `url`。分享和复制链接可以携带小程序自行定义的页面状态:
|
|
216
218
|
|
|
217
219
|
```ts
|
|
218
220
|
await hbSDK.share.showShareMenu({
|
|
@@ -270,6 +272,8 @@ hb-sdk remote deploy --release-note "本次更新说明"
|
|
|
270
272
|
| `hb-sdk build` | 执行生产构建与产物校验,不包含类型检查 |
|
|
271
273
|
| `hb-sdk remote deploy` | 构建、上传并提交当前版本审核 |
|
|
272
274
|
|
|
275
|
+
`hb-sdk create` 默认生成可直接删除的 Vanilla JavaScript + Vite HelloWorld,只保留 SDK Toast 示例、三端 Manifest 和开发/构建/部署命令,不绑定业务框架或项目内测试工具。
|
|
276
|
+
|
|
273
277
|
`hb-sdk dev` 会启动 Vue 3 Browser Dev Host。左侧诊断面板集中展示调用日志、当前小程序作用域内的 Storage 快照和问题,右侧设备预览可在 iPhone 16 Pro Max(`440 x 956`)与 Pixel 9 Pro(`410 x 914`)间切换。切换预设只改变设备外框和 viewport,不会重新加载 iframe 或重启 Runtime;授权与操作弹窗、Toast、Loading 和振动反馈都限制在预览框内。
|
|
274
278
|
|
|
275
279
|
浏览器调试入口不要求 CLI 登录或项目绑定;需要账号或远端配置的能力会按当前可用上下文返回结果或明确失败。调试台不提供权限修改入口,远端权限快照始终是 Runtime 的规范输入。手机验收统一从右上角二维码入口进入,选择手机可达的局域网网卡后扫码;二维码使用 `open_inapp` 与 `heybox://` `openWindow` 包装的短链。完整操作见 [CLI 指南](https://docs.xiaoheihe.cn/hb_sdk/guide/cli),实现与安全边界由 [Runtime Host 迁移](./docs/runtime-host-migration.md) 维护。
|
|
@@ -5,8 +5,8 @@ var fs = require('node:fs/promises');
|
|
|
5
5
|
var path = require('node:path');
|
|
6
6
|
var runtimePermissionEnv = require('./runtime-permission-env-CjsCe5bp.cjs');
|
|
7
7
|
var runtimeGate = require('./runtime-gate-DFjw66kF.cjs');
|
|
8
|
-
var index = require('./index-
|
|
9
|
-
var projectVite = require('./project-vite-
|
|
8
|
+
var index = require('./index-BwGBr1ZA.cjs');
|
|
9
|
+
var projectVite = require('./project-vite-BIPrOtRO.cjs');
|
|
10
10
|
require('node:async_hooks');
|
|
11
11
|
require('node:module');
|
|
12
12
|
require('path');
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var session = require('./session-
|
|
3
|
+
var session = require('./session-B6Mo9eYW.cjs');
|
|
4
4
|
var runtimePermissionEnv = require('./runtime-permission-env-CjsCe5bp.cjs');
|
|
5
5
|
var fs$1 = require('node:fs');
|
|
6
6
|
var fs = require('node:fs/promises');
|
|
@@ -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-BwGBr1ZA.cjs');
|
|
9
9
|
require('node:module');
|
|
10
10
|
require('os');
|
|
11
11
|
require('readline');
|
|
@@ -1238,7 +1238,7 @@ function requireEjs () {
|
|
|
1238
1238
|
|
|
1239
1239
|
var ejsExports = requireEjs();
|
|
1240
1240
|
|
|
1241
|
-
const TEMPLATE_NAME = '
|
|
1241
|
+
const TEMPLATE_NAME = 'vanilla-vite-js';
|
|
1242
1242
|
const TEMPLATE_ROOT_CANDIDATES = [
|
|
1243
1243
|
path.resolve(__dirname, 'templates', TEMPLATE_NAME),
|
|
1244
1244
|
path.resolve(__dirname, '..', 'templates', TEMPLATE_NAME),
|
|
@@ -8,16 +8,16 @@ 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-
|
|
11
|
+
var context = require('./context-CKzZxKbF.cjs');
|
|
12
12
|
var undici = require('undici');
|
|
13
13
|
var fs$1 = require('node:fs/promises');
|
|
14
|
-
var index = require('./index-
|
|
14
|
+
var index = require('./index-BwGBr1ZA.cjs');
|
|
15
15
|
var require$$0$1 = require('crypto');
|
|
16
16
|
var require$$0 = require('buffer');
|
|
17
|
-
var session = require('./session-
|
|
17
|
+
var session = require('./session-B6Mo9eYW.cjs');
|
|
18
18
|
var browser = require('./browser-RAy8e8cV.cjs');
|
|
19
|
-
var projectVite = require('./project-vite-
|
|
20
|
-
var version = require('./version-
|
|
19
|
+
var projectVite = require('./project-vite-BIPrOtRO.cjs');
|
|
20
|
+
var version = require('./version-DDB_btOG.cjs');
|
|
21
21
|
var runtimePermissionEnv = require('./runtime-permission-env-CjsCe5bp.cjs');
|
|
22
22
|
|
|
23
23
|
var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
|
|
@@ -1605,7 +1605,7 @@ async function selectAvailablePort(options) {
|
|
|
1605
1605
|
port: createPortCandidates(options.startPort, maxAttempts),
|
|
1606
1606
|
});
|
|
1607
1607
|
if (port < options.startPort || port >= options.startPort + maxAttempts) {
|
|
1608
|
-
throw new Error(
|
|
1608
|
+
throw new Error(`无法找到可用端口(${options.label}),起始端口:${options.startPort}`);
|
|
1609
1609
|
}
|
|
1610
1610
|
return port;
|
|
1611
1611
|
}
|
|
@@ -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-Dik2zr5R.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-Dik2zr5R.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'),
|
|
@@ -2968,7 +2968,7 @@ async function listenHttpServer(server, options, getPortImpl, listen) {
|
|
|
2968
2968
|
const port = await selectAvailablePort({
|
|
2969
2969
|
getPort: getPortImpl,
|
|
2970
2970
|
host: DEV_PORT_PROBE_HOST,
|
|
2971
|
-
label: '
|
|
2971
|
+
label: '浏览器调试页服务',
|
|
2972
2972
|
maxAttempts: lastCandidate - nextCandidate + 1,
|
|
2973
2973
|
startPort: nextCandidate,
|
|
2974
2974
|
});
|
|
@@ -2987,7 +2987,7 @@ async function listenHttpServer(server, options, getPortImpl, listen) {
|
|
|
2987
2987
|
nextCandidate = port + 1;
|
|
2988
2988
|
}
|
|
2989
2989
|
}
|
|
2990
|
-
throw lastAddressInUseError ?? new Error(
|
|
2990
|
+
throw lastAddressInUseError ?? new Error(`无法找到可用浏览器调试页服务端口,起始端口:${options.port}`);
|
|
2991
2991
|
}
|
|
2992
2992
|
const listenBrowserDevHostServer = (server, options) => new Promise((resolve, reject) => {
|
|
2993
2993
|
const onError = (error) => {
|
|
@@ -10895,7 +10895,7 @@ function assertNodeRuntimeCapabilities(ctx, settings) {
|
|
|
10895
10895
|
function createNodeRealtimeDriverRegistry() {
|
|
10896
10896
|
const registry = createRuntimeRealtimeDriverRegistry();
|
|
10897
10897
|
registry.registerLazy('node-websocket', async () => {
|
|
10898
|
-
const mod = await Promise.resolve().then(function () { return require('./index.esm-
|
|
10898
|
+
const mod = await Promise.resolve().then(function () { return require('./index.esm-BYifBABc.cjs'); });
|
|
10899
10899
|
return mod.createNodeWebSocketRuntimeDriver();
|
|
10900
10900
|
});
|
|
10901
10901
|
return registry;
|
|
@@ -14960,7 +14960,7 @@ const DEFAULT_BROWSER_DEV_HOST_PORT = 5174;
|
|
|
14960
14960
|
const DEFAULT_DEV_CONTEXT_TIMEOUT_MS = 3000;
|
|
14961
14961
|
const DEV_LISTEN_HOST = '0.0.0.0';
|
|
14962
14962
|
const LOCAL_DEV_URL_HOST = '127.0.0.1';
|
|
14963
|
-
//
|
|
14963
|
+
// 与 Heybox H5 Vite 插件共享,让 hb-sdk 统一管理启动输出。
|
|
14964
14964
|
const MANAGED_DEV_OUTPUT_ENV = 'HEYBOX_DEV_SERVER_MANAGED_OUTPUT';
|
|
14965
14965
|
const VITE_LOG_LEVEL = 'warn';
|
|
14966
14966
|
async function runDevCommand(options, runtime = {}) {
|
|
@@ -14975,7 +14975,7 @@ async function runDevCommand(options, runtime = {}) {
|
|
|
14975
14975
|
const appPort = await selectAvailablePort({
|
|
14976
14976
|
getPort: getPortImpl,
|
|
14977
14977
|
host: DEV_LISTEN_HOST,
|
|
14978
|
-
label: 'Vite
|
|
14978
|
+
label: 'Vite 开发服务器',
|
|
14979
14979
|
startPort: options.port ?? DEFAULT_APP_PORT,
|
|
14980
14980
|
});
|
|
14981
14981
|
const resolvedOptions = {
|
|
@@ -14992,8 +14992,8 @@ async function runDevCommand(options, runtime = {}) {
|
|
|
14992
14992
|
timeoutMs: runtime.devContextTimeoutMs ?? DEFAULT_DEV_CONTEXT_TIMEOUT_MS,
|
|
14993
14993
|
});
|
|
14994
14994
|
const launchRuntimePermissions = context.createBrowserDevRuntimePermissions(context.createBrowserDevPermissionState(devLaunchContext));
|
|
14995
|
-
const vite = await logger
|
|
14996
|
-
const appServer = await logger
|
|
14995
|
+
const vite = await runDevStartupTask(logger, '正在加载项目 Vite', () => projectVite.loadProjectVite(projectRoot), '已加载项目 Vite');
|
|
14996
|
+
const appServer = await runDevStartupTask(logger, '正在创建 Vite 开发服务器', () => runtimePermissionEnv.withMiniappPlatformCspEnv(context.shouldSkipMiniappPlatformCsp(devLaunchContext.runtimePermissions), () => withManagedDevOutputEnv(() => vite.createServer(createViteServerOptions(projectRoot, resolvedOptions)), runtime.env), runtime.env), '已创建 Vite 开发服务器');
|
|
14997
14997
|
const mobileDevContextUrlsByOrigin = new Map();
|
|
14998
14998
|
let currentLocalDevLaunchToken = devLaunchContext.localDevLaunchToken;
|
|
14999
14999
|
appServer.middlewares.use((request, response, next) => {
|
|
@@ -15007,12 +15007,8 @@ async function runDevCommand(options, runtime = {}) {
|
|
|
15007
15007
|
if (!handled)
|
|
15008
15008
|
next();
|
|
15009
15009
|
});
|
|
15010
|
-
await logger
|
|
15011
|
-
|
|
15012
|
-
});
|
|
15013
|
-
const appUrl = await logger.task('正在探测小程序入口', () => resolveViteAppUrl(appServer, resolvedOptions, fetchImpl), {
|
|
15014
|
-
successText: '已确定小程序入口',
|
|
15015
|
-
});
|
|
15010
|
+
await runDevStartupTask(logger, '正在启动 Vite 开发服务器', () => appServer.listen(appPort), 'Vite 开发服务器已启动');
|
|
15011
|
+
const appUrl = await runDevStartupTask(logger, '正在探测小程序入口', () => resolveViteAppUrl(appServer, resolvedOptions, fetchImpl), '已确定小程序入口');
|
|
15016
15012
|
const buildLanAddresses = () => createLanAddressCandidates({
|
|
15017
15013
|
appUrl,
|
|
15018
15014
|
devContextUrlsByMiniUrlOrigin: mobileDevContextUrlsByOrigin,
|
|
@@ -15027,7 +15023,7 @@ async function runDevCommand(options, runtime = {}) {
|
|
|
15027
15023
|
const closers = [() => appServer.close()];
|
|
15028
15024
|
let browserDevHost;
|
|
15029
15025
|
try {
|
|
15030
|
-
browserDevHost = await logger
|
|
15026
|
+
browserDevHost = await runDevStartupTask(logger, '正在启动浏览器调试页服务', () => startBrowserDevHostServer({
|
|
15031
15027
|
appUrl,
|
|
15032
15028
|
devContext: devLaunchContext,
|
|
15033
15029
|
fetchImpl,
|
|
@@ -15048,7 +15044,7 @@ async function runDevCommand(options, runtime = {}) {
|
|
|
15048
15044
|
root: runtime.browserDevHostRoot,
|
|
15049
15045
|
rootCandidates: runtime.browserDevHostRootCandidates,
|
|
15050
15046
|
runtimePermissions: devLaunchContext.runtimePermissions,
|
|
15051
|
-
}),
|
|
15047
|
+
}), '浏览器调试页服务已启动');
|
|
15052
15048
|
}
|
|
15053
15049
|
catch (error) {
|
|
15054
15050
|
await closeAll(closers);
|
|
@@ -15079,23 +15075,29 @@ async function runDevCommand(options, runtime = {}) {
|
|
|
15079
15075
|
});
|
|
15080
15076
|
closers.push(tokenSession.close);
|
|
15081
15077
|
}
|
|
15082
|
-
logger.success('
|
|
15083
|
-
logger.info(
|
|
15084
|
-
logger.info(
|
|
15085
|
-
logger.info('
|
|
15078
|
+
logger.success('本地调试已启动');
|
|
15079
|
+
logger.info(`调试页:${browserDevHost.url}`);
|
|
15080
|
+
logger.info(`小程序地址:${appUrl}`);
|
|
15081
|
+
logger.info('手机调试:请在调试页扫码');
|
|
15086
15082
|
if (options.open !== false) {
|
|
15087
15083
|
logger.debug('正在打开浏览器调试页');
|
|
15088
15084
|
void openUrl(browserDevHost.url);
|
|
15089
15085
|
}
|
|
15090
15086
|
installShutdownHandlers(closers, runtime.process ?? process);
|
|
15091
15087
|
}
|
|
15088
|
+
function runDevStartupTask(logger, text, action, successText) {
|
|
15089
|
+
if (!logger.verbose) {
|
|
15090
|
+
return action();
|
|
15091
|
+
}
|
|
15092
|
+
return logger.task(text, () => action(), { successText });
|
|
15093
|
+
}
|
|
15092
15094
|
async function loadDevLaunchContext(options) {
|
|
15093
15095
|
const miniProgramId = await context.readBoundMiniProgramId(options.projectRoot);
|
|
15094
15096
|
if (!miniProgramId) {
|
|
15095
15097
|
throw new Error('hb-sdk dev 需要绑定小程序。请先运行 hb-sdk remote create 或 hb-sdk remote bind <mini-program-id>。');
|
|
15096
15098
|
}
|
|
15097
15099
|
try {
|
|
15098
|
-
const { detail, miniProgramId: verifiedMiniProgramId } = await options.logger
|
|
15100
|
+
const { detail, miniProgramId: verifiedMiniProgramId } = await runDevStartupTask(options.logger, '正在读取远端小程序权限', () => loadRemoteDevContextWithTimeout({
|
|
15099
15101
|
fetchImpl: options.fetchImpl,
|
|
15100
15102
|
load: (fetchImpl) => context.getBoundMiniProgram({
|
|
15101
15103
|
cwd: options.projectRoot,
|
|
@@ -15103,7 +15105,7 @@ async function loadDevLaunchContext(options) {
|
|
|
15103
15105
|
fetchImpl,
|
|
15104
15106
|
}),
|
|
15105
15107
|
timeoutMs: options.timeoutMs,
|
|
15106
|
-
}),
|
|
15108
|
+
}), '已读取远端小程序权限');
|
|
15107
15109
|
return {
|
|
15108
15110
|
context: {
|
|
15109
15111
|
source: 'remote',
|
|
@@ -15303,25 +15305,30 @@ async function closeAll(closers) {
|
|
|
15303
15305
|
function startLocalDevLaunchTokenSession(options) {
|
|
15304
15306
|
let closed = false;
|
|
15305
15307
|
let expirationTimer;
|
|
15308
|
+
let hasReportedTokenFailure = false;
|
|
15306
15309
|
let refreshTimer;
|
|
15307
15310
|
const refresh = async () => {
|
|
15308
15311
|
try {
|
|
15309
15312
|
const issued = await issueLocalDevLaunchToken(options);
|
|
15310
15313
|
if (closed)
|
|
15311
15314
|
return;
|
|
15312
|
-
if (!issued) {
|
|
15313
|
-
schedule(options.timeoutMs);
|
|
15314
|
-
return;
|
|
15315
|
-
}
|
|
15316
15315
|
options.onToken(issued.token);
|
|
15317
15316
|
const ttl = Math.max(0, issued.expiresAt - Date.now());
|
|
15318
15317
|
scheduleExpiration(ttl);
|
|
15319
15318
|
schedule(Math.max(1_000, Math.floor(ttl * 0.8)));
|
|
15319
|
+
if (hasReportedTokenFailure) {
|
|
15320
|
+
hasReportedTokenFailure = false;
|
|
15321
|
+
options.logger.success('手机扫码调试已恢复');
|
|
15322
|
+
}
|
|
15320
15323
|
}
|
|
15321
15324
|
catch (error) {
|
|
15322
15325
|
if (closed)
|
|
15323
15326
|
return;
|
|
15324
|
-
|
|
15327
|
+
if (!hasReportedTokenFailure) {
|
|
15328
|
+
options.logger.warn('手机扫码调试凭证获取失败,将自动重试');
|
|
15329
|
+
}
|
|
15330
|
+
hasReportedTokenFailure = true;
|
|
15331
|
+
options.logger.debug(`手机扫码调试凭证获取失败,详细原因:${index.readRedactedErrorMessage(error, { verbose: true })}`);
|
|
15325
15332
|
schedule(options.timeoutMs);
|
|
15326
15333
|
}
|
|
15327
15334
|
};
|
|
@@ -15352,31 +15359,25 @@ function startLocalDevLaunchTokenSession(options) {
|
|
|
15352
15359
|
};
|
|
15353
15360
|
}
|
|
15354
15361
|
async function issueLocalDevLaunchToken(options) {
|
|
15355
|
-
|
|
15356
|
-
|
|
15357
|
-
|
|
15358
|
-
|
|
15359
|
-
|
|
15360
|
-
|
|
15361
|
-
|
|
15362
|
-
|
|
15363
|
-
|
|
15364
|
-
|
|
15365
|
-
|
|
15366
|
-
|
|
15367
|
-
|
|
15368
|
-
throw new Error('响应缺少 token');
|
|
15369
|
-
}
|
|
15370
|
-
const expiresAt = normalizeExpiresAt(issued.expires_at);
|
|
15371
|
-
if (!expiresAt || expiresAt <= Date.now()) {
|
|
15372
|
-
throw new Error('响应缺少有效 expires_at');
|
|
15373
|
-
}
|
|
15374
|
-
return { expiresAt, token };
|
|
15362
|
+
const issued = await loadRemoteDevContextWithTimeout({
|
|
15363
|
+
fetchImpl: options.fetchImpl,
|
|
15364
|
+
timeoutMs: options.timeoutMs,
|
|
15365
|
+
load: (fetchImpl) => context.createLocalDevLaunchToken({
|
|
15366
|
+
cwd: options.projectRoot,
|
|
15367
|
+
env: options.env,
|
|
15368
|
+
fetchImpl,
|
|
15369
|
+
miniProgramId: options.miniProgramId,
|
|
15370
|
+
}),
|
|
15371
|
+
});
|
|
15372
|
+
const token = typeof issued.token === 'string' ? issued.token.trim() : '';
|
|
15373
|
+
if (!token) {
|
|
15374
|
+
throw new Error('响应缺少 token');
|
|
15375
15375
|
}
|
|
15376
|
-
|
|
15377
|
-
|
|
15378
|
-
|
|
15376
|
+
const expiresAt = normalizeExpiresAt(issued.expires_at);
|
|
15377
|
+
if (!expiresAt || expiresAt <= Date.now()) {
|
|
15378
|
+
throw new Error('响应缺少有效 expires_at');
|
|
15379
15379
|
}
|
|
15380
|
+
return { expiresAt, token };
|
|
15380
15381
|
}
|
|
15381
15382
|
function normalizeExpiresAt(value) {
|
|
15382
15383
|
if (typeof value !== 'number' || !Number.isFinite(value) || value <= 0)
|
|
@@ -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-BwGBr1ZA.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-BwGBr1ZA.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-BwGBr1ZA.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-BwGBr1ZA.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-BwGBr1ZA.cjs', document.baseURI).href)));
|
|
250
250
|
function __require() { return require$1("node:process"); }
|
|
251
251
|
|
|
252
252
|
var help = {};
|
|
@@ -12833,6 +12833,7 @@ const UPDATE_CHECK_TTL_MS = 24 * 60 * 60 * 1000;
|
|
|
12833
12833
|
const DEFAULT_TIMEOUT_MS = 1500;
|
|
12834
12834
|
const UPDATE_CHECK_CACHE_FILE = 'update-check.json';
|
|
12835
12835
|
const NPM_REGISTRY_URL = `https://registry.npmjs.org/${encodeURIComponent(HB_SDK_PACKAGE_NAME)}`;
|
|
12836
|
+
const PUBLIC_CHANGELOG_URL = 'https://docs.xiaoheihe.cn/hb_sdk/changelog/';
|
|
12836
12837
|
const paths = envPaths('hb-sdk', { suffix: '' });
|
|
12837
12838
|
const PACKAGE_JSON_CANDIDATES$1 = [
|
|
12838
12839
|
path.resolve(__dirname, '..', 'package.json'),
|
|
@@ -12887,14 +12888,23 @@ async function getUpdateReminder(options = {}) {
|
|
|
12887
12888
|
return createUpdateReminder(currentVersion, latestVersion);
|
|
12888
12889
|
}
|
|
12889
12890
|
function formatUpdateReminder(reminder) {
|
|
12890
|
-
|
|
12891
|
+
const latestVersion = parseSemver(reminder.latestVersion);
|
|
12892
|
+
const anchor = latestVersion
|
|
12893
|
+
? `v${latestVersion.major}-${latestVersion.minor}-${latestVersion.patch}`
|
|
12894
|
+
: `v${reminder.latestVersion.replaceAll('.', '-')}`;
|
|
12895
|
+
const changelogUrl = `${PUBLIC_CHANGELOG_URL}#${anchor}`;
|
|
12896
|
+
return `发现新版 ${HB_SDK_PACKAGE_NAME}: ${reminder.currentVersion} -> ${reminder.latestVersion}。升级命令: npm i -D ${HB_SDK_PACKAGE_NAME}@latest;更新内容: ${changelogUrl}`;
|
|
12891
12897
|
}
|
|
12892
12898
|
function isVersionGreater(version, baseline) {
|
|
12893
12899
|
const compared = compareSemver(version, baseline);
|
|
12894
12900
|
return compared !== null && compared > 0;
|
|
12895
12901
|
}
|
|
12896
12902
|
function createUpdateReminder(currentVersion, latestVersion) {
|
|
12897
|
-
|
|
12903
|
+
const parsedLatestVersion = latestVersion ? parseSemver(latestVersion) : null;
|
|
12904
|
+
if (!latestVersion ||
|
|
12905
|
+
!parsedLatestVersion ||
|
|
12906
|
+
parsedLatestVersion.prerelease.length > 0 ||
|
|
12907
|
+
!isVersionGreater(latestVersion, currentVersion)) {
|
|
12898
12908
|
return null;
|
|
12899
12909
|
}
|
|
12900
12910
|
return {
|
|
@@ -13343,7 +13353,7 @@ function getPathname(pathWithQuery) {
|
|
|
13343
13353
|
}
|
|
13344
13354
|
|
|
13345
13355
|
const CLI_VERSION_PLACEHOLDER = ['__HB', 'SDK', 'CLI', 'VERSION__'].join('_');
|
|
13346
|
-
const BUILT_CLI_VERSION = '0.8.0-alpha.
|
|
13356
|
+
const BUILT_CLI_VERSION = '0.8.0-alpha.9';
|
|
13347
13357
|
const PACKAGE_JSON_CANDIDATES = [
|
|
13348
13358
|
path.resolve(__dirname, '..', '..', 'package.json'),
|
|
13349
13359
|
path.resolve(__dirname, '..', 'package.json'),
|
|
@@ -13429,10 +13439,11 @@ function createCliProgram(overrides = {}) {
|
|
|
13429
13439
|
}, handlers.printUpdateReminder, resolveLogger));
|
|
13430
13440
|
addVerboseOption(program
|
|
13431
13441
|
.command('dev')
|
|
13432
|
-
.description('启动当前小程序项目的 Vite
|
|
13433
|
-
.option('--port <port>', '
|
|
13434
|
-
.option('--browser-dev-host-port <port>', '
|
|
13435
|
-
.option('--no-open', '不自动打开浏览器调试页')
|
|
13442
|
+
.description('启动当前小程序项目的 Vite 开发服务器和浏览器调试页服务')
|
|
13443
|
+
.option('--port <port>', '小程序开发服务器端口', parsePositivePort)
|
|
13444
|
+
.option('--browser-dev-host-port <port>', '浏览器调试页服务端口', parsePositivePort)
|
|
13445
|
+
.option('--no-open', '不自动打开浏览器调试页')
|
|
13446
|
+
.helpOption('-h, --help', '显示命令帮助')).action(withUpdateReminder(async (options, command) => {
|
|
13436
13447
|
const logger = resolveLogger(command);
|
|
13437
13448
|
await handlers.runDevCommand(options, { logger });
|
|
13438
13449
|
}, handlers.printUpdateReminder, resolveLogger));
|
|
@@ -13690,39 +13701,39 @@ function createCommandLoggerResolver(options) {
|
|
|
13690
13701
|
};
|
|
13691
13702
|
}
|
|
13692
13703
|
const defaultClearLoginStatus = async (...args) => {
|
|
13693
|
-
const { clearLoginStatus } = await Promise.resolve().then(function () { return require('./login-
|
|
13704
|
+
const { clearLoginStatus } = await Promise.resolve().then(function () { return require('./login-Dr9lclu3.cjs'); });
|
|
13694
13705
|
return clearLoginStatus(...args);
|
|
13695
13706
|
};
|
|
13696
13707
|
const defaultLoginToHeybox = async (...args) => {
|
|
13697
|
-
const { loginToHeybox } = await Promise.resolve().then(function () { return require('./login-
|
|
13708
|
+
const { loginToHeybox } = await Promise.resolve().then(function () { return require('./login-Dr9lclu3.cjs'); });
|
|
13698
13709
|
return loginToHeybox(...args);
|
|
13699
13710
|
};
|
|
13700
13711
|
const defaultPrintLoginStatus = async (...args) => {
|
|
13701
|
-
const { printLoginStatus } = await Promise.resolve().then(function () { return require('./login-
|
|
13712
|
+
const { printLoginStatus } = await Promise.resolve().then(function () { return require('./login-Dr9lclu3.cjs'); });
|
|
13702
13713
|
return printLoginStatus(...args);
|
|
13703
13714
|
};
|
|
13704
13715
|
const defaultRunBuildCommand = async (...args) => {
|
|
13705
|
-
const { runBuildCommand } = await Promise.resolve().then(function () { return require('./build-
|
|
13716
|
+
const { runBuildCommand } = await Promise.resolve().then(function () { return require('./build-DkokKVNy.cjs'); });
|
|
13706
13717
|
return runBuildCommand(...args);
|
|
13707
13718
|
};
|
|
13708
13719
|
const defaultRunCreateCommand = async (...args) => {
|
|
13709
|
-
const { runCreateCommand } = await Promise.resolve().then(function () { return require('./create-
|
|
13720
|
+
const { runCreateCommand } = await Promise.resolve().then(function () { return require('./create-BQy5Jdmu.cjs'); });
|
|
13710
13721
|
return runCreateCommand(...args);
|
|
13711
13722
|
};
|
|
13712
13723
|
const defaultRunDevCommand = async (...args) => {
|
|
13713
|
-
const { runDevCommand } = await Promise.resolve().then(function () { return require('./dev-
|
|
13724
|
+
const { runDevCommand } = await Promise.resolve().then(function () { return require('./dev-Dik2zr5R.cjs'); }).then(function (n) { return n.dev; });
|
|
13714
13725
|
return runDevCommand(...args);
|
|
13715
13726
|
};
|
|
13716
13727
|
const defaultRunDoctorCommand = async (...args) => {
|
|
13717
|
-
const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-
|
|
13728
|
+
const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-Byr4uwKG.cjs'); });
|
|
13718
13729
|
return runDoctorCommand(...args);
|
|
13719
13730
|
};
|
|
13720
13731
|
const defaultRunSkillInstallCommand = async (...args) => {
|
|
13721
|
-
const { runSkillInstallCommand } = await Promise.resolve().then(function () { return require('./skill-
|
|
13732
|
+
const { runSkillInstallCommand } = await Promise.resolve().then(function () { return require('./skill-f90sxv28.cjs'); });
|
|
13722
13733
|
return runSkillInstallCommand(...args);
|
|
13723
13734
|
};
|
|
13724
13735
|
const defaultRunRemoteCommand = async (...args) => {
|
|
13725
|
-
const { runRemoteCommand } = await Promise.resolve().then(function () { return require('./remote-
|
|
13736
|
+
const { runRemoteCommand } = await Promise.resolve().then(function () { return require('./remote-DXxyA14a.cjs'); });
|
|
13726
13737
|
return runRemoteCommand(...args);
|
|
13727
13738
|
};
|
|
13728
13739
|
function resolveStandaloneLogger(options, verbose) {
|
|
@@ -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-BwGBr1ZA.cjs');
|
|
15
|
+
var dev = require('./dev-Dik2zr5R.cjs');
|
|
16
16
|
require('node:module');
|
|
17
17
|
require('node:fs');
|
|
18
18
|
require('node:fs/promises');
|
|
@@ -27,8 +27,8 @@ require('node:net');
|
|
|
27
27
|
require('node:crypto');
|
|
28
28
|
require('node:dns/promises');
|
|
29
29
|
require('node:http');
|
|
30
|
-
require('./context-
|
|
31
|
-
require('./session-
|
|
30
|
+
require('./context-CKzZxKbF.cjs');
|
|
31
|
+
require('./session-B6Mo9eYW.cjs');
|
|
32
32
|
require('fs');
|
|
33
33
|
require('constants');
|
|
34
34
|
require('./runtime-permission-env-CjsCe5bp.cjs');
|
|
@@ -40,8 +40,8 @@ require('node:buffer');
|
|
|
40
40
|
require('node:url');
|
|
41
41
|
require('node:util');
|
|
42
42
|
require('node:child_process');
|
|
43
|
-
require('./project-vite-
|
|
44
|
-
require('./version-
|
|
43
|
+
require('./project-vite-BIPrOtRO.cjs');
|
|
44
|
+
require('./version-DDB_btOG.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-B6Mo9eYW.cjs');
|
|
7
7
|
var browser = require('./browser-RAy8e8cV.cjs');
|
|
8
|
-
var index = require('./index-
|
|
8
|
+
var index = require('./index-BwGBr1ZA.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-BwGBr1ZA.cjs');
|
|
9
9
|
|
|
10
10
|
function findProjectRoot(startDir) {
|
|
11
11
|
let current = path.resolve(startDir);
|
|
@@ -1,8 +1,8 @@
|
|
|
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-BwGBr1ZA.cjs');
|
|
5
|
+
var session = require('./session-B6Mo9eYW.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');
|
|
@@ -10,7 +10,7 @@ var path = require('node:path');
|
|
|
10
10
|
var runtimePermissionEnv = require('./runtime-permission-env-CjsCe5bp.cjs');
|
|
11
11
|
var runtimeGate = require('./runtime-gate-DFjw66kF.cjs');
|
|
12
12
|
var node_crypto = require('node:crypto');
|
|
13
|
-
var context = require('./context-
|
|
13
|
+
var context = require('./context-CKzZxKbF.cjs');
|
|
14
14
|
require('node:module');
|
|
15
15
|
require('path');
|
|
16
16
|
require('os');
|
|
@@ -271,7 +271,7 @@ function createDefaultCosClient(uploadToken, COS) {
|
|
|
271
271
|
};
|
|
272
272
|
}
|
|
273
273
|
async function loadCosConstructor() {
|
|
274
|
-
const cosModule = await Promise.resolve().then(function () { return require('./index-
|
|
274
|
+
const cosModule = await Promise.resolve().then(function () { return require('./index-Cl0XaX8e.cjs'); }).then(function (n) { return n.index; });
|
|
275
275
|
return cosModule.default;
|
|
276
276
|
}
|
|
277
277
|
function formatSize(bytes) {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var path = require('node:path');
|
|
4
|
-
var version = require('./version-
|
|
4
|
+
var version = require('./version-DDB_btOG.cjs');
|
|
5
5
|
var childProcess = require('node:child_process');
|
|
6
6
|
var fs = require('node:fs/promises');
|
|
7
|
-
var index = require('./index-
|
|
7
|
+
var index = require('./index-BwGBr1ZA.cjs');
|
|
8
8
|
require('node:module');
|
|
9
9
|
require('node:fs');
|
|
10
10
|
require('path');
|