@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.
- package/CHANGELOG.md +14 -0
- package/README.md +2 -0
- package/dist/cli-chunks/{artifact-Dv6zPoPj.cjs → artifact-BTi9i7N4.cjs} +3 -3
- package/dist/cli-chunks/{build-BumRaEG6.cjs → build-CScc5bgz.cjs} +5 -5
- package/dist/cli-chunks/{create-BQimWyVw.cjs → create-BybyVKxB.cjs} +1 -1
- package/dist/cli-chunks/{deploy-lock-C79P53O1.cjs → deploy-lock-CtJXBtKK.cjs} +1 -1
- package/dist/cli-chunks/{dev-kuYLlVkZ.cjs → dev-BVZ9yV84.cjs} +8 -8
- package/dist/cli-chunks/{dev-context-BoizHQIi.cjs → dev-context-BjwOy-fF.cjs} +2 -2
- package/dist/cli-chunks/{doctor-DD1Uokke.cjs → doctor-CTEun30u.cjs} +1 -1
- package/dist/cli-chunks/{games-B8OMXnyU.cjs → games-Bp6gkkgb.cjs} +2 -2
- package/dist/cli-chunks/{index-dXb0CRuR.cjs → index-CxelQqdy.cjs} +17 -17
- package/dist/cli-chunks/{index-DGP5w5P8.cjs → index-DF8KQKoa.cjs} +1 -1
- package/dist/cli-chunks/{index.esm-BeHd4gL3.cjs → index.esm-vr3yuZ2Q.cjs} +6 -6
- package/dist/cli-chunks/{login-DLQ29GYc.cjs → login-BPyX2p9v.cjs} +1 -1
- package/dist/cli-chunks/{project-vite-BkRatXiB.cjs → project-vite-DBId94T0.cjs} +1 -1
- package/dist/cli-chunks/{remote-DKCzk6X3.cjs → remote-C1n11VWk.cjs} +7 -7
- package/dist/cli-chunks/{runtime-permission-env-DLLffpOa.cjs → runtime-permission-env-Beurz19O.cjs} +2 -2
- package/dist/cli-chunks/{skill-kkoE3F-I.cjs → skill-C33zgdJF.cjs} +2 -2
- package/dist/cli-chunks/{version-hdMctv12.cjs → version-BKjLEHsb.cjs} +1 -1
- package/dist/cli.cjs +1 -1
- package/dist/devtools/browser-dev-host/assets/{browser-dev-host-0UAlwnsV.js → browser-dev-host-DedSMBMn.js} +1 -1
- package/dist/devtools/browser-dev-host/assets/{desktop-app-launch-6LCHEMSe.js → desktop-app-launch-BBIYbjgT.js} +1 -1
- package/dist/devtools/browser-dev-host/assets/{index-DW4VxPMl.js → index-CnC7wDP_.js} +3 -3
- package/dist/devtools/browser-dev-host/index.html +2 -2
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/vite.cjs.js +79 -13
- package/dist/vite.esm.js +79 -13
- package/package.json +6 -6
- package/skill/skill.json +4 -4
- 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-
|
|
9
|
-
<link rel="modulepreload" crossorigin href="/assets/desktop-app-launch-
|
|
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.
|
|
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.
|
|
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.
|
|
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` 时补为 `'./'`,显式值只接受 `''` / `'./'
|
|
20620
|
-
*
|
|
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
|
|
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(() => {
|
|
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]
|
|
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
|
-
})
|
|
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.
|
|
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` 时补为 `'./'`,显式值只接受 `''` / `'./'
|
|
20617
|
-
*
|
|
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
|
|
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(() => {
|
|
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]
|
|
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
|
-
})
|
|
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.
|
|
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.
|
|
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-
|
|
137
|
-
"@heybox/runtime-
|
|
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.
|
|
3
|
+
"skillVersion": "0.9.4-alpha.2+skill.d0d502673711",
|
|
4
4
|
"sdk": {
|
|
5
5
|
"package": "@heybox/hb-sdk",
|
|
6
|
-
"version": "0.9.4-alpha.
|
|
7
|
-
"compatibility": "0.9.4-alpha.
|
|
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.
|
|
12
|
+
"version": "0.9.4-alpha.2",
|
|
13
13
|
"path": "skill"
|
|
14
14
|
},
|
|
15
15
|
"integrity": "sha256-d0d502673711f5d077ee62e657749125788e396d5203894b7077dfe866fd2990"
|
package/types/vite/index.d.ts
CHANGED
|
@@ -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
|
-
/**
|
|
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
|
-
|
|
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
|
-
|
|
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` 时补为 `'./'`,显式值只接受 `''` / `'./'
|
|
176
|
-
*
|
|
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
|
|
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 保留,并在服务真正关闭时清理;
|