@heybox/hb-sdk 0.5.18 → 0.6.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/README.md +29 -25
- package/dist/cli-chunks/{context-CKJlNcSN.cjs → context-D0BowvGu.cjs} +37 -1
- package/dist/cli-chunks/{create-OZOIdeBz.cjs → create-C0afRvs9.cjs} +1 -1
- package/dist/cli-chunks/{dev-DXz8izSJ.cjs → dev-CN307p_G.cjs} +117 -3
- package/dist/cli-chunks/{doctor-DjMSJoQ5.cjs → doctor-VW0nKg5q.cjs} +1 -1
- package/dist/cli-chunks/{index-CsOcGUzF.cjs → index-BnCDW-BB.cjs} +21 -16
- package/dist/cli-chunks/{index-Cl5HFTBW.cjs → index-DcZLSI_y.cjs} +2 -2
- package/dist/cli-chunks/{login-Ct-46gLx.cjs → login-BsyENL1d.cjs} +2 -2
- package/dist/cli-chunks/remote-BSvvxvVv.cjs +9905 -0
- package/dist/cli-chunks/{session-dRGPpyS1.cjs → session-0XuUaVOO.cjs} +2 -1
- package/dist/cli.cjs +1 -1
- package/dist/devtools/mock-host/index.html +40 -0
- package/dist/devtools/mock-host/main.js +85 -0
- package/dist/index.cjs.js +232 -4
- package/dist/index.esm.js +233 -3
- package/dist/miniapp-publish.cjs.js +4 -0
- package/dist/miniapp-publish.esm.js +4 -1
- package/dist/protocol.cjs.js +9 -0
- package/dist/protocol.esm.js +7 -1
- package/dist/vite.cjs.js +9159 -22
- package/dist/vite.esm.js +9159 -23
- package/package.json +19 -7
- package/skill/SKILL.md +23 -23
- package/skill/references/api-protocol.md +11 -2
- package/skill/references/api-root.md +148 -23
- package/skill/references/cli.md +15 -15
- package/skill/references/recipes.md +12 -44
- package/skill/references/safety-boundaries.md +1 -2
- package/skill/scripts/sync-references.mjs +2 -2
- package/skill/skill.json +4 -4
- package/types/cli/auth/base-url.d.ts +20 -0
- package/types/cli/config.d.ts +11 -0
- package/types/core/client.d.ts +7 -0
- package/types/core/csp-violation.d.ts +5 -0
- package/types/core/history-observer.d.ts +4 -0
- package/types/core/version.d.ts +2 -0
- package/types/index.d.ts +0 -2
- package/types/miniapp-manifest/schema.d.ts +6 -1
- package/types/miniapp-manifest/sdk-version-policy.d.ts +9 -0
- package/types/miniapp-publish/index.d.ts +1 -0
- package/types/protocol/constants.d.ts +6 -0
- package/types/protocol/types.d.ts +45 -0
- package/types/protocol.d.ts +2 -2
- package/types/vite/html-policy.d.ts +4 -0
- package/types/vite/index.d.ts +23 -3
- package/types/vite/runtime-gate.d.ts +5 -0
- package/types/vite/sdk-version-gate.d.ts +8 -0
- package/dist/cli-chunks/remote-C77axNSw.cjs +0 -1604
package/README.md
CHANGED
|
@@ -332,7 +332,7 @@ await network.request({
|
|
|
332
332
|
|
|
333
333
|
## 生命周期事件
|
|
334
334
|
|
|
335
|
-
SDK
|
|
335
|
+
导入 SDK 根包时会 eager 创建唯一默认实例并立即开始与父容器握手。使用 `on()` 监听父容器派发的小程序事件时不会创建第二个实例;`on()` 会返回取消监听函数,组件卸载或页面销毁时应及时调用。
|
|
336
336
|
|
|
337
337
|
```ts
|
|
338
338
|
import { on } from '@heybox/hb-sdk';
|
|
@@ -390,7 +390,7 @@ try {
|
|
|
390
390
|
| `hb-sdk remote bind <mini-program-id> [--force]` | 校验当前 CLI 用户可管理目标小程序后,再把它绑定到当前项目。 |
|
|
391
391
|
| `hb-sdk remote info` | 查看当前项目绑定的小程序详情及完整只读 Runtime 权限/config。 |
|
|
392
392
|
| `hb-sdk remote allowlist list/add/remove/set ...` | 管理绑定小程序的预览白名单。 |
|
|
393
|
-
| `hb-sdk remote deploy --release-note <text> [--
|
|
393
|
+
| `hb-sdk remote deploy --release-note <text> [--from-version <version>] [--auto-publish]` | 构建、上传并提交当前小程序版本审核;`--from-version` 复用指定历史版本产物。 |
|
|
394
394
|
| `hb-sdk remote versions` | 列出绑定小程序的远端版本。 |
|
|
395
395
|
| `hb-sdk remote preview <version>` | 查看指定版本的远端预览入口。 |
|
|
396
396
|
| `hb-sdk remote release <version> [--yes]` | 发布审核通过的版本;非 TTY 环境必须传 `--yes`。 |
|
|
@@ -431,23 +431,20 @@ try {
|
|
|
431
431
|
1. 校验 `heybox.miniProgramId`、发布日志和登录态。
|
|
432
432
|
2. 读取服务端 current entity 和绑定小程序详情,确认 `detail.entity_id` 与 current entity 一致;主体不一致时直接失败,不触发 precheck、build、upload 或 submit audit。
|
|
433
433
|
3. 普通 remote deploy 读取 `package.json.version`,主体校验通过后、build 前调用 `/mall/developer/user_miniprogram/version/precheck`,入参为 `mini_program_id`、`version`、`release_note`、`auto_publish`。
|
|
434
|
-
4. 触发 `<pm> run build
|
|
435
|
-
5. 解析 `dist/manifest.json`,校验 `version`
|
|
436
|
-
6. `--
|
|
437
|
-
7.
|
|
438
|
-
8.
|
|
439
|
-
9.
|
|
440
|
-
10.
|
|
441
|
-
11.
|
|
442
|
-
12. 全部上传成功后调用 `/mall/developer/user_miniprogram/version/submit_audit`;`--from-version` 路径会直接调用提交审核接口并传入 `source_version`。CLI 输出提交审核成功、发布策略和可用的 preview URL;后端原始失败细节只在 `--verbose` 下展示。
|
|
434
|
+
4. 触发 `<pm> run build`。
|
|
435
|
+
5. 解析 `dist/manifest.json`,校验 `version` 与自动生成的 `sdkVersion` 均为合法 SemVer,自动剥离 BOM;普通 remote deploy 要求业务版本与 precheck 使用的 `package.json.version` 一致。
|
|
436
|
+
6. `--from-version <version>` 会跳过本地 build、`dist/` 读取和 CDN 上传,直接让远端复用指定历史版本产物提交审核。
|
|
437
|
+
7. 遍历 `dist/` 文件,跳过 `manifest.json`、`.DS_Store`、`.map`;遇到 symlink 或 `node_modules` 直接报错。
|
|
438
|
+
8. 校验所有上传路径长度不超过 64,并在任何上传请求发生前限制实际上传产物总大小不超过 100MiB。错误提示中使用 `100MB`,方便开发者理解。
|
|
439
|
+
9. 上传信息、上传凭证和上传回调按批次执行,每批最多 50 个文件;批次串行,批内保持 4 并发上传到 COS。CLI 会校验 CDN 上传信息接口返回的 key 与本地期望 key 完全一致,异常时停止后续批次且不提交审核。
|
|
440
|
+
10. 默认只展示上传阶段和文件总数,例如 `正在上传 137/244 个文件`;`--verbose` 会展示并发数、批次数、当前批次、bucket / region 和逐文件结果,但不会输出 keys、签名、cookie、pkey、token 或临时密钥。
|
|
441
|
+
11. 全部上传成功后调用 `/mall/developer/user_miniprogram/version/submit_audit`;`--from-version` 路径会直接调用提交审核接口并传入 `source_version`。CLI 输出提交审核成功、发布策略和可用的 preview URL;后端原始失败细节只在 `--verbose` 下展示。
|
|
443
442
|
|
|
444
443
|
默认 `auto_publish=false`,审核通过后使用 `hb-sdk remote versions` 查看版本状态,再用 `hb-sdk remote release <version>` 发布;使用 `--auto-publish` 时提交 `auto_publish=true`,审核通过后自动发布。未发布候选版本可通过 `hb-sdk remote allowlist add <heybox_id>` 加入预览白名单,让指定用户在广场看到;正式入口使用 `mini_program_id`,`mini_url` 仅用于本地调试。
|
|
445
444
|
|
|
446
|
-
`--
|
|
445
|
+
`--from-version <version>` 用于复用已经上传过的远端历史版本产物提交新一轮审核。该模式不读取本地 `dist/`,也不会执行 build 或上传;目标审核版本由服务端根据版本表最高 SemVer 自动派生。
|
|
447
446
|
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
`manifest.json` 不会上传到 CDN,只作为 submit audit 请求的 `manifest` 字段提交。这与 Vite 插件文档中的契约一致。名称、icon 和介绍图从 `package.json.heybox.miniProgramProfile` 读取,并随 precheck 和 submit audit 一起提交:
|
|
447
|
+
`manifest.json` 不会上传到 CDN,只作为 submit audit 请求的 `manifest` 字段提交。`sdkVersion` 由 SDK 构建自动生成,业务配置不能覆盖;复用历史 Version Artifact 时继续使用源 Artifact 的 `sdkVersion`。名称、icon 和介绍图从 `package.json.heybox.miniProgramProfile` 读取,并随 precheck 和 submit audit 一起提交:
|
|
451
448
|
|
|
452
449
|
```json
|
|
453
450
|
{
|
|
@@ -491,9 +488,9 @@ hb-sdk remote deploy --env-file .env.local --release-note "本地联调" # 显
|
|
|
491
488
|
hb-sdk remote deploy --env test --service-tag other-tag --release-note "灰度" # 单项 flag 覆盖预设
|
|
492
489
|
```
|
|
493
490
|
|
|
494
|
-
`--env <name>` 会读取项目根下的 `.env.<name>`,`--env-file <path>` 显式指定路径且优先级高于 `--env`;两者也可通过 `HB_SDK_ENV=<name>` 触发。加载遵循 dotenv 惯例:不覆盖进程已有的同名变量,因此 CI
|
|
491
|
+
`--env <name>` 会读取项目根下的 `.env.<name>`,`--env-file <path>` 显式指定路径且优先级高于 `--env`;两者也可通过 `HB_SDK_ENV=<name>` 触发。加载遵循 dotenv 惯例:不覆盖进程已有的同名变量,因此 CI 或命令行显式设置的值优先。使用 `--env <name>` 或 `HB_SDK_ENV=<name>` 执行 `remote deploy` 时,CLI 还会把同一个 `name` 作为 `--mode <name>` 传给项目 build,使 CLI 后端环境与 Vite mode 保持一致。文件仅支持 `KEY=VALUE`、空行和 `#` 注释,不做变量插值;文件不存在时静默跳过。`--verbose` 会打印生效的文件路径和被跳过的 key。
|
|
495
492
|
|
|
496
|
-
`--api-base-url` 优先于 `HB_SDK_API_BASE_URL`,影响 `hb-sdk remote` 里的远端平台后台 API,包括预检、CDN 上传凭证/回调、提交审核、版本、发布、撤回、下架、重新上架、详情和白名单等调用;`--login-base-url` 优先于 `HB_SDK_LOGIN_BASE_URL`,用于 `hb-sdk login` 的登录入口,以及 remote 命令前校验当前 CLI 登录态是否属于同一个登录环境。`--service-tag <tag>` 优先于 `HB_SDK_SERVICE_TAG`,给 Heybox 后台请求附加 `x-rylai-service-tag` header,并复用命中的 tag 追加 `special_tag`
|
|
493
|
+
`--api-base-url` 优先于 `HB_SDK_API_BASE_URL`,影响 `hb-sdk remote` 里的远端平台后台 API,包括预检、CDN 上传凭证/回调、提交审核、版本、发布、撤回、下架、重新上架、详情和白名单等调用;`--login-base-url` 优先于 `HB_SDK_LOGIN_BASE_URL`,用于 `hb-sdk login` 的登录入口,以及 remote 命令前校验当前 CLI 登录态是否属于同一个登录环境。`--service-tag <tag>` 优先于 `HB_SDK_SERVICE_TAG`,给 Heybox 后台请求附加 `x-rylai-service-tag` header,并复用命中的 tag 追加 `special_tag` 请求参数,用于开发环境路由或灰度验证。手动 Vite build 的最低 SDK 版本门禁请求会同时携带该 header 和 query;`remote deploy` 的子构建不执行客户端最低版本门禁。仓库内开发也可继续在 `packages/hb-sdk/src/cli/config.ts` 里按 `@heybox/hb-types` 的 `RylaiServiceTagConfig` 配置 path-prefix 级 `special_tag`。自定义地址只接受 origin,不允许包含 path、query 或 hash;API origin 默认还必须是 Heybox 受信 HTTPS 域名,只有本地联调等场景可显式使用 `--allow-unsafe-api-base-url` 或 `HB_SDK_ALLOW_UNSAFE_API_BASE_URL=1` 放开。日志只输出 origin,不输出带身份和签名参数的完整请求 URL。`hb-sdk doctor`、npm latest 检查、mock host 的 `network.request()` 不受这些配置影响。
|
|
497
494
|
|
|
498
495
|
## hb-sdk remote 命令参考
|
|
499
496
|
|
|
@@ -513,7 +510,7 @@ hb-sdk remote deploy --env test --service-tag other-tag --release-note "灰度"
|
|
|
513
510
|
| `hb-sdk remote allowlist add <heybox-id...>` | 添加十进制 Heybox ID 到预览白名单。 |
|
|
514
511
|
| `hb-sdk remote allowlist remove <heybox-id...>` | 从预览白名单移除非 owner 条目。 |
|
|
515
512
|
| `hb-sdk remote allowlist set <heybox-id...>` | 替换非 owner 白名单条目,并保留平台返回的 owner 语义。 |
|
|
516
|
-
| `hb-sdk remote deploy --release-note <text> [--
|
|
513
|
+
| `hb-sdk remote deploy --release-note <text> [--from-version <version>] [--auto-publish]` | 构建、上传或复用历史产物并提交当前版本审核。 |
|
|
517
514
|
| `hb-sdk remote versions` | 列出当前绑定小程序的远端版本。 |
|
|
518
515
|
| `hb-sdk remote preview <version>` | 查看指定版本的远端预览入口。 |
|
|
519
516
|
| `hb-sdk remote release <version> [--yes]` | 发布审核通过的版本;交互式终端会确认,非 TTY 必须传 `--yes`。 |
|
|
@@ -535,14 +532,13 @@ CLI 登录态只供 CLI 命令访问黑盒接口时复用,不会注入 iframe
|
|
|
535
532
|
|
|
536
533
|
## 能力边界
|
|
537
534
|
|
|
538
|
-
- SDK
|
|
535
|
+
- 导入 SDK 根包时会 eager 创建唯一默认实例并立即开始握手;`ready()` 只等待这次握手结果。
|
|
539
536
|
- `ready()` 只等待已有握手结果,不主动触发新的握手;调用模块能力前会自动等待 `ready()`,但业务仍建议在页面启动阶段显式 `await ready()`,便于集中处理握手失败。
|
|
540
537
|
- `user.getInfo()`、`user.getCurrentUserDetail()`、`user.getCurrentUserProfile()`、`user.getPlatformAccountOverview()`、`user.getPlatformAccountInfo(platform)` 和 `user.getSteamGameList(options)` 不会触发登录;登录必须由业务在用户操作后调用 `auth.login()`。
|
|
541
538
|
- 当前用户详情和平台账号 API 只允许读取当前登录用户,不支持传入 `userid` 查询其他人,也不透传 `/account/home_v2/` 原始响应。
|
|
542
539
|
- 分享、截图、UI、设备、导航、storage 和网络请求只开放稳定窄接口,不透传黑盒客户端内部协议参数。
|
|
543
540
|
- `network.request()` 的 `validateStatus` 只在 SDK 本地执行,不会被序列化给父容器。
|
|
544
541
|
- `on()` 返回取消监听函数;组件卸载或页面销毁时应主动取消监听。
|
|
545
|
-
- 使用 `createMiniProgramSDK()` 创建独立实例后,不再需要时应调用 `destroy()`。
|
|
546
542
|
- 构建产物可以包含 `dist/manifest.json`,业务代码不应自行 fetch 已部署的 manifest;这个文件由发布流水线读取并上送后台。
|
|
547
543
|
|
|
548
544
|
## Manifest
|
|
@@ -551,11 +547,12 @@ CLI 登录态只供 CLI 命令访问黑盒接口时复用,不会注入 iframe
|
|
|
551
547
|
|
|
552
548
|
```json
|
|
553
549
|
{
|
|
554
|
-
"version": "1.2.3"
|
|
550
|
+
"version": "1.2.3",
|
|
551
|
+
"sdkVersion": "0.6.1"
|
|
555
552
|
}
|
|
556
553
|
```
|
|
557
554
|
|
|
558
|
-
`version` 来自小程序项目自身的 `package.json.version
|
|
555
|
+
`version` 来自小程序项目自身的 `package.json.version`,`sdkVersion` 来自当前安装 SDK 的构建版本且不能由业务覆盖。`hb-sdk create` 生成的模板默认已注册插件;现有 Vite 项目可以在 `vite.config.ts` 中手动接入:
|
|
559
556
|
|
|
560
557
|
```ts
|
|
561
558
|
import { miniappManifest } from '@heybox/hb-sdk/vite';
|
|
@@ -569,12 +566,18 @@ export default defineConfig({
|
|
|
569
566
|
|
|
570
567
|
`base: './'` 用于让构建产物里的 JS/CSS/图片资源以 `./assets/...` 相对路径引用,避免小程序资源目录不是站点根路径时访问 `/assets/...` 失败。若没有显式配置 `base`,`miniappManifest()` 也会在 build 时默认补成 `./`。
|
|
571
568
|
|
|
569
|
+
工坊小程序构建产物只能在兼容的小黑盒 Runtime 中启动。普通浏览器直接打开时不会执行标准业务脚本,并会提示在小黑盒 APP 内打开。项目应使用标准 Vite module 入口。
|
|
570
|
+
|
|
571
|
+
插件只接受单页应用:输出目录只能存在入口 `index.html`。build 会用结构化 HTML parser 校验入口,并把平台 CSP 插入 `<head>` 首位;已有 CSP 会原样保留,两份策略按浏览器交集生效。正式策略禁止 `fetch`、XHR、WebSocket、EventSource、Beacon、Worker、iframe、表单和对象加载等浏览器原生出口;业务网络请求应使用 `network.request()`。dev 使用相同策略,只额外放行当前 Vite 的精确 HMR WebSocket 地址。
|
|
572
|
+
|
|
573
|
+
meta refresh、外部 anchor、`dns-prefetch`、`preconnect`、`prerender`、外部资源 URL 和额外 HTML 会使 build 失败。内联 script/style 允许,但 `unsafe-eval` 不允许。`dev` 和手动 Vite build 会读取 `/user_miniprogram/public/sdk_config` 的 `minimumSdkVersion`;最新请求失败时只回退当前 Remote Environment 下 24 小时内的有效缓存,无缓存则默认阻断并提示升级 `@heybox/hb-sdk@latest`。`hb-sdk remote deploy`(包括 `--from-version`)不执行客户端最低版本查询或比较,但仍校验 Manifest 结构并经过服务端 precheck / submit-audit 策略。
|
|
574
|
+
|
|
572
575
|
失败与警告语义:
|
|
573
576
|
|
|
574
577
|
- 读取 `package.json` 失败或 JSON 解析失败:`vite build` 直接失败,并输出具体原因。
|
|
575
578
|
- `package.json.version` 不是非空字符串:`vite build` 直接失败。
|
|
576
|
-
- `package.json.version` 仍是模板默认值 `0.0.0`:`vite build`
|
|
577
|
-
-
|
|
579
|
+
- `package.json.version` 仍是模板默认值 `0.0.0`:`vite build` 直接失败,必须改成实际 SemVer。
|
|
580
|
+
- 版本号不是严格 SemVer、包含 build metadata 或缺少 `sdkVersion`:build/deploy 直接失败。
|
|
578
581
|
|
|
579
582
|
`manifest.json` 不部署到 CDN,只交给发布流水线读取后上送后台;Host 通过后台 API 间接读取版本信息。第一阶段只支持 Vite 项目,非 Vite 打包器未来通过其他子入口扩展。
|
|
580
583
|
|
|
@@ -586,7 +589,6 @@ export default defineConfig({
|
|
|
586
589
|
|
|
587
590
|
- `ready`、`on`、`off`
|
|
588
591
|
- `auth`、`user`、`share`、`viewport`、`storage`、`cloud`、`network`、`ui`、`device`、`navigation`
|
|
589
|
-
- `createMiniProgramSDK`、`MiniProgramSDK`
|
|
590
592
|
- `HbMiniProgramSDKError`、`HbMiniProgramNetworkError`
|
|
591
593
|
- 各模块公开类型,例如 `MiniProgramNetworkRequestConfig`、`MiniProgramNetworkResponse`、`MiniProgramUserInfoResult`
|
|
592
594
|
|
|
@@ -594,6 +596,8 @@ export default defineConfig({
|
|
|
594
596
|
|
|
595
597
|
构建时插件 `miniappManifest` 通过 `@heybox/hb-sdk/vite` 子入口导出,仅供 `vite.config.ts` 使用,不应在小程序业务代码里 import。
|
|
596
598
|
|
|
599
|
+
从 0.5 升级时请阅读 [0.6 迁移说明](./docs/migration-0.6.md)。
|
|
600
|
+
|
|
597
601
|
## 本仓库开发
|
|
598
602
|
|
|
599
603
|
```bash
|
|
@@ -1,10 +1,30 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var session = require('./session-
|
|
3
|
+
var session = require('./session-0XuUaVOO.cjs');
|
|
4
|
+
var index = require('./index-BnCDW-BB.cjs');
|
|
4
5
|
var fs$1 = require('node:fs');
|
|
5
6
|
var fs = require('node:fs/promises');
|
|
6
7
|
var path = require('node:path');
|
|
7
8
|
|
|
9
|
+
const APIUserMiniprogramPublicSdkConfigPath = '/user_miniprogram/public/sdk_config';
|
|
10
|
+
function createUserMiniprogramPublicSdkConfigRequest(serviceTag) {
|
|
11
|
+
return {
|
|
12
|
+
path: APIUserMiniprogramPublicSdkConfigPath,
|
|
13
|
+
searchParams: serviceTag ? { special_tag: serviceTag } : {},
|
|
14
|
+
headers: serviceTag ? { 'x-rylai-service-tag': serviceTag } : {},
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function parseUserMiniprogramPublicSdkConfigResult(value) {
|
|
18
|
+
if (!isRecord(value) ||
|
|
19
|
+
typeof value.minimum_sdk_version !== 'string') {
|
|
20
|
+
throw new Error('公共 SDK 配置响应无效');
|
|
21
|
+
}
|
|
22
|
+
return value;
|
|
23
|
+
}
|
|
24
|
+
function isRecord(value) {
|
|
25
|
+
return typeof value === 'object' && value !== null;
|
|
26
|
+
}
|
|
27
|
+
|
|
8
28
|
var re = {exports: {}};
|
|
9
29
|
|
|
10
30
|
var constants;
|
|
@@ -2794,6 +2814,7 @@ const MINIAPP_UPLOAD_SCOPE = 'activity';
|
|
|
2794
2814
|
const ACTIVITY_UPLOAD_KEY_MAX_LENGTH = 64;
|
|
2795
2815
|
const MINIAPP_UPLOAD_BATCH_SIZE = 50;
|
|
2796
2816
|
const MINIAPP_UPLOAD_TOTAL_SIZE_LIMIT_BYTES = 100 * 1024 * 1024;
|
|
2817
|
+
const PUBLIC_USER_MINIPROGRAM_SDK_CONFIG_API_PATH = APIUserMiniprogramPublicSdkConfigPath;
|
|
2797
2818
|
const USER_MINIPROGRAM_ACCESS_STATUS_API_PATH = '/mall/developer/user_miniprogram/access_status';
|
|
2798
2819
|
const DEVELOPER_ENTITY_LIST_API_PATH = '/mall/developer/entity/list';
|
|
2799
2820
|
const DEVELOPER_ENTITY_SWITCH_API_PATH = '/mall/developer/entity/switch';
|
|
@@ -2909,6 +2930,20 @@ function createRemoteApiClient(options) {
|
|
|
2909
2930
|
listUserMiniprogramVersions: (requestOptions) => listUserMiniprogramVersions(requestOptions, options),
|
|
2910
2931
|
};
|
|
2911
2932
|
}
|
|
2933
|
+
async function getPublicSdkConfig(runtime) {
|
|
2934
|
+
const fetchImpl = runtime.fetchImpl ?? fetch;
|
|
2935
|
+
const serviceTag = index.resolveHeyboxRylaiServiceTag(PUBLIC_USER_MINIPROGRAM_SDK_CONFIG_API_PATH);
|
|
2936
|
+
const request = createUserMiniprogramPublicSdkConfigRequest(serviceTag);
|
|
2937
|
+
const response = await fetchImpl(session.createHeyboxApiUrl(runtime.baseUrl ?? 'https://api.xiaoheihe.cn', request.path, request.searchParams), {
|
|
2938
|
+
method: 'GET',
|
|
2939
|
+
headers: {
|
|
2940
|
+
Referer: session.HEYBOX_WEB_REFERER,
|
|
2941
|
+
...request.headers,
|
|
2942
|
+
},
|
|
2943
|
+
});
|
|
2944
|
+
const result = await readRequiredResult(response, request.path);
|
|
2945
|
+
return parseUserMiniprogramPublicSdkConfigResult(result);
|
|
2946
|
+
}
|
|
2912
2947
|
async function listDeveloperEntities(runtime) {
|
|
2913
2948
|
return remoteGet(DEVELOPER_ENTITY_LIST_API_PATH, {}, runtime);
|
|
2914
2949
|
}
|
|
@@ -3188,6 +3223,7 @@ exports.SUBMIT_USER_MINIPROGRAM_AUDIT_API_PATH = SUBMIT_USER_MINIPROGRAM_AUDIT_A
|
|
|
3188
3223
|
exports.createRemoteApiClientForEnvironment = createRemoteApiClientForEnvironment;
|
|
3189
3224
|
exports.getBoundMiniProgram = getBoundMiniProgram;
|
|
3190
3225
|
exports.getMiniappUploadKey = getMiniappUploadKey;
|
|
3226
|
+
exports.getPublicSdkConfig = getPublicSdkConfig;
|
|
3191
3227
|
exports.normalizeRelativePath = normalizeRelativePath;
|
|
3192
3228
|
exports.readBoundMiniProgramId = readBoundMiniProgramId;
|
|
3193
3229
|
exports.readBoundMiniProgramIdFromPackageJson = readBoundMiniProgramIdFromPackageJson;
|
|
@@ -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-BnCDW-BB.cjs');
|
|
9
9
|
require('node:module');
|
|
10
10
|
require('os');
|
|
11
11
|
require('readline');
|
|
@@ -9,8 +9,9 @@ var node_url = require('node:url');
|
|
|
9
9
|
var net = require('node:net');
|
|
10
10
|
var node_http = require('node:http');
|
|
11
11
|
var browser = require('./browser-RAy8e8cV.cjs');
|
|
12
|
-
var index = require('./index-
|
|
13
|
-
var context = require('./context-
|
|
12
|
+
var index = require('./index-BnCDW-BB.cjs');
|
|
13
|
+
var context = require('./context-D0BowvGu.cjs');
|
|
14
|
+
var session = require('./session-0XuUaVOO.cjs');
|
|
14
15
|
require('node:process');
|
|
15
16
|
require('node:buffer');
|
|
16
17
|
require('node:util');
|
|
@@ -24,7 +25,6 @@ require('events');
|
|
|
24
25
|
require('stream');
|
|
25
26
|
require('buffer');
|
|
26
27
|
require('util');
|
|
27
|
-
require('./session-dRGPpyS1.cjs');
|
|
28
28
|
require('node:crypto');
|
|
29
29
|
require('fs');
|
|
30
30
|
require('constants');
|
|
@@ -599,6 +599,7 @@ function readErrorMessage(error) {
|
|
|
599
599
|
|
|
600
600
|
const MINI_PROGRAM_URL_QUERY_PARAM = 'mini_url';
|
|
601
601
|
const MINI_PROGRAM_RUNTIME_URL_QUERY_PARAM = 'runtime_url';
|
|
602
|
+
const MINI_PROGRAM_SDK_VERSION_QUERY_PARAM = 'sdk_version';
|
|
602
603
|
const MINI_PROGRAM_DEV_SHELL_URL = 'heybox-mini-dev://sandbox';
|
|
603
604
|
const OPEN_IN_APP_URL = 'https://api.xiaoheihe.cn/open_inapp/';
|
|
604
605
|
function createMacAppProtocol(appUrl, options = {}) {
|
|
@@ -636,6 +637,10 @@ function createPartiallyEncodedMiniProgramDevShellUrl(appUrl, options) {
|
|
|
636
637
|
if (hasRuntimeUrl(options.runtimeUrl)) {
|
|
637
638
|
devShellUrl += `&${MINI_PROGRAM_RUNTIME_URL_QUERY_PARAM}=${encodeURIComponent(options.runtimeUrl)}`;
|
|
638
639
|
}
|
|
640
|
+
const sdkVersion = options.sdkVersion?.trim();
|
|
641
|
+
if (sdkVersion) {
|
|
642
|
+
devShellUrl += `&${MINI_PROGRAM_SDK_VERSION_QUERY_PARAM}=${encodeURIComponent(sdkVersion)}`;
|
|
643
|
+
}
|
|
639
644
|
return devShellUrl;
|
|
640
645
|
}
|
|
641
646
|
function createEncodedMiniProgramDevShellUrl(appUrl, options) {
|
|
@@ -648,6 +653,10 @@ function createEncodedMiniProgramDevShellUrl(appUrl, options) {
|
|
|
648
653
|
if (hasRuntimeUrl(options.runtimeUrl)) {
|
|
649
654
|
devShellUrl.searchParams.set(MINI_PROGRAM_RUNTIME_URL_QUERY_PARAM, options.runtimeUrl);
|
|
650
655
|
}
|
|
656
|
+
const sdkVersion = options.sdkVersion?.trim();
|
|
657
|
+
if (sdkVersion) {
|
|
658
|
+
devShellUrl.searchParams.set(MINI_PROGRAM_SDK_VERSION_QUERY_PARAM, sdkVersion);
|
|
659
|
+
}
|
|
651
660
|
return devShellUrl.toString();
|
|
652
661
|
}
|
|
653
662
|
function hasRuntimeUrl(runtimeUrl) {
|
|
@@ -657,6 +666,96 @@ function createHeyboxProtocol(payload) {
|
|
|
657
666
|
return `heybox://${encodeURIComponent(JSON.stringify(payload))}`;
|
|
658
667
|
}
|
|
659
668
|
|
|
669
|
+
const CACHE_MAX_AGE_MS = 24 * 60 * 60 * 1_000;
|
|
670
|
+
const CACHE_FILE_NAME = 'minimum-sdk-versions.json';
|
|
671
|
+
async function resolveMinimumSdkVersion(options) {
|
|
672
|
+
const now = options.now ?? Date.now();
|
|
673
|
+
const cachePath = path.join(options.cacheDir, CACHE_FILE_NAME);
|
|
674
|
+
const cache = await readCache(cachePath);
|
|
675
|
+
let minimumSdkVersion;
|
|
676
|
+
try {
|
|
677
|
+
minimumSdkVersion = validateStableSdkVersion(await options.fetchMinimumSdkVersion(), 'minimumSdkVersion');
|
|
678
|
+
}
|
|
679
|
+
catch {
|
|
680
|
+
const cached = cache.environments[options.environment];
|
|
681
|
+
const cacheAge = cached ? now - cached.fetchedAt : Number.NaN;
|
|
682
|
+
if (cached && Number.isFinite(cached.fetchedAt) && cacheAge >= 0 && cacheAge <= CACHE_MAX_AGE_MS) {
|
|
683
|
+
try {
|
|
684
|
+
return validateStableSdkVersion(cached.minimumSdkVersion, 'cached minimumSdkVersion');
|
|
685
|
+
}
|
|
686
|
+
catch {
|
|
687
|
+
// 非法缓存按不存在处理。
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
throw new Error('MINIMUM_SDK_VERSION_UNAVAILABLE:无法获取最低 SDK 版本,且没有 24 小时内的有效缓存');
|
|
691
|
+
}
|
|
692
|
+
cache.environments[options.environment] = { fetchedAt: now, minimumSdkVersion };
|
|
693
|
+
try {
|
|
694
|
+
await writeCache(cachePath, cache);
|
|
695
|
+
}
|
|
696
|
+
catch {
|
|
697
|
+
// 已校验的远端策略仍然可信;缓存只是离线回退优化。
|
|
698
|
+
}
|
|
699
|
+
return minimumSdkVersion;
|
|
700
|
+
}
|
|
701
|
+
function validateCurrentSdkVersion(currentSdkVersion, minimumSdkVersion, options) {
|
|
702
|
+
const current = validateSdkVersion(currentSdkVersion, '当前 SDK 版本');
|
|
703
|
+
const minimum = validateStableSdkVersion(minimumSdkVersion, 'minimumSdkVersion');
|
|
704
|
+
if (!options.allowPrerelease && context.semverExports.prerelease(current) !== null) {
|
|
705
|
+
throw new Error('正式发布不允许使用预发布 SDK,请运行 pnpm add @heybox/hb-sdk@latest 后重新构建');
|
|
706
|
+
}
|
|
707
|
+
if (!context.semverExports.satisfies(current, `>=${minimum}`, { includePrerelease: options.allowPrerelease })) {
|
|
708
|
+
throw new Error(`SDK_VERSION_TOO_LOW:当前 @heybox/hb-sdk@${current} 低于最低版本 ${minimum},请运行 pnpm add @heybox/hb-sdk@latest`);
|
|
709
|
+
}
|
|
710
|
+
return current;
|
|
711
|
+
}
|
|
712
|
+
function validateSdkVersion(value, label) {
|
|
713
|
+
const normalized = String(value).trim();
|
|
714
|
+
const parsed = context.semverExports.parse(normalized);
|
|
715
|
+
if (!parsed || parsed.version !== normalized || parsed.build.length > 0) {
|
|
716
|
+
throw new Error(`${label} 必须是合法 SemVer:${normalized}`);
|
|
717
|
+
}
|
|
718
|
+
return normalized;
|
|
719
|
+
}
|
|
720
|
+
function validateStableSdkVersion(value, label) {
|
|
721
|
+
const normalized = validateSdkVersion(value, label);
|
|
722
|
+
if (context.semverExports.prerelease(normalized) !== null)
|
|
723
|
+
throw new Error(`${label} 必须是稳定 SemVer:${normalized}`);
|
|
724
|
+
return normalized;
|
|
725
|
+
}
|
|
726
|
+
async function readCache(cachePath) {
|
|
727
|
+
try {
|
|
728
|
+
const parsed = JSON.parse(await fs$1.readFile(cachePath, 'utf8'));
|
|
729
|
+
if (parsed && typeof parsed === 'object' && parsed.environments && typeof parsed.environments === 'object')
|
|
730
|
+
return parsed;
|
|
731
|
+
}
|
|
732
|
+
catch {
|
|
733
|
+
// 缓存缺失或损坏时继续请求最新配置。
|
|
734
|
+
}
|
|
735
|
+
return { environments: {} };
|
|
736
|
+
}
|
|
737
|
+
async function writeCache(cachePath, cache) {
|
|
738
|
+
await fs$1.mkdir(path.dirname(cachePath), { recursive: true });
|
|
739
|
+
const temporaryPath = `${cachePath}.${process.pid}.tmp`;
|
|
740
|
+
await fs$1.writeFile(temporaryPath, `${JSON.stringify(cache, null, 2)}\n`, { mode: 0o600 });
|
|
741
|
+
await fs$1.rename(temporaryPath, cachePath);
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
const paths = index.envPaths('hb-sdk');
|
|
745
|
+
async function enforceRemoteSdkVersion(options) {
|
|
746
|
+
const minimumSdkVersion = await resolveMinimumSdkVersion({
|
|
747
|
+
cacheDir: options.cacheDir ?? paths.cache,
|
|
748
|
+
environment: options.environment,
|
|
749
|
+
fetchMinimumSdkVersion: async () => (await context.getPublicSdkConfig({ baseUrl: options.environment, fetchImpl: options.fetchImpl })).minimum_sdk_version,
|
|
750
|
+
});
|
|
751
|
+
return validateCurrentSdkVersion(options.sdkVersion, minimumSdkVersion, { allowPrerelease: options.allowPrerelease });
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
/** 构建时替换为当前发布包的实际版本。 */
|
|
755
|
+
const HB_SDK_VERSION = typeof undefined === 'string'
|
|
756
|
+
? undefined
|
|
757
|
+
: '0.6.1';
|
|
758
|
+
|
|
660
759
|
const DEFAULT_APP_PORT = 5173;
|
|
661
760
|
const DEFAULT_MOCK_PORT = 5174;
|
|
662
761
|
const DEV_LISTEN_HOST = '0.0.0.0';
|
|
@@ -667,6 +766,13 @@ const VITE_LOG_LEVEL = 'warn';
|
|
|
667
766
|
async function runDevCommand(options, runtime = {}) {
|
|
668
767
|
const logger = runtime.logger ?? index.createCliLogger();
|
|
669
768
|
const fetchImpl = runtime.fetchImpl ?? fetch;
|
|
769
|
+
const environment = session.resolveHeyboxApiBaseUrl({ env: runtime.env });
|
|
770
|
+
await (runtime.enforceRemoteSdkVersion ?? enforceRemoteSdkVersion)({
|
|
771
|
+
sdkVersion: HB_SDK_VERSION,
|
|
772
|
+
environment,
|
|
773
|
+
fetchImpl,
|
|
774
|
+
allowPrerelease: true,
|
|
775
|
+
});
|
|
670
776
|
const openUrl = runtime.openExternalUrl ?? browser.openExternalUrl;
|
|
671
777
|
const networkInterfaceSnapshot = (runtime.networkInterfaces ?? os.networkInterfaces)();
|
|
672
778
|
const getPortImpl = runtime.getPort ?? getPorts;
|
|
@@ -678,6 +784,7 @@ async function runDevCommand(options, runtime = {}) {
|
|
|
678
784
|
});
|
|
679
785
|
const resolvedOptions = {
|
|
680
786
|
...options,
|
|
787
|
+
hmrHost: createLanInterfaceCandidates(networkInterfaceSnapshot)[0]?.address,
|
|
681
788
|
port: appPort,
|
|
682
789
|
};
|
|
683
790
|
const projectRoot = findProjectRoot(runtime.cwd ?? process.cwd());
|
|
@@ -697,9 +804,11 @@ async function runDevCommand(options, runtime = {}) {
|
|
|
697
804
|
});
|
|
698
805
|
const lanAddresses = createLanAddressCandidates({
|
|
699
806
|
appUrl,
|
|
807
|
+
hmrHost: resolvedOptions.hmrHost,
|
|
700
808
|
interfaces: networkInterfaceSnapshot,
|
|
701
809
|
miniProgramId: devLaunchContext.miniProgramId,
|
|
702
810
|
runtimeUrl: options.runtimeUrl,
|
|
811
|
+
sdkVersion: HB_SDK_VERSION,
|
|
703
812
|
viteNetworkUrls: appServer.resolvedUrls?.network ?? [],
|
|
704
813
|
});
|
|
705
814
|
const closers = [() => appServer.close()];
|
|
@@ -715,6 +824,7 @@ async function runDevCommand(options, runtime = {}) {
|
|
|
715
824
|
? createMacAppProtocol(appUrl, {
|
|
716
825
|
miniProgramId: devLaunchContext.miniProgramId,
|
|
717
826
|
runtimeUrl: options.runtimeUrl,
|
|
827
|
+
sdkVersion: HB_SDK_VERSION,
|
|
718
828
|
})
|
|
719
829
|
: undefined,
|
|
720
830
|
nativeAppLaunchUnavailableReason: devLaunchContext.nativeAppLaunchUnavailableReason,
|
|
@@ -822,6 +932,7 @@ function createViteServerOptions(projectRoot, options) {
|
|
|
822
932
|
cors: true,
|
|
823
933
|
hmr: {
|
|
824
934
|
clientPort: options.port ?? DEFAULT_APP_PORT,
|
|
935
|
+
...(options.hmrHost ? { host: options.hmrHost } : {}),
|
|
825
936
|
},
|
|
826
937
|
host: DEV_LISTEN_HOST,
|
|
827
938
|
port: options.port ?? DEFAULT_APP_PORT,
|
|
@@ -972,6 +1083,7 @@ function createLanAddressCandidates(options) {
|
|
|
972
1083
|
.map((url) => [readUrlHost(url), url])
|
|
973
1084
|
.filter((entry) => Boolean(entry[0])));
|
|
974
1085
|
const candidates = createLanInterfaceCandidates(options.interfaces)
|
|
1086
|
+
.filter(({ address }) => address === options.hmrHost)
|
|
975
1087
|
.map(({ address, id, name }) => {
|
|
976
1088
|
const appUrl = viteNetworkUrlByHost.get(address) ?? replaceUrlHost(options.appUrl, address);
|
|
977
1089
|
if (!appUrl) {
|
|
@@ -988,11 +1100,13 @@ function createLanAddressCandidates(options) {
|
|
|
988
1100
|
candidate.mobileAppQrPayload = createMobileAppQrPayload(appUrl, {
|
|
989
1101
|
miniProgramId: options.miniProgramId,
|
|
990
1102
|
runtimeUrl,
|
|
1103
|
+
sdkVersion: options.sdkVersion,
|
|
991
1104
|
});
|
|
992
1105
|
}
|
|
993
1106
|
else {
|
|
994
1107
|
candidate.mobileAppQrPayload = createMobileAppQrPayload(appUrl, {
|
|
995
1108
|
miniProgramId: options.miniProgramId,
|
|
1109
|
+
sdkVersion: options.sdkVersion,
|
|
996
1110
|
});
|
|
997
1111
|
}
|
|
998
1112
|
return candidate;
|
|
@@ -4,7 +4,7 @@ var fs$1 = require('node:fs');
|
|
|
4
4
|
var fs = require('node:fs/promises');
|
|
5
5
|
var os = require('node:os');
|
|
6
6
|
var path = require('node:path');
|
|
7
|
-
var index = require('./index-
|
|
7
|
+
var index = require('./index-BnCDW-BB.cjs');
|
|
8
8
|
require('node:module');
|
|
9
9
|
require('path');
|
|
10
10
|
require('os');
|
|
@@ -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-BnCDW-BB.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-BnCDW-BB.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-BnCDW-BB.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-BnCDW-BB.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-BnCDW-BB.cjs', document.baseURI).href)));
|
|
250
250
|
function __require() { return require$1("node:process"); }
|
|
251
251
|
|
|
252
252
|
var help = {};
|
|
@@ -13203,6 +13203,13 @@ function loadEnvPreset(argv, options = {}) {
|
|
|
13203
13203
|
targetEnv[key] = value;
|
|
13204
13204
|
appliedKeys.push(key);
|
|
13205
13205
|
}
|
|
13206
|
+
const explicitName = readEnvNameArgFromArgv(argv);
|
|
13207
|
+
if (explicitName) {
|
|
13208
|
+
targetEnv.HB_SDK_ENV = explicitName;
|
|
13209
|
+
if (!appliedKeys.includes('HB_SDK_ENV')) {
|
|
13210
|
+
appliedKeys.push('HB_SDK_ENV');
|
|
13211
|
+
}
|
|
13212
|
+
}
|
|
13206
13213
|
return { filePath, appliedKeys, skippedKeys };
|
|
13207
13214
|
}
|
|
13208
13215
|
/**
|
|
@@ -13316,7 +13323,7 @@ function getPathname(pathWithQuery) {
|
|
|
13316
13323
|
}
|
|
13317
13324
|
|
|
13318
13325
|
const CLI_VERSION_PLACEHOLDER = ['__HB', 'SDK', 'CLI', 'VERSION__'].join('_');
|
|
13319
|
-
const BUILT_CLI_VERSION = '0.
|
|
13326
|
+
const BUILT_CLI_VERSION = '0.6.1';
|
|
13320
13327
|
const PACKAGE_JSON_CANDIDATES = [
|
|
13321
13328
|
path.resolve(__dirname, '..', '..', 'package.json'),
|
|
13322
13329
|
path.resolve(__dirname, '..', 'package.json'),
|
|
@@ -13389,7 +13396,7 @@ function createCliProgram(overrides = {}) {
|
|
|
13389
13396
|
.description('hb-sdk developer tools')
|
|
13390
13397
|
.version(getCliVersion())
|
|
13391
13398
|
.option('-v, --verbose', '输出详细调试信息')
|
|
13392
|
-
.option('--env <name>', '加载项目根下 .env.<name>
|
|
13399
|
+
.option('--env <name>', '加载项目根下 .env.<name> 预设,并将 deploy 构建的 Vite mode 设为 name')
|
|
13393
13400
|
.option('--env-file <path>', '显式指定 .env 文件路径,优先级高于 --env')
|
|
13394
13401
|
.showHelpAfterError()
|
|
13395
13402
|
.exitOverride();
|
|
@@ -13526,7 +13533,6 @@ function installRemoteCommands(program, handlers, resolveLogger) {
|
|
|
13526
13533
|
addRemotePublicOptions(remote
|
|
13527
13534
|
.command('deploy')
|
|
13528
13535
|
.description('构建并提交当前小程序版本审核')
|
|
13529
|
-
.option('--skip-build', '跳过 build,直接读 dist 目录上传并提交审核')
|
|
13530
13536
|
.option('--from-version <version>', '复用指定历史版本产物提交审核')
|
|
13531
13537
|
.option('--release-note <text>', '发布日志,提交审核必填')
|
|
13532
13538
|
.option('--auto-publish', '审核通过后自动发布;默认需在 CLI 中手动发布')).action(createRemoteAction(handlers, resolveLogger, 'deploy', (command) => {
|
|
@@ -13535,7 +13541,6 @@ function installRemoteCommands(program, handlers, resolveLogger) {
|
|
|
13535
13541
|
autoPublish: Boolean(options.autoPublish),
|
|
13536
13542
|
fromVersion: readStringOption(options.fromVersion),
|
|
13537
13543
|
releaseNote: readStringOption(options.releaseNote),
|
|
13538
|
-
skipBuild: Boolean(options.skipBuild),
|
|
13539
13544
|
};
|
|
13540
13545
|
}));
|
|
13541
13546
|
addRemotePublicOptions(remote.command('versions').description('列出当前绑定小程序的远程版本')).action(createRemoteAction(handlers, resolveLogger, 'versions'));
|
|
@@ -13639,31 +13644,31 @@ function createCommandLoggerResolver(options) {
|
|
|
13639
13644
|
};
|
|
13640
13645
|
}
|
|
13641
13646
|
const defaultClearLoginStatus = async (...args) => {
|
|
13642
|
-
const { clearLoginStatus } = await Promise.resolve().then(function () { return require('./login-
|
|
13647
|
+
const { clearLoginStatus } = await Promise.resolve().then(function () { return require('./login-BsyENL1d.cjs'); });
|
|
13643
13648
|
return clearLoginStatus(...args);
|
|
13644
13649
|
};
|
|
13645
13650
|
const defaultLoginToHeybox = async (...args) => {
|
|
13646
|
-
const { loginToHeybox } = await Promise.resolve().then(function () { return require('./login-
|
|
13651
|
+
const { loginToHeybox } = await Promise.resolve().then(function () { return require('./login-BsyENL1d.cjs'); });
|
|
13647
13652
|
return loginToHeybox(...args);
|
|
13648
13653
|
};
|
|
13649
13654
|
const defaultPrintLoginStatus = async (...args) => {
|
|
13650
|
-
const { printLoginStatus } = await Promise.resolve().then(function () { return require('./login-
|
|
13655
|
+
const { printLoginStatus } = await Promise.resolve().then(function () { return require('./login-BsyENL1d.cjs'); });
|
|
13651
13656
|
return printLoginStatus(...args);
|
|
13652
13657
|
};
|
|
13653
13658
|
const defaultRunCreateCommand = async (...args) => {
|
|
13654
|
-
const { runCreateCommand } = await Promise.resolve().then(function () { return require('./create-
|
|
13659
|
+
const { runCreateCommand } = await Promise.resolve().then(function () { return require('./create-C0afRvs9.cjs'); });
|
|
13655
13660
|
return runCreateCommand(...args);
|
|
13656
13661
|
};
|
|
13657
13662
|
const defaultRunDevCommand = async (...args) => {
|
|
13658
|
-
const { runDevCommand } = await Promise.resolve().then(function () { return require('./dev-
|
|
13663
|
+
const { runDevCommand } = await Promise.resolve().then(function () { return require('./dev-CN307p_G.cjs'); });
|
|
13659
13664
|
return runDevCommand(...args);
|
|
13660
13665
|
};
|
|
13661
13666
|
const defaultRunDoctorCommand = async (...args) => {
|
|
13662
|
-
const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-
|
|
13667
|
+
const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-VW0nKg5q.cjs'); });
|
|
13663
13668
|
return runDoctorCommand(...args);
|
|
13664
13669
|
};
|
|
13665
13670
|
const defaultRunRemoteCommand = async (...args) => {
|
|
13666
|
-
const { runRemoteCommand } = await Promise.resolve().then(function () { return require('./remote-
|
|
13671
|
+
const { runRemoteCommand } = await Promise.resolve().then(function () { return require('./remote-BSvvxvVv.cjs'); });
|
|
13667
13672
|
return runRemoteCommand(...args);
|
|
13668
13673
|
};
|
|
13669
13674
|
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-BnCDW-BB.cjs');
|
|
4
4
|
var require$$0$2 = require('fs');
|
|
5
5
|
var require$$2$1 = require('crypto');
|
|
6
6
|
var require$$1$2 = require('path');
|
|
7
7
|
var require$$0$3 = require('assert');
|
|
8
8
|
var require$$4$2 = require('events');
|
|
9
9
|
var require$$1$1 = require('util');
|
|
10
|
-
var context$1 = require('./context-
|
|
10
|
+
var context$1 = require('./context-D0BowvGu.cjs');
|
|
11
11
|
var require$$0$5 = require('net');
|
|
12
12
|
var require$$0$4 = require('url');
|
|
13
13
|
var require$$2$2 = require('http');
|
|
@@ -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-0XuUaVOO.cjs');
|
|
7
7
|
var browser = require('./browser-RAy8e8cV.cjs');
|
|
8
|
-
var index = require('./index-
|
|
8
|
+
var index = require('./index-BnCDW-BB.cjs');
|
|
9
9
|
require('node:path');
|
|
10
10
|
require('fs');
|
|
11
11
|
require('constants');
|