@heybox/hb-sdk 0.9.4-alpha.1 → 0.9.4-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +2 -0
  3. package/dist/cli-chunks/{artifact-Dv6zPoPj.cjs → artifact-BTi9i7N4.cjs} +3 -3
  4. package/dist/cli-chunks/{build-BumRaEG6.cjs → build-CScc5bgz.cjs} +5 -5
  5. package/dist/cli-chunks/{create-BQimWyVw.cjs → create-BybyVKxB.cjs} +1 -1
  6. package/dist/cli-chunks/{deploy-lock-C79P53O1.cjs → deploy-lock-CtJXBtKK.cjs} +1 -1
  7. package/dist/cli-chunks/{dev-kuYLlVkZ.cjs → dev-BVZ9yV84.cjs} +8 -8
  8. package/dist/cli-chunks/{dev-context-BoizHQIi.cjs → dev-context-BjwOy-fF.cjs} +2 -2
  9. package/dist/cli-chunks/{doctor-DD1Uokke.cjs → doctor-CTEun30u.cjs} +1 -1
  10. package/dist/cli-chunks/{games-B8OMXnyU.cjs → games-Bp6gkkgb.cjs} +2 -2
  11. package/dist/cli-chunks/{index-dXb0CRuR.cjs → index-CxelQqdy.cjs} +17 -17
  12. package/dist/cli-chunks/{index-DGP5w5P8.cjs → index-DF8KQKoa.cjs} +1 -1
  13. package/dist/cli-chunks/{index.esm-BeHd4gL3.cjs → index.esm-vr3yuZ2Q.cjs} +6 -6
  14. package/dist/cli-chunks/{login-DLQ29GYc.cjs → login-BPyX2p9v.cjs} +1 -1
  15. package/dist/cli-chunks/{project-vite-BkRatXiB.cjs → project-vite-DBId94T0.cjs} +1 -1
  16. package/dist/cli-chunks/{remote-DKCzk6X3.cjs → remote-C1n11VWk.cjs} +7 -7
  17. package/dist/cli-chunks/{runtime-permission-env-DLLffpOa.cjs → runtime-permission-env-Beurz19O.cjs} +2 -2
  18. package/dist/cli-chunks/{skill-kkoE3F-I.cjs → skill-C33zgdJF.cjs} +2 -2
  19. package/dist/cli-chunks/{version-hdMctv12.cjs → version-BKjLEHsb.cjs} +1 -1
  20. package/dist/cli.cjs +1 -1
  21. package/dist/devtools/browser-dev-host/assets/{browser-dev-host-0UAlwnsV.js → browser-dev-host-DedSMBMn.js} +1 -1
  22. package/dist/devtools/browser-dev-host/assets/{desktop-app-launch-6LCHEMSe.js → desktop-app-launch-BBIYbjgT.js} +1 -1
  23. package/dist/devtools/browser-dev-host/assets/{index-DW4VxPMl.js → index-CnC7wDP_.js} +3 -3
  24. package/dist/devtools/browser-dev-host/index.html +2 -2
  25. package/dist/index.cjs.js +1 -1
  26. package/dist/index.esm.js +1 -1
  27. package/dist/vite.cjs.js +79 -13
  28. package/dist/vite.esm.js +79 -13
  29. package/package.json +6 -6
  30. package/skill/skill.json +4 -4
  31. package/types/vite/index.d.ts +35 -7
@@ -5,8 +5,8 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <meta name="theme-color" content="#f4f5f7" />
7
7
  <title>小程序工坊调试台</title>
8
- <script type="module" crossorigin src="/assets/index-DW4VxPMl.js"></script>
9
- <link rel="modulepreload" crossorigin href="/assets/desktop-app-launch-6LCHEMSe.js">
8
+ <script type="module" crossorigin src="/assets/index-CnC7wDP_.js"></script>
9
+ <link rel="modulepreload" crossorigin href="/assets/desktop-app-launch-BBIYbjgT.js">
10
10
  <link rel="stylesheet" crossorigin href="/assets/index-h-fYisyX.css">
11
11
  </head>
12
12
  <body>
package/dist/index.cjs.js CHANGED
@@ -7485,7 +7485,7 @@ function createMessageId() {
7485
7485
  /** 构建时替换为当前发布包的实际版本。 */
7486
7486
  const HB_SDK_VERSION = typeof undefined === 'string'
7487
7487
  ? undefined
7488
- : '0.9.4-alpha.1';
7488
+ : '0.9.4-alpha.2';
7489
7489
 
7490
7490
  const RUNTIME_MODES = new Set(['production', 'preview', 'development', 'unknown']);
7491
7491
  const OPERATING_SYSTEM_NAMES = new Set(['android', 'ios', 'ohos', 'windows', 'macos', 'linux', 'unknown']);
package/dist/index.esm.js CHANGED
@@ -7481,7 +7481,7 @@ function createMessageId() {
7481
7481
  /** 构建时替换为当前发布包的实际版本。 */
7482
7482
  const HB_SDK_VERSION = typeof undefined === 'string'
7483
7483
  ? undefined
7484
- : '0.9.4-alpha.1';
7484
+ : '0.9.4-alpha.2';
7485
7485
 
7486
7486
  const RUNTIME_MODES = new Set(['production', 'preview', 'development', 'unknown']);
7487
7487
  const OPERATING_SYSTEM_NAMES = new Set(['android', 'ios', 'ohos', 'windows', 'macos', 'linux', 'unknown']);
package/dist/vite.cjs.js CHANGED
@@ -10315,7 +10315,7 @@ async function ensureBasicInfoDirectory(rootPath, relative) {
10315
10315
  /** 构建时替换为当前发布包的实际版本。 */
10316
10316
  const HB_SDK_VERSION = typeof undefined === 'string'
10317
10317
  ? undefined
10318
- : '0.9.4-alpha.1';
10318
+ : '0.9.4-alpha.2';
10319
10319
 
10320
10320
  /**
10321
10321
  * iframe 与调试台页面的开发期 console 捕获转发。
@@ -20502,6 +20502,46 @@ function shouldSkipMiniappPlatformCspFromEnv(env = process.env) {
20502
20502
  return env[HB_SDK_RUNTIME_PERMISSION_CONTEXT_ENV] === VERIFIED_RUNTIME_PERMISSION_CONTEXT && env[HB_SDK_RUNTIME_USE_OFFICIAL_DOMAIN_ENV] === '1';
20503
20503
  }
20504
20504
 
20505
+ /** 与平台 H5 保持相同的语法兼容下限;SDK 独立分发,不依赖内部 Platform 包。 */
20506
+ const MINIAPP_BROWSER_TARGETS = ['chrome64', 'safari12'];
20507
+ /** Vite 的聚合目标别名不能直接交给 esbuild 的目标数组。 */
20508
+ const VITE_TARGET_ALIASES = new Set(['modules', 'baseline-widely-available']);
20509
+ function resolveMiniappBuildTargets(target) {
20510
+ const configured = typeof target === 'string' ? [target] : target || [];
20511
+ const byEngine = new Map();
20512
+ const other = new Set();
20513
+ for (const value of [...MINIAPP_BROWSER_TARGETS, ...configured]) {
20514
+ if (VITE_TARGET_ALIASES.has(value) || value === 'esnext')
20515
+ continue;
20516
+ const matched = /^([a-z]+)(\d+(?:\.\d+)*)$/.exec(value);
20517
+ if (!matched) {
20518
+ other.add(value);
20519
+ continue;
20520
+ }
20521
+ const [, engine, version] = matched;
20522
+ const current = byEngine.get(engine);
20523
+ // esbuild 的同一内核重复目标会互相覆盖,必须先选最旧版本,不能只拼接数组。
20524
+ if (!current || compareVersions(version, current.version) < 0)
20525
+ byEngine.set(engine, { target: value, version });
20526
+ }
20527
+ return [...byEngine.values()].map((value) => value.target).concat([...other]);
20528
+ }
20529
+ function compareVersions(left, right) {
20530
+ const a = left.split('.').map(Number);
20531
+ const b = right.split('.').map(Number);
20532
+ for (let index = 0; index < Math.max(a.length, b.length); index++) {
20533
+ const difference = (a[index] ?? 0) - (b[index] ?? 0);
20534
+ if (difference)
20535
+ return difference;
20536
+ }
20537
+ return 0;
20538
+ }
20539
+ function assertMiniappBuildCompiler(esbuild) {
20540
+ if (esbuild === false) {
20541
+ throw new Error('工坊小程序生产构建不能设置 esbuild: false;必须保留 Chrome 64 / Safari 12 的语法降级,以免旧 WebView 在 SDK 握手前解析失败。');
20542
+ }
20543
+ }
20544
+
20505
20545
  /**
20506
20546
  * dev serve 时在入口 HTML 最早位置注入无依赖 console 捕获 bootstrap。
20507
20547
  *
@@ -20616,10 +20656,13 @@ const devSnapshotStores = devSnapshotRegistry[devSnapshotStoreKey];
20616
20656
  *
20617
20657
  * Hook 行为如下:
20618
20658
  *
20619
- * - `config`:省略 `base` 时补为 `'./'`,显式值只接受 `''` / `'./'`;注入 SDK 构建版本,且仅
20620
- * `vite serve` 注入开发日志编译常量;
20659
+ * - `config`:省略 `base` 时补为 `'./'`,显式值只接受 `''` / `'./'`;生产构建按 Chrome 64 / Safari 12
20660
+ * 转换 Vite 编译脚本的 JavaScript 语法,保留更旧的自定义目标,拒绝 `esbuild: false`;注入 SDK 构建版本,且仅
20661
+ * `vite serve` 注入开发日志编译常量。语法转换不处理原样复制或远端加载的脚本,不包含运行时 API polyfill,
20662
+ * 也不会更新已发布旧产物;
20621
20663
  * - `configResolved`:确认插件唯一性,记录真实 `root`、`build.outDir`、`serve|build` 命令和精确 HMR
20622
- * WebSocket 地址;直接 `vite build` 使用该实际 `outDir`,`hb-sdk build` 则由 CLI 固定为 `dist/`;
20664
+ * WebSocket 地址,并再次确认生产环境的语法兼容目标;直接 `vite build` 使用该实际 `outDir`,
20665
+ * `hb-sdk build` 则由 CLI 固定为 `dist/`;
20623
20666
  * - `configureServer`:为 `hb-sdk dev` 注册设备日志、本地小程序 Manifest 与 Companion Manifest/ZIP
20624
20667
  * 中间件;敏感路由只接受数值 loopback socket/Host、`GET|HEAD` 和 CLI 注入的独立短期令牌,快照在
20625
20668
  * 配置重载时按 digest 保留,并在服务真正关闭时清理;
@@ -20700,8 +20743,20 @@ function miniappManifest() {
20700
20743
  // command 在本钩子时序早于 configResolved,必须取自 env 命令而非闭包;
20701
20744
  // 旧调用方(测试等)未传 env 时按 build 处理。
20702
20745
  const isServe = env?.command === 'serve';
20746
+ if (!isServe)
20747
+ assertMiniappBuildCompiler(config.esbuild);
20748
+ const buildTargets = !isServe ? resolveMiniappBuildTargets(config.build?.target) : undefined;
20749
+ if (buildTargets) {
20750
+ // 先替换原配置中的目标,避免 Vite 的数组合并重新带入别名或重复内核目标。
20751
+ config.build = { ...config.build, target: buildTargets };
20752
+ for (const environment of Object.values(config.environments ?? {})) {
20753
+ if (environment.build)
20754
+ environment.build.target = resolveMiniappBuildTargets(environment.build.target);
20755
+ }
20756
+ }
20703
20757
  return {
20704
20758
  ...(config.base === undefined ? { base: './' } : {}),
20759
+ ...(buildTargets ? { build: { target: buildTargets } } : {}),
20705
20760
  define: {
20706
20761
  [sdkVersionBuildConstant]: JSON.stringify(resolveSdkVersion()),
20707
20762
  // 仅 vite serve(hb-sdk dev)注入;vite build / hb-sdk build 永不注入,捕获模块被死代码消除。
@@ -20719,6 +20774,14 @@ function miniappManifest() {
20719
20774
  root = resolved.root;
20720
20775
  outDir = resolved.build.outDir;
20721
20776
  command = resolved.command;
20777
+ if (command === 'build') {
20778
+ assertMiniappBuildCompiler(resolved.esbuild);
20779
+ resolved.build.target = resolveMiniappBuildTargets(resolved.build.target);
20780
+ for (const environment of Object.values(resolved.environments ?? {})) {
20781
+ if (environment.build)
20782
+ environment.build.target = resolveMiniappBuildTargets(environment.build.target);
20783
+ }
20784
+ }
20722
20785
  hmrWebSocketUrl = resolveHmrWebSocketUrl(resolved);
20723
20786
  configuredDeviceLogUploadUrls = resolveConfiguredDeviceLogUploadUrls(resolved);
20724
20787
  },
@@ -20746,7 +20809,9 @@ function miniappManifest() {
20746
20809
  bindAppIds: readMiniappBindAppIdsFromPackageJson(root),
20747
20810
  });
20748
20811
  }
20749
- catch { /* 读取失败不推断为缺失。 */ }
20812
+ catch {
20813
+ /* 读取失败不推断为缺失。 */
20814
+ }
20750
20815
  for (const warning of warnings)
20751
20816
  server.config.logger.warn(`[${warning.code}] ${warning.message}`);
20752
20817
  metadataWarningsShown = true;
@@ -20874,7 +20939,9 @@ function miniappManifest() {
20874
20939
  if (requestedDigest)
20875
20940
  return Promise.resolve(snapshots.get(requestedDigest));
20876
20941
  // manifest 与制品可能同时请求;本轮构建只准备一次,失败后允许下次请求重试。
20877
- pendingSnapshot ??= buildSnapshot().finally(() => { pendingSnapshot = undefined; });
20942
+ pendingSnapshot ??= buildSnapshot().finally(() => {
20943
+ pendingSnapshot = undefined;
20944
+ });
20878
20945
  return pendingSnapshot;
20879
20946
  };
20880
20947
  server.middlewares.use(async (request, response, next) => {
@@ -21038,10 +21105,7 @@ function miniappManifest() {
21038
21105
  const enforced = enforceMiniappHtmlPolicy(html, {
21039
21106
  ...(command === 'serve'
21040
21107
  ? {
21041
- deviceLogUploadUrls: Array.from(new Set([
21042
- ...configuredDeviceLogUploadUrls,
21043
- ...resolveViteDeviceLogUploadUrls(devServer?.resolvedUrls),
21044
- ])),
21108
+ deviceLogUploadUrls: Array.from(new Set([...configuredDeviceLogUploadUrls, ...resolveViteDeviceLogUploadUrls(devServer?.resolvedUrls)])),
21045
21109
  hmrWebSocketUrl,
21046
21110
  }
21047
21111
  : {}),
@@ -21321,12 +21385,13 @@ function resolveConfiguredDeviceLogUploadUrls(resolved) {
21321
21385
  else {
21322
21386
  hosts.add('127.0.0.1');
21323
21387
  }
21324
- return Array.from(hosts, host => createDeviceLogUploadUrl(protocol, host, resolved.server.port)).filter((url) => Boolean(url));
21388
+ return Array.from(hosts, (host) => createDeviceLogUploadUrl(protocol, host, resolved.server.port)).filter((url) => Boolean(url));
21325
21389
  }
21326
21390
  function resolveViteDeviceLogUploadUrls(resolvedUrls) {
21327
21391
  if (!resolvedUrls)
21328
21392
  return [];
21329
- return Array.from(new Set([...resolvedUrls.local, ...resolvedUrls.network].map(url => {
21393
+ return Array.from(new Set([...resolvedUrls.local, ...resolvedUrls.network]
21394
+ .map((url) => {
21330
21395
  try {
21331
21396
  const endpoint = new URL(DEVICE_LOG_PATH, url);
21332
21397
  if (endpoint.protocol !== 'http:' && endpoint.protocol !== 'https:')
@@ -21340,7 +21405,8 @@ function resolveViteDeviceLogUploadUrls(resolvedUrls) {
21340
21405
  catch {
21341
21406
  return undefined;
21342
21407
  }
21343
- }).filter((url) => Boolean(url))));
21408
+ })
21409
+ .filter((url) => Boolean(url))));
21344
21410
  }
21345
21411
  function createDeviceLogUploadUrl(protocol, host, port) {
21346
21412
  try {
package/dist/vite.esm.js CHANGED
@@ -10312,7 +10312,7 @@ async function ensureBasicInfoDirectory(rootPath, relative) {
10312
10312
  /** 构建时替换为当前发布包的实际版本。 */
10313
10313
  const HB_SDK_VERSION = typeof undefined === 'string'
10314
10314
  ? undefined
10315
- : '0.9.4-alpha.1';
10315
+ : '0.9.4-alpha.2';
10316
10316
 
10317
10317
  /**
10318
10318
  * iframe 与调试台页面的开发期 console 捕获转发。
@@ -20499,6 +20499,46 @@ function shouldSkipMiniappPlatformCspFromEnv(env = process.env) {
20499
20499
  return env[HB_SDK_RUNTIME_PERMISSION_CONTEXT_ENV] === VERIFIED_RUNTIME_PERMISSION_CONTEXT && env[HB_SDK_RUNTIME_USE_OFFICIAL_DOMAIN_ENV] === '1';
20500
20500
  }
20501
20501
 
20502
+ /** 与平台 H5 保持相同的语法兼容下限;SDK 独立分发,不依赖内部 Platform 包。 */
20503
+ const MINIAPP_BROWSER_TARGETS = ['chrome64', 'safari12'];
20504
+ /** Vite 的聚合目标别名不能直接交给 esbuild 的目标数组。 */
20505
+ const VITE_TARGET_ALIASES = new Set(['modules', 'baseline-widely-available']);
20506
+ function resolveMiniappBuildTargets(target) {
20507
+ const configured = typeof target === 'string' ? [target] : target || [];
20508
+ const byEngine = new Map();
20509
+ const other = new Set();
20510
+ for (const value of [...MINIAPP_BROWSER_TARGETS, ...configured]) {
20511
+ if (VITE_TARGET_ALIASES.has(value) || value === 'esnext')
20512
+ continue;
20513
+ const matched = /^([a-z]+)(\d+(?:\.\d+)*)$/.exec(value);
20514
+ if (!matched) {
20515
+ other.add(value);
20516
+ continue;
20517
+ }
20518
+ const [, engine, version] = matched;
20519
+ const current = byEngine.get(engine);
20520
+ // esbuild 的同一内核重复目标会互相覆盖,必须先选最旧版本,不能只拼接数组。
20521
+ if (!current || compareVersions(version, current.version) < 0)
20522
+ byEngine.set(engine, { target: value, version });
20523
+ }
20524
+ return [...byEngine.values()].map((value) => value.target).concat([...other]);
20525
+ }
20526
+ function compareVersions(left, right) {
20527
+ const a = left.split('.').map(Number);
20528
+ const b = right.split('.').map(Number);
20529
+ for (let index = 0; index < Math.max(a.length, b.length); index++) {
20530
+ const difference = (a[index] ?? 0) - (b[index] ?? 0);
20531
+ if (difference)
20532
+ return difference;
20533
+ }
20534
+ return 0;
20535
+ }
20536
+ function assertMiniappBuildCompiler(esbuild) {
20537
+ if (esbuild === false) {
20538
+ throw new Error('工坊小程序生产构建不能设置 esbuild: false;必须保留 Chrome 64 / Safari 12 的语法降级,以免旧 WebView 在 SDK 握手前解析失败。');
20539
+ }
20540
+ }
20541
+
20502
20542
  /**
20503
20543
  * dev serve 时在入口 HTML 最早位置注入无依赖 console 捕获 bootstrap。
20504
20544
  *
@@ -20613,10 +20653,13 @@ const devSnapshotStores = devSnapshotRegistry[devSnapshotStoreKey];
20613
20653
  *
20614
20654
  * Hook 行为如下:
20615
20655
  *
20616
- * - `config`:省略 `base` 时补为 `'./'`,显式值只接受 `''` / `'./'`;注入 SDK 构建版本,且仅
20617
- * `vite serve` 注入开发日志编译常量;
20656
+ * - `config`:省略 `base` 时补为 `'./'`,显式值只接受 `''` / `'./'`;生产构建按 Chrome 64 / Safari 12
20657
+ * 转换 Vite 编译脚本的 JavaScript 语法,保留更旧的自定义目标,拒绝 `esbuild: false`;注入 SDK 构建版本,且仅
20658
+ * `vite serve` 注入开发日志编译常量。语法转换不处理原样复制或远端加载的脚本,不包含运行时 API polyfill,
20659
+ * 也不会更新已发布旧产物;
20618
20660
  * - `configResolved`:确认插件唯一性,记录真实 `root`、`build.outDir`、`serve|build` 命令和精确 HMR
20619
- * WebSocket 地址;直接 `vite build` 使用该实际 `outDir`,`hb-sdk build` 则由 CLI 固定为 `dist/`;
20661
+ * WebSocket 地址,并再次确认生产环境的语法兼容目标;直接 `vite build` 使用该实际 `outDir`,
20662
+ * `hb-sdk build` 则由 CLI 固定为 `dist/`;
20620
20663
  * - `configureServer`:为 `hb-sdk dev` 注册设备日志、本地小程序 Manifest 与 Companion Manifest/ZIP
20621
20664
  * 中间件;敏感路由只接受数值 loopback socket/Host、`GET|HEAD` 和 CLI 注入的独立短期令牌,快照在
20622
20665
  * 配置重载时按 digest 保留,并在服务真正关闭时清理;
@@ -20697,8 +20740,20 @@ function miniappManifest() {
20697
20740
  // command 在本钩子时序早于 configResolved,必须取自 env 命令而非闭包;
20698
20741
  // 旧调用方(测试等)未传 env 时按 build 处理。
20699
20742
  const isServe = env?.command === 'serve';
20743
+ if (!isServe)
20744
+ assertMiniappBuildCompiler(config.esbuild);
20745
+ const buildTargets = !isServe ? resolveMiniappBuildTargets(config.build?.target) : undefined;
20746
+ if (buildTargets) {
20747
+ // 先替换原配置中的目标,避免 Vite 的数组合并重新带入别名或重复内核目标。
20748
+ config.build = { ...config.build, target: buildTargets };
20749
+ for (const environment of Object.values(config.environments ?? {})) {
20750
+ if (environment.build)
20751
+ environment.build.target = resolveMiniappBuildTargets(environment.build.target);
20752
+ }
20753
+ }
20700
20754
  return {
20701
20755
  ...(config.base === undefined ? { base: './' } : {}),
20756
+ ...(buildTargets ? { build: { target: buildTargets } } : {}),
20702
20757
  define: {
20703
20758
  [sdkVersionBuildConstant]: JSON.stringify(resolveSdkVersion()),
20704
20759
  // 仅 vite serve(hb-sdk dev)注入;vite build / hb-sdk build 永不注入,捕获模块被死代码消除。
@@ -20716,6 +20771,14 @@ function miniappManifest() {
20716
20771
  root = resolved.root;
20717
20772
  outDir = resolved.build.outDir;
20718
20773
  command = resolved.command;
20774
+ if (command === 'build') {
20775
+ assertMiniappBuildCompiler(resolved.esbuild);
20776
+ resolved.build.target = resolveMiniappBuildTargets(resolved.build.target);
20777
+ for (const environment of Object.values(resolved.environments ?? {})) {
20778
+ if (environment.build)
20779
+ environment.build.target = resolveMiniappBuildTargets(environment.build.target);
20780
+ }
20781
+ }
20719
20782
  hmrWebSocketUrl = resolveHmrWebSocketUrl(resolved);
20720
20783
  configuredDeviceLogUploadUrls = resolveConfiguredDeviceLogUploadUrls(resolved);
20721
20784
  },
@@ -20743,7 +20806,9 @@ function miniappManifest() {
20743
20806
  bindAppIds: readMiniappBindAppIdsFromPackageJson(root),
20744
20807
  });
20745
20808
  }
20746
- catch { /* 读取失败不推断为缺失。 */ }
20809
+ catch {
20810
+ /* 读取失败不推断为缺失。 */
20811
+ }
20747
20812
  for (const warning of warnings)
20748
20813
  server.config.logger.warn(`[${warning.code}] ${warning.message}`);
20749
20814
  metadataWarningsShown = true;
@@ -20871,7 +20936,9 @@ function miniappManifest() {
20871
20936
  if (requestedDigest)
20872
20937
  return Promise.resolve(snapshots.get(requestedDigest));
20873
20938
  // manifest 与制品可能同时请求;本轮构建只准备一次,失败后允许下次请求重试。
20874
- pendingSnapshot ??= buildSnapshot().finally(() => { pendingSnapshot = undefined; });
20939
+ pendingSnapshot ??= buildSnapshot().finally(() => {
20940
+ pendingSnapshot = undefined;
20941
+ });
20875
20942
  return pendingSnapshot;
20876
20943
  };
20877
20944
  server.middlewares.use(async (request, response, next) => {
@@ -21035,10 +21102,7 @@ function miniappManifest() {
21035
21102
  const enforced = enforceMiniappHtmlPolicy(html, {
21036
21103
  ...(command === 'serve'
21037
21104
  ? {
21038
- deviceLogUploadUrls: Array.from(new Set([
21039
- ...configuredDeviceLogUploadUrls,
21040
- ...resolveViteDeviceLogUploadUrls(devServer?.resolvedUrls),
21041
- ])),
21105
+ deviceLogUploadUrls: Array.from(new Set([...configuredDeviceLogUploadUrls, ...resolveViteDeviceLogUploadUrls(devServer?.resolvedUrls)])),
21042
21106
  hmrWebSocketUrl,
21043
21107
  }
21044
21108
  : {}),
@@ -21318,12 +21382,13 @@ function resolveConfiguredDeviceLogUploadUrls(resolved) {
21318
21382
  else {
21319
21383
  hosts.add('127.0.0.1');
21320
21384
  }
21321
- return Array.from(hosts, host => createDeviceLogUploadUrl(protocol, host, resolved.server.port)).filter((url) => Boolean(url));
21385
+ return Array.from(hosts, (host) => createDeviceLogUploadUrl(protocol, host, resolved.server.port)).filter((url) => Boolean(url));
21322
21386
  }
21323
21387
  function resolveViteDeviceLogUploadUrls(resolvedUrls) {
21324
21388
  if (!resolvedUrls)
21325
21389
  return [];
21326
- return Array.from(new Set([...resolvedUrls.local, ...resolvedUrls.network].map(url => {
21390
+ return Array.from(new Set([...resolvedUrls.local, ...resolvedUrls.network]
21391
+ .map((url) => {
21327
21392
  try {
21328
21393
  const endpoint = new URL(DEVICE_LOG_PATH, url);
21329
21394
  if (endpoint.protocol !== 'http:' && endpoint.protocol !== 'https:')
@@ -21337,7 +21402,8 @@ function resolveViteDeviceLogUploadUrls(resolvedUrls) {
21337
21402
  catch {
21338
21403
  return undefined;
21339
21404
  }
21340
- }).filter((url) => Boolean(url))));
21405
+ })
21406
+ .filter((url) => Boolean(url))));
21341
21407
  }
21342
21408
  function createDeviceLogUploadUrl(protocol, host, port) {
21343
21409
  try {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@heybox/hb-sdk",
3
- "version": "0.9.4-alpha.1",
3
+ "version": "0.9.4-alpha.2",
4
4
  "sideEffects": [
5
5
  "./src/index.ts",
6
6
  "./src/core/singleton.ts",
@@ -76,7 +76,7 @@
76
76
  "undici": "^7.28.0",
77
77
  "ws": "^8.18.0",
78
78
  "sharp": "^0.34.5",
79
- "@heybox/hb-sdk-protocol": "0.9.4-alpha.1"
79
+ "@heybox/hb-sdk-protocol": "0.9.4-alpha.2"
80
80
  },
81
81
  "peerDependencies": {
82
82
  "vite": ">=5"
@@ -128,13 +128,13 @@
128
128
  "vitest": "^3.2.4",
129
129
  "@ai-desktop/view-contract": "file:../hb-sdk-protocol/vendor/view-contract-2.2.2-6ac49bbf6410.tgz",
130
130
  "rollup-plugin-dts": "6.4.0",
131
+ "@heybox-domain/heybox-theme": "~0.1.0",
132
+ "@heybox/hb-sdk-runtime": "~0.9.4-alpha.2",
131
133
  "@heybox-domain/heybox-vue3-ui": "~0.1.0",
132
134
  "@heybox/hb-api": "~1.28.17",
133
- "@heybox-domain/heybox-theme": "~0.1.0",
134
- "@heybox/hb-sdk-runtime": "~0.9.4-alpha.1",
135
135
  "@heybox/runtime": "~0.2.1",
136
- "@heybox/runtime-policy": "~0.2.1",
137
- "@heybox/runtime-transport-fetch": "~0.2.1"
136
+ "@heybox/runtime-transport-fetch": "~0.2.1",
137
+ "@heybox/runtime-policy": "~0.2.1"
138
138
  },
139
139
  "publishConfig": {
140
140
  "registry": "https://registry.npmjs.org/",
package/skill/skill.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "hb-sdk",
3
- "skillVersion": "0.9.4-alpha.1+skill.d0d502673711",
3
+ "skillVersion": "0.9.4-alpha.2+skill.d0d502673711",
4
4
  "sdk": {
5
5
  "package": "@heybox/hb-sdk",
6
- "version": "0.9.4-alpha.1",
7
- "compatibility": "0.9.4-alpha.1"
6
+ "version": "0.9.4-alpha.2",
7
+ "compatibility": "0.9.4-alpha.2"
8
8
  },
9
9
  "distribution": {
10
10
  "type": "npm",
11
11
  "package": "@heybox/hb-sdk",
12
- "version": "0.9.4-alpha.1",
12
+ "version": "0.9.4-alpha.2",
13
13
  "path": "skill"
14
14
  },
15
15
  "integrity": "sha256-d0d502673711f5d077ee62e657749125788e396d5203894b7077dfe866fd2990"
@@ -1,4 +1,5 @@
1
1
  import { Server, IncomingMessage, ServerResponse } from 'node:http';
2
+ import { Http2SecureServer } from 'node:http2';
2
3
 
3
4
  /**
4
5
  * `package.json#heybox.platforms` 接受的平台值,顺序同时是 Manifest 的规范化输出顺序。
@@ -20,7 +21,7 @@ type MiniappPlatform = (typeof MINIAPP_PLATFORM_VALUES)[number];
20
21
  interface MiniappManifestPlugin {
21
22
  /** 固定为 `heybox-miniapp-manifest`,同一份 Vite 配置必须且只能注册一个实例。 */
22
23
  name: string;
23
- /** 校验资源基准路径,并向 Vite 注入 SDK 版本和开发期日志开关。 */
24
+ /** 校验资源基准路径、保留生产语法兼容下限,并注入 SDK 版本和开发期日志开关。 */
24
25
  config: (config: MiniappManifestUserConfig, env?: {
25
26
  command: 'build' | 'serve';
26
27
  }) => MiniappManifestUserConfig | void;
@@ -49,7 +50,7 @@ interface MiniappManifestDevServer {
49
50
  };
50
51
  };
51
52
  /** Vite 底层 HTTP 服务;middleware mode 或尚未监听时可能为空。 */
52
- httpServer?: Server | null;
53
+ httpServer?: Server | Http2SecureServer | null;
53
54
  /** Vite 配置重载入口;插件会在重载期间保留当前本地调试快照。 */
54
55
  restart?: (forceOptimize?: boolean) => Promise<void>;
55
56
  /** 用于挂载 `hb-sdk dev` 本机调试中间件的 Connect middleware 容器。 */
@@ -69,6 +70,18 @@ interface MiniappManifestUserConfig {
69
70
  * Vite 资源基准路径。省略时插件返回 `./`;显式配置只接受空字符串或 `./`,以便版本目录内相对加载资源。
70
71
  */
71
72
  base?: string;
73
+ /** 生产构建始终叠加 Chrome 64 / Safari 12;更保守的项目目标继续生效。 */
74
+ build?: {
75
+ target?: string | string[] | false;
76
+ };
77
+ /** 生产构建不能关闭 esbuild;具体编译选项由 Vite 定义。 */
78
+ esbuild?: object | false;
79
+ /** Vite 6+ 的环境构建目标;生产环境同样保留平台语法兼容下限。 */
80
+ environments?: Record<string, {
81
+ build?: {
82
+ target?: string | string[] | false;
83
+ };
84
+ }>;
72
85
  /** 插件返回给 Vite 的编译期常量;业务项目无需通过该接口传入或覆盖。 */
73
86
  define?: Record<string, string>;
74
87
  }
@@ -92,17 +105,29 @@ interface MiniappManifestResolvedConfig {
92
105
  /** Vite 构建输出目录;Manifest 和 Companion 归档写入该目录。 */
93
106
  build: {
94
107
  outDir: string;
108
+ /** 生产构建在最终配置中再次保留平台语法兼容下限。 */
109
+ target?: string | string[] | false;
95
110
  };
111
+ /** 用于识别其他 config hook 是否关闭了生产构建的语法降级。 */
112
+ esbuild?: object | false;
113
+ /** Vite 6+ 已解析的环境构建目标。 */
114
+ environments?: Record<string, {
115
+ build?: {
116
+ target?: string | string[] | false;
117
+ };
118
+ }>;
96
119
  /** 开发服务网络配置,用于收窄注入 HTML 的 HMR WebSocket CSP。 */
97
120
  server: {
98
121
  host?: string | boolean;
99
- https?: boolean | Record<string, unknown>;
122
+ /** 只读取是否启用 HTTPS,不要求 Node ServerOptions 具备字符串索引。 */
123
+ https?: boolean | object;
100
124
  port?: number;
101
125
  hmr?: boolean | {
102
126
  clientPort?: number;
103
127
  host?: string;
104
128
  port?: number;
105
- protocol?: 'ws' | 'wss';
129
+ /** 与 Vite 的 HMR 配置类型保持一致,具体 URL 仍由 HTML 策略校验。 */
130
+ protocol?: string;
106
131
  };
107
132
  };
108
133
  /** 已解析插件列表;存在时用于拒绝重复注册 `miniappManifest()`。 */
@@ -172,10 +197,13 @@ declare const HB_SDK_MINI_PROGRAM_MANIFEST_ACCESS_TOKEN_ENV = "HB_SDK_MINI_PROGR
172
197
  *
173
198
  * Hook 行为如下:
174
199
  *
175
- * - `config`:省略 `base` 时补为 `'./'`,显式值只接受 `''` / `'./'`;注入 SDK 构建版本,且仅
176
- * `vite serve` 注入开发日志编译常量;
200
+ * - `config`:省略 `base` 时补为 `'./'`,显式值只接受 `''` / `'./'`;生产构建按 Chrome 64 / Safari 12
201
+ * 转换 Vite 编译脚本的 JavaScript 语法,保留更旧的自定义目标,拒绝 `esbuild: false`;注入 SDK 构建版本,且仅
202
+ * `vite serve` 注入开发日志编译常量。语法转换不处理原样复制或远端加载的脚本,不包含运行时 API polyfill,
203
+ * 也不会更新已发布旧产物;
177
204
  * - `configResolved`:确认插件唯一性,记录真实 `root`、`build.outDir`、`serve|build` 命令和精确 HMR
178
- * WebSocket 地址;直接 `vite build` 使用该实际 `outDir`,`hb-sdk build` 则由 CLI 固定为 `dist/`;
205
+ * WebSocket 地址,并再次确认生产环境的语法兼容目标;直接 `vite build` 使用该实际 `outDir`,
206
+ * `hb-sdk build` 则由 CLI 固定为 `dist/`;
179
207
  * - `configureServer`:为 `hb-sdk dev` 注册设备日志、本地小程序 Manifest 与 Companion Manifest/ZIP
180
208
  * 中间件;敏感路由只接受数值 loopback socket/Host、`GET|HEAD` 和 CLI 注入的独立短期令牌,快照在
181
209
  * 配置重载时按 digest 保留,并在服务真正关闭时清理;