补齐三端桥接模块分类门禁

新增微信移动桌面桥接模块分类断言

区分三端共同模块与原生 App 共同模块

锁定移动桌面微信端专属 HostBridge 模块边界
This commit is contained in:
2026-06-21 20:37:30 +08:00
parent f181838a34
commit 198da27ef8
+100
View File
@@ -1498,6 +1498,25 @@ const expectedDesktopShellRustFiles = [
'webview.rs',
'window_state.rs',
];
const expectedHostBridgeModuleTaxonomy = {
allShells: ['dispatch', 'protocol'],
nativeAppShells: [
'appearance',
'badge',
'capabilities',
'clipboard',
'file-payloads',
'files',
'navigation',
'network',
'notifications',
'runtime',
'share',
],
mobileOnly: ['bridge', 'haptics', 'scanner'],
desktopOnly: ['mod', 'title'],
wechatOnly: ['payment', 'shareGrid', 'subscribeMessage', 'webView'],
};
const documentedShellLayerGroups = [
{
label: 'wechat host bridge files',
@@ -3827,6 +3846,9 @@ function assertHostBridgeLayerLayout() {
]) {
assertUniqueList(values, label);
}
for (const [label, values] of Object.entries(expectedHostBridgeModuleTaxonomy)) {
assertUniqueList(values, `host bridge ${label} module taxonomy`);
}
for (const [route, expectedFiles] of Object.entries(
expectedWechatPageFilesByRoute,
)) {
@@ -3841,6 +3863,7 @@ function assertHostBridgeLayerLayout() {
expectedWechatHostBridgeFiles,
'wechat host bridge files',
);
assertHostBridgeModuleTaxonomy();
assertSameList(
readDirectoryFileList('miniprogram/shell', 'wechat shell files'),
@@ -3959,6 +3982,83 @@ function assertHostBridgeLayerLayout() {
);
}
function normalizeHostBridgeModuleNames(files) {
return files
.filter((fileName) => !fileName.includes('.test.'))
.map((fileName) =>
fileName
.replace(/\.(js|rs|ts)$/, '')
.replace('filePayloads', 'file-payloads')
.replace('file_payloads', 'file-payloads'),
)
.sort();
}
function assertHostBridgeModuleTaxonomy() {
const wechatModules = normalizeHostBridgeModuleNames(expectedWechatHostBridgeFiles);
const mobileModules = normalizeHostBridgeModuleNames(expectedMobileHostBridgeFiles);
const desktopModules = normalizeHostBridgeModuleNames(
expectedDesktopHostBridgeRustFiles,
);
const allShellModules = [...wechatModules, ...mobileModules, ...desktopModules];
const countInShells = (moduleName) =>
[wechatModules, mobileModules, desktopModules].filter((modules) =>
modules.includes(moduleName),
).length;
const actualAllShells = allShellModules
.filter((moduleName, index, modules) => modules.indexOf(moduleName) === index)
.filter((moduleName) => countInShells(moduleName) === 3)
.sort();
const actualNativeAppShells = mobileModules
.filter((moduleName) => desktopModules.includes(moduleName))
.filter((moduleName) => !wechatModules.includes(moduleName))
.sort();
const actualMobileOnly = mobileModules
.filter(
(moduleName) =>
!wechatModules.includes(moduleName) && !desktopModules.includes(moduleName),
)
.sort();
const actualDesktopOnly = desktopModules
.filter(
(moduleName) =>
!wechatModules.includes(moduleName) && !mobileModules.includes(moduleName),
)
.sort();
const actualWechatOnly = wechatModules
.filter(
(moduleName) =>
!mobileModules.includes(moduleName) && !desktopModules.includes(moduleName),
)
.sort();
assertSameList(
actualAllShells,
expectedHostBridgeModuleTaxonomy.allShells,
'all-shell HostBridge module taxonomy',
);
assertSameList(
actualNativeAppShells,
expectedHostBridgeModuleTaxonomy.nativeAppShells,
'native-app HostBridge module taxonomy',
);
assertSameList(
actualMobileOnly,
expectedHostBridgeModuleTaxonomy.mobileOnly,
'mobile-only HostBridge module taxonomy',
);
assertSameList(
actualDesktopOnly,
expectedHostBridgeModuleTaxonomy.desktopOnly,
'desktop-only HostBridge module taxonomy',
);
assertSameList(
actualWechatOnly,
expectedHostBridgeModuleTaxonomy.wechatOnly,
'wechat-only HostBridge module taxonomy',
);
}
function assertDesktopReleaseBinaryArtifact() {
const executableName =
process.platform === 'win32'